diff --git a/peers/app_request_network.go b/peers/app_request_network.go index 1c0f57aa..f5673214 100644 --- a/peers/app_request_network.go +++ b/peers/app_request_network.go @@ -12,6 +12,7 @@ import ( "sync" "time" + "github.com/ava-labs/avalanchego/api/info" "github.com/ava-labs/avalanchego/ids" "github.com/ava-labs/avalanchego/message" "github.com/ava-labs/avalanchego/network" @@ -59,13 +60,19 @@ type appRequestNetwork struct { lock *sync.Mutex validatorClient *validators.CanonicalValidatorClient metrics *AppRequestNetworkMetrics + + // Nodes that we should connect to that are not publicly discoverable. + // Should only be used for local or custom blockchains where validators are not + // publicly discoverable by primary network nodes. + manuallyTrackedPeers []info.Peer } -// NewNetwork creates a p2p network client for interacting with validators +// NewNetwork creates a P2P network client for interacting with validators func NewNetwork( logLevel logging.Level, registerer prometheus.Registerer, trackedSubnets set.Set[ids.ID], + manuallyTrackedPeers []info.Peer, cfg Config, ) (AppRequestNetwork, error) { logger := logging.NewLogger( @@ -122,13 +129,14 @@ func NewNetwork( validatorClient := validators.NewCanonicalValidatorClient(logger, cfg.GetPChainAPI()) arNetwork := &appRequestNetwork{ - network: testNetwork, - handler: handler, - infoAPI: infoAPI, - logger: logger, - lock: new(sync.Mutex), - validatorClient: validatorClient, - metrics: metrics, + network: testNetwork, + handler: handler, + infoAPI: infoAPI, + logger: logger, + lock: new(sync.Mutex), + validatorClient: validatorClient, + metrics: metrics, + manuallyTrackedPeers: manuallyTrackedPeers, } go logger.RecoverAndPanic(func() { testNetwork.Dispatch() @@ -155,7 +163,7 @@ func (n *appRequestNetwork) ConnectPeers(nodeIDs set.Set[ids.NodeID]) set.Set[id // re-adding connections to already tracked peers. startInfoAPICall := time.Now() - // Get the list of peers + // Get the list of publicly discoverable peers peers, err := n.infoAPI.Peers(context.Background()) n.setInfoAPICallLatencyMS(float64(time.Since(startInfoAPICall).Milliseconds())) if err != nil { @@ -166,6 +174,9 @@ func (n *appRequestNetwork) ConnectPeers(nodeIDs set.Set[ids.NodeID]) set.Set[id return nil } + // Add manually tracked peers + peers = append(peers, n.manuallyTrackedPeers...) + // Attempt to connect to each peer var trackedNodes set.Set[ids.NodeID] for _, peer := range peers { diff --git a/relayer/main/main.go b/relayer/main/main.go index 06e4c6e5..da4a3d41 100644 --- a/relayer/main/main.go +++ b/relayer/main/main.go @@ -153,6 +153,7 @@ func main() { networkLogLevel, registerer, trackedSubnets, + nil, &cfg, ) if err != nil { diff --git a/signature-aggregator/main/main.go b/signature-aggregator/main/main.go index 27edfd3b..829f8600 100644 --- a/signature-aggregator/main/main.go +++ b/signature-aggregator/main/main.go @@ -88,6 +88,7 @@ func main() { networkLogLevel, prometheus.DefaultRegisterer, nil, + nil, &cfg, ) if err != nil {