From 019dfe61bfc5c1b1527a839050c1cf2a5dd36709 Mon Sep 17 00:00:00 2001 From: Gheorghe Pinzaru Date: Sat, 21 Dec 2024 18:09:58 +0700 Subject: [PATCH] Experimental erc20 fix crash when no address provided --- .changeset/funny-coats-smell.md | 5 +++++ .../src/abi-strategy/experimental-erc20.ts | 17 +++++++++++++---- 2 files changed, 18 insertions(+), 4 deletions(-) create mode 100644 .changeset/funny-coats-smell.md diff --git a/.changeset/funny-coats-smell.md b/.changeset/funny-coats-smell.md new file mode 100644 index 00000000..df7dd485 --- /dev/null +++ b/.changeset/funny-coats-smell.md @@ -0,0 +1,5 @@ +--- +'@3loop/transaction-decoder': patch +--- + +Fix crash in experimental erc20 resolver when address is empty. We provide an empty address when we decode logs for errors diff --git a/packages/transaction-decoder/src/abi-strategy/experimental-erc20.ts b/packages/transaction-decoder/src/abi-strategy/experimental-erc20.ts index 3f3222cf..f52a91e5 100644 --- a/packages/transaction-decoder/src/abi-strategy/experimental-erc20.ts +++ b/packages/transaction-decoder/src/abi-strategy/experimental-erc20.ts @@ -5,6 +5,9 @@ import { erc20Abi, getAddress, getContract } from 'viem' const getLocalFragments = (service: PublicClient, { address, chainId }: RequestModel.GetContractABIStrategy) => Effect.gen(function* () { + if (!address) + return yield* Effect.fail(new RequestModel.ResolveStrategyABIError('local-strategy', address, chainId)) + const client = yield* service .getPublicClient(chainId) .pipe( @@ -13,10 +16,16 @@ const getLocalFragments = (service: PublicClient, { address, chainId }: RequestM ), ) - const inst = getContract({ - abi: erc20Abi, - address: getAddress(address), - client: client.client, + const inst = yield* Effect.try({ + try: () => + getContract({ + abi: erc20Abi, + address: getAddress(address), + client: client.client, + }), + catch: () => { + throw new RequestModel.ResolveStrategyABIError('local-strategy', address, chainId) + }, }) const decimals = yield* Effect.tryPromise({