From a29e86bfc8f2cfafa055259fa9b902bc16f161a3 Mon Sep 17 00:00:00 2001 From: Mark Spanbroek Date: Thu, 10 Apr 2025 09:47:16 +0200 Subject: [PATCH] Handle custom errors when estimating gas --- ethers/contracts/gas.nim | 3 ++- testmodule/testCustomErrors.nim | 14 +++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/ethers/contracts/gas.nim b/ethers/contracts/gas.nim index e90bb89..7ef3ec3 100644 --- a/ethers/contracts/gas.nim +++ b/ethers/contracts/gas.nim @@ -5,6 +5,7 @@ import ../signer import ./contract import ./contractcall import ./transactions +import ./errors import ./syntax type ContractGasEstimations[C] = distinct C @@ -42,4 +43,4 @@ func createGasEstimationCall*(procedure: NimNode): NimNode = result.addAsyncPragma() result.addUsedPragma() result.addEstimateCall() - + result.addErrorHandling() diff --git a/testmodule/testCustomErrors.nim b/testmodule/testCustomErrors.nim index f35abfd..884bc31 100644 --- a/testmodule/testCustomErrors.nim +++ b/testmodule/testCustomErrors.nim @@ -97,7 +97,7 @@ suite "Contract custom errors": expect ErrorWithArguments: await contract.revertsMultipleErrors(simple = false) - test "handles gas estimation errors": + test "handles gas estimation errors when calling a contract function": proc revertsTransaction(contract: TestCustomErrors) {.contract, errors:[ErrorWithArguments].} @@ -109,6 +109,18 @@ suite "Contract custom errors": check error.arguments.one == 1.u256 check error.arguments.two == true + test "handles errors when only doing gas estimation": + proc revertsTransaction(contract: TestCustomErrors) + {.contract, errors:[ErrorWithArguments], used.} + + let contract = contract.connect(provider.getSigner()) + try: + discard await contract.estimateGas.revertsTransaction() + fail() + except ErrorWithArguments as error: + check error.arguments.one == 1.u256 + check error.arguments.two == true + test "handles transaction submission errors": proc revertsTransaction(contract: TestCustomErrors) {.contract, errors:[ErrorWithArguments].}