diff --git a/packages/discovery/src/peer-exchange/peer_exchange_discovery.ts b/packages/discovery/src/peer-exchange/peer_exchange_discovery.ts index b276d998d6..5af01355e6 100644 --- a/packages/discovery/src/peer-exchange/peer_exchange_discovery.ts +++ b/packages/discovery/src/peer-exchange/peer_exchange_discovery.ts @@ -207,6 +207,12 @@ export class PeerExchangeDiscovery continue; } + const hasPrevShardInfo = await this.hasShardInfo(peerInfo.id); + const metadata = + !hasPrevShardInfo && shardInfo + ? { metadata: { shardInfo: encodeRelayShard(shardInfo) } } + : undefined; + // merge is smart enough to overwrite only changed parts await this.components.peerStore.merge(peerInfo.id, { tags: { @@ -214,11 +220,7 @@ export class PeerExchangeDiscovery value: DEFAULT_PEER_EXCHANGE_TAG_VALUE } }, - ...(shardInfo && { - metadata: { - shardInfo: encodeRelayShard(shardInfo) - } - }), + ...metadata, ...(peerInfo.multiaddrs && { multiaddrs: peerInfo.multiaddrs }) @@ -236,6 +238,22 @@ export class PeerExchangeDiscovery ); } } + + private async hasShardInfo(peerId: PeerId): Promise { + try { + const peer = await this.components.peerStore.get(peerId); + + if (!peer) { + return false; + } + + return peer.metadata.has("shardInfo"); + } catch (err) { + log.warn(`Error getting shard info for ${peerId.toString()}`, err); + } + + return false; + } } export function wakuPeerExchangeDiscovery(