From 1eec26e9eb2fa6a8a601fa5cb8f893200f3047b1 Mon Sep 17 00:00:00 2001 From: David Kaplan Date: Mon, 1 Jun 2026 12:23:41 -0400 Subject: [PATCH] fix: add back in verifyTransaction T1-3418 --- .../src/transaction/descriptor/verifyTransaction.ts | 2 ++ .../unit/transaction/descriptor/verifyTransactionQr.ts | 8 +++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/modules/abstract-utxo/src/transaction/descriptor/verifyTransaction.ts b/modules/abstract-utxo/src/transaction/descriptor/verifyTransaction.ts index 301918238d..3e836b860e 100644 --- a/modules/abstract-utxo/src/transaction/descriptor/verifyTransaction.ts +++ b/modules/abstract-utxo/src/transaction/descriptor/verifyTransaction.ts @@ -94,6 +94,8 @@ export async function verifyTransaction( ); } + assertValidTransaction(psbt, descriptorMap, params.txParams.recipients ?? [], coin.name); + const parsedOutputs = toBaseParsedTransactionOutputsFromPsbt( psbt, descriptorMap, diff --git a/modules/abstract-utxo/test/unit/transaction/descriptor/verifyTransactionQr.ts b/modules/abstract-utxo/test/unit/transaction/descriptor/verifyTransactionQr.ts index 14c8481489..00f86979a0 100644 --- a/modules/abstract-utxo/test/unit/transaction/descriptor/verifyTransactionQr.ts +++ b/modules/abstract-utxo/test/unit/transaction/descriptor/verifyTransactionQr.ts @@ -3,6 +3,7 @@ import assert from 'assert'; import * as testutils from '@bitgo/wasm-utxo/testutils'; import { verifyTransaction } from '../../../../src/transaction/descriptor/verifyTransaction'; +import { toExtendedAddressFormat } from '../../../../src/transaction/recipient'; import { getUtxoCoin } from '../../util'; const { getDefaultXPubs, getDescriptor, getDescriptorMap, mockPsbt } = testutils.descriptor; @@ -44,12 +45,17 @@ describe('descriptor verifyTransaction - quantum-resistant sweep', function () { it('should reject when external outputs exist and qr is true', async function () { const psbt = buildPsbtWithExternal(); + const externalScript = Buffer.from(descriptorOther.atDerivationIndex(0).scriptPubkey()); + const externalAddress = toExtendedAddressFormat(externalScript, 'tbtc'); await assert.rejects( verifyTransaction( coin, { - txParams: { qr: true, recipients: [] }, + txParams: { + qr: true, + recipients: [{ address: externalAddress, amount: '400000' }], + }, txPrebuild: { txHex: Buffer.from(psbt.serialize()).toString('hex') }, wallet: {} as any, },