From dfb2baf004a58c29f7afd0144c82a8d2e6710d5a Mon Sep 17 00:00:00 2001 From: Sasha <118575614+weboko@users.noreply.github.com> Date: Fri, 15 Aug 2025 00:30:07 +0200 Subject: [PATCH] fix: prevent setting shard info from PX if it exists (#2561) * prevent setting px shard info * address review --- .../peer-exchange/peer_exchange_discovery.ts | 28 +++++++++++++++---- 1 file changed, 23 insertions(+), 5 deletions(-) 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(