From 6ab2cfb53b883c5f43b5ef25458eb4e3fd6d62b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?rich=CE=9Brd?= Date: Wed, 6 Dec 2023 09:12:48 -0400 Subject: [PATCH] fix: take into account the ENR seq to determine if a peer is new or not (#945) --- waku/v2/peermanager/peer_manager.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/waku/v2/peermanager/peer_manager.go b/waku/v2/peermanager/peer_manager.go index e9396149..d16b69dd 100644 --- a/waku/v2/peermanager/peer_manager.go +++ b/waku/v2/peermanager/peer_manager.go @@ -341,9 +341,14 @@ func (pm *PeerManager) AddDiscoveredPeer(p service.PeerData, connectNow bool) { //Check if the peer is already present, if so skip adding _, err := pm.host.Peerstore().(wps.WakuPeerstore).Origin(p.AddrInfo.ID) if err == nil { - pm.logger.Debug("peer already in peerStore", logging.HostID("peer", p.AddrInfo.ID)) - return + enr, err := pm.host.Peerstore().(wps.WakuPeerstore).ENR(p.AddrInfo.ID) + // Verifying if the enr record is more recent (DiscV5 and peer exchange can return peers already seen) + if err == nil && enr.Record().Seq() > p.ENR.Seq() { + pm.logger.Debug("found discovered peer already in peerStore", logging.HostID("peer", p.AddrInfo.ID)) + return + } } + supportedProtos := []protocol.ID{} if len(p.PubsubTopics) == 0 && p.ENR != nil { // Try to fetch shard info and supported protocols from ENR to arrive at pubSub topics.