radiance/pkg/endpoints/endpoints.go

45 lines
941 B
Go

package endpoints
import (
"context"
"fmt"
"github.com/gagliardetto/solana-go/rpc"
"net"
"strconv"
)
const RPCLocalhost = "http://127.0.0.1:8899"
func GetNodeTPUPorts(ctx context.Context, rpcHost string, nodeIP net.IP) ([]uint16, error) {
c := rpc.New(rpcHost)
out, err := c.GetClusterNodes(ctx)
if err != nil {
return nil, err
}
for _, node := range out {
if node.TPU == nil {
continue
}
tpuAddr := *node.TPU
host, port, err := net.SplitHostPort(tpuAddr)
if err != nil {
return nil, fmt.Errorf("error parsing node TPU %s: %w", tpuAddr, err)
}
if host == nodeIP.String() {
port, err := strconv.Atoi(port)
if err != nil {
return nil, fmt.Errorf("error parsing node TPU %s: %w", tpuAddr, err)
}
return []uint16{
uint16(port), // TPU
uint16(port + 1), // TPUfwd
uint16(port + 2), // TPUvote
}, nil
}
}
return nil, fmt.Errorf("node %s not found in cluster", nodeIP)
}