diff --git a/internal/p2p/peermanager.go b/internal/p2p/peermanager.go index ad9547cef..46ed052a1 100644 --- a/internal/p2p/peermanager.go +++ b/internal/p2p/peermanager.go @@ -876,6 +876,7 @@ func (m *PeerManager) Advertise(peerID types.NodeID, limit uint16) []NodeAddress addresses = append(addresses, m.options.SelfAddress) } +OUTER: for _, peer := range m.store.Ranked() { if peer.ID == peerID { continue @@ -885,8 +886,8 @@ func (m *PeerManager) Advertise(peerID types.NodeID, limit uint16) []NodeAddress } for nodeAddr, addressInfo := range peer.AddressInfo { - if len(addresses) >= int(limit) { - return addresses + if len(addresses) >= int(limit)*2 { + break OUTER } // only add non-private NodeIDs @@ -895,6 +896,7 @@ func (m *PeerManager) Advertise(peerID types.NodeID, limit uint16) []NodeAddress } } } + rand.Shuffle(len(addresses), func(i, j int) { addresses[i], addresses[j] = addresses[j], addresses[i] })