From 124231844d1ea011fc77b54d64fb151d1772a6ee Mon Sep 17 00:00:00 2001 From: gerceboss Date: Tue, 29 Jul 2025 15:25:23 +0530 Subject: [PATCH 1/2] add clean constructor for discv5 --- execution_chain/networking/discoveryv5.nim | 47 ++++++++++++++++++- execution_chain/networking/eth1_discovery.nim | 8 ++-- 2 files changed, 49 insertions(+), 6 deletions(-) diff --git a/execution_chain/networking/discoveryv5.nim b/execution_chain/networking/discoveryv5.nim index 66aa42c4de..159746ec17 100644 --- a/execution_chain/networking/discoveryv5.nim +++ b/execution_chain/networking/discoveryv5.nim @@ -9,8 +9,51 @@ {.push raises: [].} -include - eth/p2p/discoveryv5/protocol +import + std/[options], + chronos, + chronicles, + results, + metrics, + eth/common/keys, + eth/p2p/discoveryv5/[protocol, encoding, messages_encoding, enr, node, sessions] + +export + # Core types only + protocol.Protocol, + node.Node, + node.Address, + enr.Record + +# Type aliases for cleaner API +type + DiscoveryV5* = protocol.Protocol + NodeV5* = node.Node + AddressV5* = node.Address + +proc newDiscoveryV5*( + privKey: PrivateKey, + enrIp: Opt[IpAddress], + enrTcpPort: Opt[Port], + enrUdpPort: Opt[Port], + bootstrapRecords: openArray[enr.Record] = [], + bindPort: Port, + bindIp = IPv6_any(), + enrAutoUpdate = true, + rng = newRng(), +): DiscoveryV5 = + ## Create a new Discovery v5 protocol instance + protocol.newProtocol( + privKey = privKey, + enrIp = enrIp, + enrTcpPort = enrTcpPort, + enrUdpPort = enrUdpPort, + bootstrapRecords = bootstrapRecords, + bindPort = bindPort, + bindIp = bindIp, + enrAutoUpdate = enrAutoUpdate, + rng = rng + ) proc receiveV5*(d: Protocol, a: Address, packet: openArray[byte]): Result[void, cstring] = discv5_network_bytes.inc(packet.len.int64, labelValues = [$Direction.In]) diff --git a/execution_chain/networking/eth1_discovery.nim b/execution_chain/networking/eth1_discovery.nim index b7fa91ce37..78b0a96aba 100644 --- a/execution_chain/networking/eth1_discovery.nim +++ b/execution_chain/networking/eth1_discovery.nim @@ -29,13 +29,13 @@ logScope: type DiscV4 = discoveryv4.DiscoveryV4 - DiscV5 = discoveryv5.Protocol + DiscV5 = discoveryv5.DiscoveryV5 NodeV4 = discoveryv4.Node - NodeV5 = discoveryv5.Node + NodeV5 = discoveryv5.NodeV5 AddressV4 = discoveryv4.Address - AddressV5 = discoveryv5.Address + AddressV5 = discoveryv5.AddressV5 Eth1Discovery* = ref object discv4: DiscV4 @@ -110,7 +110,7 @@ proc new*( bindIp = bindIp, rng = rng ), - discv5: discoveryv5.newProtocol( + discv5: discoveryv5.newDiscoveryV5( privKey = privKey, enrIp = Opt.some(address.ip), enrTcpPort = Opt.some(address.tcpPort), From d90b46222da3b01e5e26a92d3c9b800dc39700b5 Mon Sep 17 00:00:00 2001 From: gerceboss Date: Wed, 30 Jul 2025 18:33:19 +0530 Subject: [PATCH 2/2] update error handling --- execution_chain/networking/discoveryv5.nim | 10 ++++++++-- execution_chain/networking/eth1_discovery.nim | 5 +++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/execution_chain/networking/discoveryv5.nim b/execution_chain/networking/discoveryv5.nim index 159746ec17..661e3cb025 100644 --- a/execution_chain/networking/discoveryv5.nim +++ b/execution_chain/networking/discoveryv5.nim @@ -30,6 +30,8 @@ type DiscoveryV5* = protocol.Protocol NodeV5* = node.Node AddressV5* = node.Address + + DiscResult*[T] = Result[T, cstring] proc newDiscoveryV5*( privKey: PrivateKey, @@ -55,10 +57,14 @@ proc newDiscoveryV5*( rng = rng ) -proc receiveV5*(d: Protocol, a: Address, packet: openArray[byte]): Result[void, cstring] = +proc receiveV5*(d: Protocol, a: Address, packet: openArray[byte]): DiscResult[void] = discv5_network_bytes.inc(packet.len.int64, labelValues = [$Direction.In]) - let packet = ?d.codec.decodePacket(a, packet) + let decoded = d.codec.decodePacket(a, packet) + if decoded.isErr(): + return err("discv5: Failed to decode packet") + + let packet = decoded[] case packet.flag of OrdinaryMessage: diff --git a/execution_chain/networking/eth1_discovery.nim b/execution_chain/networking/eth1_discovery.nim index 78b0a96aba..306959b496 100644 --- a/execution_chain/networking/eth1_discovery.nim +++ b/execution_chain/networking/eth1_discovery.nim @@ -84,8 +84,9 @@ proc processClient( if discv4.isErr: # unhandled buf will be handled by discv5 let addrv5 = raddr.to(AddressV5) - proto.discv5.receiveV5(addrv5, buf).isOkOr: - debug "Discovery receive error", discv4=discv4.error, discv5=error + let discv5 = proto.discv5.receiveV5(addrv5, buf) + if discv5.isErr: + debug "Discovery receive error", discv4=discv4.error, discv5=discv5.error #------------------------------------------------------------------------------ # Public functions