From 25cd1a2d97f83de2a3a8a1eaa34e772cff13e2b6 Mon Sep 17 00:00:00 2001 From: Sk Sohab Date: Mon, 8 Apr 2024 03:10:32 +0530 Subject: [PATCH] =?UTF-8?q?fix:=20decodeEventLog=20=E2=80=93=20named=20arg?= =?UTF-8?q?s=20with=20a=20missing=20name=20(#2092)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * decodeEventLog bug fixed: named args with a missing name * Create curvy-pots-watch.md --------- Co-authored-by: jxom --- .changeset/curvy-pots-watch.md | 5 +++ src/utils/abi/decodeEventLog.test.ts | 46 ++++++++++++++++++++++++++++ src/utils/abi/decodeEventLog.ts | 2 +- 3 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 .changeset/curvy-pots-watch.md diff --git a/.changeset/curvy-pots-watch.md b/.changeset/curvy-pots-watch.md new file mode 100644 index 0000000000..43eea73ee9 --- /dev/null +++ b/.changeset/curvy-pots-watch.md @@ -0,0 +1,5 @@ +--- +"viem": patch +--- + +Fixed decoding of event logs when an event argument was missing a name. diff --git a/src/utils/abi/decodeEventLog.test.ts b/src/utils/abi/decodeEventLog.test.ts index f77446a71a..57747b91d9 100644 --- a/src/utils/abi/decodeEventLog.test.ts +++ b/src/utils/abi/decodeEventLog.test.ts @@ -80,6 +80,52 @@ test('named args: Transfer(address,address,uint256)', () => { }) }) +test('named args with a missing name: Transfer(address,address,uint256)', () => { + const event = decodeEventLog({ + abi: [ + { + inputs: [ + { + indexed: true, + name: 'from', + type: 'address', + }, + { + indexed: true, + name: 'to', + type: 'address', + }, + { + indexed: false, + name: '', + type: 'uint256', + }, + ], + name: 'Transfer', + type: 'event', + }, + ], + data: '0x0000000000000000000000000000000000000000000000000000000000000001', + topics: [ + '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', + '0x000000000000000000000000a5cc3c03994db5b0d9a5eedd10cabab0813678ac', + '0x000000000000000000000000a5cc3c03994db5b0d9a5eedd10cabab0813678ac', + ], + }) + assertType({ + eventName: 'Transfer', + args: ['0x', '0x', 1n], + }) + expect(event).toEqual({ + args: [ + '0xa5cc3c03994DB5b0d9A5eEdD10CabaB0813678AC', + '0xa5cc3c03994DB5b0d9A5eEdD10CabaB0813678AC', + 1n, + ], + eventName: 'Transfer', + }) +}) + test('unnamed args: Transfer(address,address,uint256)', () => { const event = decodeEventLog({ abi: [ diff --git a/src/utils/abi/decodeEventLog.ts b/src/utils/abi/decodeEventLog.ts index 0f4605887b..c8b4a51368 100644 --- a/src/utils/abi/decodeEventLog.ts +++ b/src/utils/abi/decodeEventLog.ts @@ -139,7 +139,7 @@ export function decodeEventLog< abiItem, param: param as AbiParameter & { indexed: boolean }, }) - args[param.name || i] = decodeTopic({ param, value: topic }) + args[isUnnamed ? i : param.name || i] = decodeTopic({ param, value: topic }) } // Decode data (non-indexed args).