From 440bd01cd88779b6e369f47d2f3c471fb1813c4b Mon Sep 17 00:00:00 2001 From: Darshan <35736874+darshankabariya@users.noreply.github.com> Date: Wed, 1 Jul 2026 11:48:32 +0530 Subject: [PATCH] fix: handle on-chain RPC errors gracefully during RLN setup (#4008) --- .../group_manager/on_chain/rpc_wrapper.nim | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/logos_delivery/waku/rln/group_manager/on_chain/rpc_wrapper.nim b/logos_delivery/waku/rln/group_manager/on_chain/rpc_wrapper.nim index 9cb7f1ce3..c5fbc4a01 100644 --- a/logos_delivery/waku/rln/group_manager/on_chain/rpc_wrapper.nim +++ b/logos_delivery/waku/rln/group_manager/on_chain/rpc_wrapper.nim @@ -68,9 +68,22 @@ proc sendEthCallWithoutParams*( tx.data = Opt.some(byteutils.hexToSeqByte(dataSignature)) tx.chainId = Opt.some(chainId) - let resultBytes = await ethRpc.provider.eth_call(tx, "latest") + # A revert / rate-limit / dropped connection raises here; return err so RLN + # setup fails gracefully instead of crashing the node. + let resultBytes = + try: + await ethRpc.provider.eth_call(tx, "latest") + except CatchableError as e: + return err("eth_call failed for " & functionSignature & ": " & e.msg) + if resultBytes.len == 0: return err("No result returned for function call: " & functionSignature) + # UInt256.fromBytesBE panics (Defect) on < 32 bytes; reject short responses. + if resultBytes.len != 32: + return err( + "Unexpected result length (" & $resultBytes.len & " bytes) for function call: " & + functionSignature + ) return ok(UInt256.fromBytesBE(resultBytes)) proc sendEthCallWithParams*( @@ -94,5 +107,10 @@ proc sendEthCallWithParams*( tx.data = Opt.some(callData) tx.chainId = Opt.some(chainId) - let resultBytes = await ethRpc.provider.eth_call(tx, "latest") + let resultBytes = + try: + await ethRpc.provider.eth_call(tx, "latest") + except CatchableError as e: + return err("eth_call failed for " & functionSignature & ": " & e.msg) + return ok(resultBytes)