From 83d5bae5154e97ba74eb03acf34eab46f8a32426 Mon Sep 17 00:00:00 2001 From: Mohammed Ryaan Date: Mon, 6 Jul 2026 22:26:03 +0530 Subject: [PATCH] fix(sdk-coin-eth): fix verifyTransaction for zama TSS tx TICKET: CHALO-726 --- modules/sdk-coin-eth/src/erc7984Token.ts | 4 ++ .../sdk-coin-eth/test/unit/erc7984Token.ts | 38 +++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/modules/sdk-coin-eth/src/erc7984Token.ts b/modules/sdk-coin-eth/src/erc7984Token.ts index 35d4d68074..6712b6bba1 100644 --- a/modules/sdk-coin-eth/src/erc7984Token.ts +++ b/modules/sdk-coin-eth/src/erc7984Token.ts @@ -147,6 +147,10 @@ export class Erc7984Token extends Eth { verification?.consolidationToBaseAddress || txPrebuild?.consolidateId || txParams?.type === 'consolidate' || + // TSS signing path: resolveEffectiveTxParams sets type from intent.intentType which is + // 'consolidateToken' for ERC-7984 token consolidations. txPrebuild has only txHex + // (no consolidateId) in this path. + txParams?.type === 'consolidateToken' || txParams?.prebuildTx?.consolidateId ); } diff --git a/modules/sdk-coin-eth/test/unit/erc7984Token.ts b/modules/sdk-coin-eth/test/unit/erc7984Token.ts index bf923dfb37..348585cdb4 100644 --- a/modules/sdk-coin-eth/test/unit/erc7984Token.ts +++ b/modules/sdk-coin-eth/test/unit/erc7984Token.ts @@ -1108,4 +1108,42 @@ describe('verifyTransaction – confidential consolidation (FlushERC7984Forwarde }) .should.be.rejectedWith(/forwarder address mismatch/); }); + + // TSS MPCv2 signing path — resolveEffectiveTxParams sets type from intent.intentType ('consolidateToken'), + // and txPrebuild has only txHex (no consolidateId, no recipients). This was the broken path before + // isConsolidationTransaction was updated to recognise 'consolidateToken'. + it('should verify a valid direct callFromParent consolidation tx when type is consolidateToken (TSS MPCv2 signing path)', async function () { + const txHex = await buildDirectConsolidationTxHex(); + const wallet = new Wallet(bitgo, coin, { + coinSpecific: { baseAddress: CONSOLIDATION_BASE_ADDRESS }, + }); + + const result = await coin.verifyTransaction({ + txParams: { + type: 'consolidateToken', + recipients: [{ address: CONSOLIDATION_FORWARDER, amount: '0' }], + } as any, + txPrebuild: { txHex } as any, + wallet, + }); + result.should.equal(true); + }); + + it('should reject callFromParent consolidation with type consolidateToken when parent address does not match wallet base address', async function () { + const txHex = await buildDirectConsolidationTxHex(); + const wallet = new Wallet(bitgo, coin, { + coinSpecific: { baseAddress: '0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' }, + }); + + await coin + .verifyTransaction({ + txParams: { + type: 'consolidateToken', + recipients: [{ address: CONSOLIDATION_FORWARDER, amount: '0' }], + } as any, + txPrebuild: { txHex } as any, + wallet, + }) + .should.be.rejectedWith(/parent address mismatch/); + }); });