diff --git a/.changeset/shiny-shrimps-relax.md b/.changeset/shiny-shrimps-relax.md new file mode 100644 index 00000000..418cdd46 --- /dev/null +++ b/.changeset/shiny-shrimps-relax.md @@ -0,0 +1,5 @@ +--- +"permissionless": patch +--- + +Added support for eth_call returning code -32000 for sender address calculation diff --git a/.size-limit.json b/.size-limit.json index 6999fef8..c03b8587 100644 --- a/.size-limit.json +++ b/.size-limit.json @@ -9,11 +9,5 @@ "name": "permissionless (cjs)", "path": "./packages/permissionless/_cjs/index.js", "limit": "160 kB" - }, - { - "name": "permissionless (minimal surface - tree-shaking)", - "path": "./packages/permissionless/_esm/index.js", - "limit": "20 kB", - "import": "{ bundlerActions }" } ] diff --git a/packages/permissionless/actions/public/getSenderAddress.ts b/packages/permissionless/actions/public/getSenderAddress.ts index 7d9fd8d7..b5e5607e 100644 --- a/packages/permissionless/actions/public/getSenderAddress.ts +++ b/packages/permissionless/actions/public/getSenderAddress.ts @@ -8,6 +8,7 @@ import { InvalidInputRpcError, type OneOf, type Prettify, + RawContractError, RpcRequestError, UnknownRpcError, concat, @@ -179,20 +180,22 @@ export const getSenderAddress = async ( } if (revertError instanceof InvalidInputRpcError) { - const hexStringRegex = /0x[a-fA-F0-9]+/ - // biome-ignore lint/suspicious/noExplicitAny: - const match = (revertError as unknown as any).cause.data.match( - hexStringRegex - ) + const { data: data_ } = ( + e instanceof RawContractError + ? e + : e instanceof BaseError + ? e.walk((err) => "data" in (err as Error)) || e.walk() + : {} + ) as RawContractError - if (!match) { + const data = typeof data_ === "string" ? data_ : data_?.data + + if (data === undefined) { throw new Error( "Failed to parse revert bytes from RPC response" ) } - const data: Hex = match[0] - const error = decodeErrorResult({ abi: [ {