diff --git a/internal/p2p/peermanager.go b/internal/p2p/peermanager.go index 3ab6fbdc2..f9e57b3c1 100644 --- a/internal/p2p/peermanager.go +++ b/internal/p2p/peermanager.go @@ -432,6 +432,10 @@ func (m *PeerManager) Add(address NodeAddress) (bool, error) { return false, nil } + // set the peer's mutable score to something non-zero so that + // peer's we've never + peer.MutableScore = 256 + // else add the new address peer.AddressInfo[address] = &peerAddressInfo{Address: address} if err := m.store.Set(peer); err != nil { @@ -862,7 +866,6 @@ func (m *PeerManager) Advertise(peerID types.NodeID, limit uint16) []NodeAddress } for nodeAddr, addressInfo := range peer.AddressInfo { - if len(addresses) >= int(limit) { return addresses } diff --git a/internal/p2p/router.go b/internal/p2p/router.go index 4e2a6be1f..21f306507 100644 --- a/internal/p2p/router.go +++ b/internal/p2p/router.go @@ -837,14 +837,6 @@ func (r *Router) handshakePeer( return peerInfo, peerKey, fmt.Errorf("invalid handshake NodeInfo: %w", err) } - if peerInfo.Network != r.nodeInfo.Network { - if err := r.peerManager.Inactivate(peerInfo.NodeID); err != nil { - return peerInfo, peerKey, fmt.Errorf("problem removing peer from store from incorrect network [%s]: %w", peerInfo.Network, err) - } - - return peerInfo, peerKey, fmt.Errorf("connected to peer from wrong network, %q, removed from peer store", peerInfo.Network) - } - if types.NodeIDFromPubKey(peerKey) != peerInfo.NodeID { return peerInfo, peerKey, fmt.Errorf("peer's public key did not match its node ID %q (expected %q)", peerInfo.NodeID, types.NodeIDFromPubKey(peerKey)) @@ -855,7 +847,11 @@ func (r *Router) handshakePeer( } if err := r.nodeInfo.CompatibleWith(peerInfo); err != nil { - return peerInfo, peerKey, ErrRejected{ + if err := r.peerManager.Inactivate(peerInfo.NodeID); err != nil { + return peerInfo, fmt.Errorf("problem inactivating peer %q: %w", peerInfo.ID(), err) + } + + return peerInfo, ErrRejected{ err: err, id: peerInfo.ID(), isIncompatible: true,