From b9e9483c66fe0d6bd03aa594fd6f4b5105758a02 Mon Sep 17 00:00:00 2001 From: Tanguy Date: Fri, 17 Sep 2021 07:56:30 +0200 Subject: [PATCH] Fallback ping requests on metadata V2 (#2875) Some clients disable their metadata V1 after the Altair fork, so we are unable to ping them correctly. This PR adds a fallback to try metadata V2 if V1 fails. --- beacon_chain/networking/eth2_network.nim | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/beacon_chain/networking/eth2_network.nim b/beacon_chain/networking/eth2_network.nim index 61b29289e..8fce56947 100644 --- a/beacon_chain/networking/eth2_network.nim +++ b/beacon_chain/networking/eth2_network.nim @@ -1513,13 +1513,21 @@ proc updatePeerMetadata(node: Eth2Node, peerId: PeerID) {.async.} = trace "updating peer metadata", peerId var peer = node.getPeer(peerId) - let response = await peer.getMetaData() - if response.isErr: - debug "Failed to retrieve metadata from peer!", peerId - return + #getMetaData can fail with an exception + let newMetadata = + try: + tryGet(await peer.getMetaData()) + except CatchableError: + let metadataV2 = + try: tryGet(await peer.getMetadata_v2()) + except CatchableError as exc: + debug "Failed to retrieve metadata from peer!", peerId, msg=exc.msg + return + + phase0.MetaData(seq_number: metadataV2.seq_number, + attnets: metadataV2.attnets) - let newMetadata = response.get() peer.metadata = some(newMetadata) peer.lastMetadataTime = Moment.now()