From 5b1da7353c2a94e1d2e17705457552b549ac5fbf Mon Sep 17 00:00:00 2001 From: Lorenzo <60553286+thedevbirb@users.noreply.github.com> Date: Fri, 29 Mar 2024 05:00:40 +0100 Subject: [PATCH] feat(direct peers): configure static peers to be direct peers in pubsub options (#13773) --- beacon-chain/p2p/pubsub.go | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/beacon-chain/p2p/pubsub.go b/beacon-chain/p2p/pubsub.go index 7b6f91c2d..0cc0b4f13 100644 --- a/beacon-chain/p2p/pubsub.go +++ b/beacon-chain/p2p/pubsub.go @@ -3,6 +3,7 @@ package p2p import ( "context" "encoding/hex" + "fmt" "strings" "time" @@ -130,7 +131,7 @@ func (s *Service) peerInspector(peerMap map[peer.ID]*pubsub.PeerScoreSnapshot) { } } -// Creates a list of pubsub options to configure out router with. +// pubsubOptions creates a list of options to configure our router with. func (s *Service) pubsubOptions() []pubsub.Option { psOpts := []pubsub.Option{ pubsub.WithMessageSignaturePolicy(pubsub.StrictNoSign), @@ -147,9 +148,35 @@ func (s *Service) pubsubOptions() []pubsub.Option { pubsub.WithGossipSubParams(pubsubGossipParam()), pubsub.WithRawTracer(gossipTracer{host: s.host}), } + + if len(s.cfg.StaticPeers) > 0 { + directPeersAddrInfos, err := parsePeersEnr(s.cfg.StaticPeers) + if err != nil { + log.WithError(err).Error("Could not add direct peer option") + return psOpts + } + psOpts = append(psOpts, pubsub.WithDirectPeers(directPeersAddrInfos)) + } + return psOpts } +// parsePeersEnr takes a list of raw ENRs and converts them into a list of AddrInfos. +func parsePeersEnr(peers []string) ([]peer.AddrInfo, error) { + addrs, err := PeersFromStringAddrs(peers) + if err != nil { + return nil, fmt.Errorf("Cannot convert peers raw ENRs into multiaddresses: %v", err) + } + if len(addrs) == 0 { + return nil, fmt.Errorf("Converting peers raw ENRs into multiaddresses resulted in an empty list") + } + directAddrInfos, err := peer.AddrInfosFromP2pAddrs(addrs...) + if err != nil { + return nil, fmt.Errorf("Cannot convert peers multiaddresses into AddrInfos: %v", err) + } + return directAddrInfos, nil +} + // creates a custom gossipsub parameter set. func pubsubGossipParam() pubsub.GossipSubParams { gParams := pubsub.DefaultGossipSubParams()