From c51d760ed2f0beb61ed08ec3d4ac38625a3a7864 Mon Sep 17 00:00:00 2001 From: Henry <11198460+godzillaba@users.noreply.github.com> Date: Tue, 15 Jul 2025 15:24:35 -0600 Subject: [PATCH 1/3] catch other eth call error format --- .../sdk/src/lib/dataEntities/retryableData.ts | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/packages/sdk/src/lib/dataEntities/retryableData.ts b/packages/sdk/src/lib/dataEntities/retryableData.ts index 7db4c32593..9337bf5092 100644 --- a/packages/sdk/src/lib/dataEntities/retryableData.ts +++ b/packages/sdk/src/lib/dataEntities/retryableData.ts @@ -1,6 +1,7 @@ import { Interface } from '@ethersproject/abi' import { BigNumber } from 'ethers' import { isDefined } from '../utils/lib' +import { isHexString } from 'ethers/lib/utils' // TODO: add typechain support const errorInterface = new Interface([ @@ -82,9 +83,30 @@ export class RetryableDataTools { body?: string data?: string } + body?: string // there could be a json string here that contains the revert data } } + try { + const possibleErrorBody = JSON.parse( + typedError.error?.body || '' + ) as { + error?: { + code?: number + message?: string + data?: string + } + } + + if ( + possibleErrorBody.error?.code === -32015 && isHexString(possibleErrorBody.error.data) + ) { + return possibleErrorBody.error.data + } + } catch { + // ignore parsing error + } + if (typedError.data) { return typedError.data } else if (typedError.error?.error?.body) { From 25d69a5257ee548bdc1b9caf4216cdf9e764a6d6 Mon Sep 17 00:00:00 2001 From: Henry <11198460+godzillaba@users.noreply.github.com> Date: Tue, 15 Jul 2025 15:33:01 -0600 Subject: [PATCH 2/3] improve comment --- packages/sdk/src/lib/dataEntities/retryableData.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/sdk/src/lib/dataEntities/retryableData.ts b/packages/sdk/src/lib/dataEntities/retryableData.ts index 9337bf5092..e9eac9508d 100644 --- a/packages/sdk/src/lib/dataEntities/retryableData.ts +++ b/packages/sdk/src/lib/dataEntities/retryableData.ts @@ -83,7 +83,17 @@ export class RetryableDataTools { body?: string data?: string } - body?: string // there could be a json string here that contains the revert data + + // there may be a json string at this key of the form: + // { + // "error": { + // "code": -32015, + // "message": "...", + // "data": "0x..." + // } + // } + // nethermind may return revert data this way + body?: string } } From 49144922fa58a8400037550fab79b48a4e6ca936 Mon Sep 17 00:00:00 2001 From: Henry <11198460+godzillaba@users.noreply.github.com> Date: Tue, 15 Jul 2025 15:42:19 -0600 Subject: [PATCH 3/3] format --- packages/sdk/src/lib/dataEntities/retryableData.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/sdk/src/lib/dataEntities/retryableData.ts b/packages/sdk/src/lib/dataEntities/retryableData.ts index e9eac9508d..3bc64992a7 100644 --- a/packages/sdk/src/lib/dataEntities/retryableData.ts +++ b/packages/sdk/src/lib/dataEntities/retryableData.ts @@ -98,9 +98,7 @@ export class RetryableDataTools { } try { - const possibleErrorBody = JSON.parse( - typedError.error?.body || '' - ) as { + const possibleErrorBody = JSON.parse(typedError.error?.body || '') as { error?: { code?: number message?: string @@ -109,7 +107,8 @@ export class RetryableDataTools { } if ( - possibleErrorBody.error?.code === -32015 && isHexString(possibleErrorBody.error.data) + possibleErrorBody.error?.code === -32015 && + isHexString(possibleErrorBody.error.data) ) { return possibleErrorBody.error.data }