From 98a3e78a5cc8f7a17be0adb7b5288703b046c1ad Mon Sep 17 00:00:00 2001 From: ArunBala-Bitgo Date: Thu, 7 May 2026 01:10:17 +0530 Subject: [PATCH] fix(sdk-coin-xdc): add tokenApproval and consolidate to verifyTssTransaction bypass list The bypass list in xdcToken.ts and xdc.ts was copied from a stale bscToken.ts and was missing tokenApproval and consolidate transaction types. This caused enableToken (TXCD:TMT) to fail with "missing txParams" because tokenApproval transactions have no recipients and were not in the bypass list. Fixes CECHO-915. Introduced in commit 03d5339d72 (COIN-7060). Co-Authored-By: Claude Sonnet 4.6 TICKET: CECHO-915 --- modules/sdk-coin-xdc/src/xdc.ts | 3 +- modules/sdk-coin-xdc/src/xdcToken.ts | 3 +- modules/sdk-coin-xdc/test/unit/xdcToken.ts | 34 ++++++++++++++++++++++ 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/modules/sdk-coin-xdc/src/xdc.ts b/modules/sdk-coin-xdc/src/xdc.ts index 9724ea9c73..285004fc25 100644 --- a/modules/sdk-coin-xdc/src/xdc.ts +++ b/modules/sdk-coin-xdc/src/xdc.ts @@ -62,7 +62,8 @@ export class Xdc extends AbstractEthLikeNewCoins { !txParams?.recipients && !( txParams.prebuildTx?.consolidateId || - (txParams.type && ['acceleration', 'fillNonce', 'transferToken'].includes(txParams.type)) + (txParams.type && + ['acceleration', 'fillNonce', 'transferToken', 'tokenApproval', 'consolidate'].includes(txParams.type)) ) ) { throw new Error(`missing txParams`); diff --git a/modules/sdk-coin-xdc/src/xdcToken.ts b/modules/sdk-coin-xdc/src/xdcToken.ts index 7a4b88dece..3224250cce 100644 --- a/modules/sdk-coin-xdc/src/xdcToken.ts +++ b/modules/sdk-coin-xdc/src/xdcToken.ts @@ -73,7 +73,8 @@ export class XdcToken extends EthLikeToken { !txParams?.recipients && !( txParams.prebuildTx?.consolidateId || - (txParams.type && ['acceleration', 'fillNonce', 'transferToken'].includes(txParams.type)) + (txParams.type && + ['acceleration', 'fillNonce', 'transferToken', 'tokenApproval', 'consolidate'].includes(txParams.type)) ) ) { throw new Error(`missing txParams`); diff --git a/modules/sdk-coin-xdc/test/unit/xdcToken.ts b/modules/sdk-coin-xdc/test/unit/xdcToken.ts index 362cab347e..d59f2ce913 100644 --- a/modules/sdk-coin-xdc/test/unit/xdcToken.ts +++ b/modules/sdk-coin-xdc/test/unit/xdcToken.ts @@ -160,6 +160,40 @@ describe('XDC Token:', function () { result.should.equal(true); }); + it('should return true for tokenApproval type without recipients', async function () { + const token = bitgo.coin('txdc:tmt') as XdcToken; + const mockWallet = {} as unknown as IWallet; + + const result = await token.verifyTssTransaction({ + txParams: { + type: 'tokenApproval', + }, + txPrebuild: mockTokenTransferData.txPrebuild as unknown as Parameters< + typeof token.verifyTssTransaction + >[0]['txPrebuild'], + wallet: mockWallet, + }); + + result.should.equal(true); + }); + + it('should return true for consolidate type without recipients', async function () { + const token = bitgo.coin('txdc:tmt') as XdcToken; + const mockWallet = {} as unknown as IWallet; + + const result = await token.verifyTssTransaction({ + txParams: { + type: 'consolidate', + }, + txPrebuild: mockTokenTransferData.txPrebuild as unknown as Parameters< + typeof token.verifyTssTransaction + >[0]['txPrebuild'], + wallet: mockWallet, + }); + + result.should.equal(true); + }); + it('should throw error when txParams.recipients is missing and no valid type', async function () { const token = bitgo.coin('txdc:tmt') as XdcToken; const mockWallet = {} as unknown as IWallet;