diff --git a/.changeset/gorgeous-pumpkins-chew.md b/.changeset/gorgeous-pumpkins-chew.md new file mode 100644 index 00000000..d8b31dd9 --- /dev/null +++ b/.changeset/gorgeous-pumpkins-chew.md @@ -0,0 +1,5 @@ +--- +"permissionless": patch +--- + +Added support for parsing revert data from kakarot, rootstock-testnet & fuse to "getSenderAddress" diff --git a/.size-limit.json b/.size-limit.json index 6ad6af73..6999fef8 100644 --- a/.size-limit.json +++ b/.size-limit.json @@ -2,7 +2,7 @@ { "name": "permissionless (esm)", "path": "./packages/permissionless/_esm/index.js", - "limit": "40 kB", + "limit": "50 kB", "import": "*" }, { diff --git a/packages/permissionless/actions/public/getSenderAddress.ts b/packages/permissionless/actions/public/getSenderAddress.ts index d8ade9d8..8f2099aa 100644 --- a/packages/permissionless/actions/public/getSenderAddress.ts +++ b/packages/permissionless/actions/public/getSenderAddress.ts @@ -151,10 +151,20 @@ export const getSenderAddress = async < if (callExecutionError.cause.name === "RpcRequestError") { const revertError = callExecutionError.cause as RpcRequestErrorType - // biome-ignore lint/suspicious/noExplicitAny: fuse issues - const data = (revertError as unknown as any).cause.data.split( - " " - )[1] + + const hexStringRegex = /0x[a-fA-F0-9]+/ + // biome-ignore lint/suspicious/noExplicitAny: + const match = (revertError as unknown as any).cause.data.match( + hexStringRegex + ) + + if (!match) { + throw new Error( + "Failed to parse revert bytes from RPC response" + ) + } + + const data: Hex = match[0] const error = decodeErrorResult({ abi: [ @@ -180,8 +190,20 @@ export const getSenderAddress = async < //Ganache local testing returns "InvalidInputRpcError" with data in regular format const revertError = callExecutionError.cause as RpcRequestErrorType - // biome-ignore lint/suspicious/noExplicitAny: fuse issues - const data = (revertError as unknown as any).cause.data + + const hexStringRegex = /0x[a-fA-F0-9]+/ + // biome-ignore lint/suspicious/noExplicitAny: + const match = (revertError as unknown as any).cause.data.match( + hexStringRegex + ) + + if (!match) { + throw new Error( + "Failed to parse revert bytes from RPC response" + ) + } + + const data: Hex = match[0] const error = decodeErrorResult({ abi: [