From 9cb09c9e5255e97fa214d9bc8bdc1c24382faa04 Mon Sep 17 00:00:00 2001 From: Otto Allmendinger Date: Thu, 6 Nov 2025 15:43:47 +0100 Subject: [PATCH] feat(sdk-core): improve ParsedTransaction interface type Document the main purpose of ParsedTransaction and make the key field implicitExternalSpendAmount explicit in the interface. Remove unnecessary type assertions in pendingApproval.ts that are now handled by the improved type definition. Issue: BTC-2732 Co-authored-by: llm-git --- modules/sdk-core/src/bitgo/baseCoin/iBaseCoin.ts | 8 +++++++- .../sdk-core/src/bitgo/pendingApproval/pendingApproval.ts | 8 ++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/modules/sdk-core/src/bitgo/baseCoin/iBaseCoin.ts b/modules/sdk-core/src/bitgo/baseCoin/iBaseCoin.ts index 5d3c2b96cc..86e8d9ffb6 100644 --- a/modules/sdk-core/src/bitgo/baseCoin/iBaseCoin.ts +++ b/modules/sdk-core/src/bitgo/baseCoin/iBaseCoin.ts @@ -277,8 +277,14 @@ export interface ParseTransactionOptions { [index: string]: unknown; } -// TODO (SDKT-9): reverse engineer and add options +/** + * This is only used for determining the PayGo fee of a transaction which is only relevant for UTXO coins. + * Some coins return various other fields here, but they are only used internally by the respective coins. + */ export interface ParsedTransaction { + // the callsite assumes that this is the PayGo amount + implicitExternalSpendAmount?: number | bigint; + // coins may add internal fields [index: string]: unknown; } diff --git a/modules/sdk-core/src/bitgo/pendingApproval/pendingApproval.ts b/modules/sdk-core/src/bitgo/pendingApproval/pendingApproval.ts index 6b903fcaf8..ebf7e898ff 100644 --- a/modules/sdk-core/src/bitgo/pendingApproval/pendingApproval.ts +++ b/modules/sdk-core/src/bitgo/pendingApproval/pendingApproval.ts @@ -304,16 +304,16 @@ export class PendingApproval implements IPendingApproval { prebuildParams = _.extend({}, prebuildParams, { reqId: reqId }); const signedTransaction = await this.wallet.prebuildAndSignTransaction(prebuildParams); // compare PAYGo fees - const originalParsedTransaction = (await this.baseCoin.parseTransaction({ + const originalParsedTransaction = await this.baseCoin.parseTransaction({ txParams: prebuildParams, wallet: this.wallet, txPrebuild: originalPrebuild, - })) as any; - const recreatedParsedTransaction = (await this.baseCoin.parseTransaction({ + }); + const recreatedParsedTransaction = await this.baseCoin.parseTransaction({ txParams: prebuildParams, wallet: this.wallet, txPrebuild: signedTransaction, - })) as any; + }); if (_.isUndefined(recreatedParsedTransaction.implicitExternalSpendAmount)) { return signedTransaction;