Skip to content

Commit a52ac2e

Browse files
Merge pull request #7932 from BitGo/BTC-2963.pass-wallet
feat(sdk-core, abstract-utxo): enhance explainTransaction with wallet context
2 parents 1b8e17e + 3ca122b commit a52ac2e

3 files changed

Lines changed: 15 additions & 4 deletions

File tree

modules/abstract-utxo/src/abstractUtxoCoin.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ import {
8787
import { assertFixedScriptWalletAddress } from './address/fixedScript';
8888
import { isSdkBackend, ParsedTransaction, SdkBackend } from './transaction/types';
8989
import { decodePsbtWith, encodeTransaction, stringToBufferTryFormats } from './transaction/decode';
90-
import { toBip32Triple, UtxoKeychain } from './keychains';
90+
import { fetchKeychains, toBip32Triple, UtxoKeychain } from './keychains';
9191
import { verifyKeySignature, verifyUserPublicKey } from './verifyKey';
9292
import { getPolicyForEnv } from './descriptor/validatePolicy';
9393
import { signTransaction } from './transaction/signTransaction';
@@ -875,8 +875,16 @@ export abstract class AbstractUtxoCoin
875875
* @param params
876876
*/
877877
override async explainTransaction<TNumber extends number | bigint = number>(
878-
params: ExplainTransactionOptions<TNumber>
878+
params: ExplainTransactionOptions<TNumber>,
879+
wallet?: IWallet
879880
): Promise<TransactionExplanation> {
881+
if (!params.pubs) {
882+
// if no pubs are provided, opportunistically fetch the keychains from the wallet
883+
if (wallet) {
884+
const keychains = await fetchKeychains(this, wallet);
885+
params.pubs = toBip32Triple(keychains).map((k) => k.neutered().toBase58()) as Triple<string>;
886+
}
887+
}
880888
return explainTx(this.decodeTransactionFromPrebuild(params), params, this.name);
881889
}
882890

modules/sdk-core/src/bitgo/baseCoin/iBaseCoin.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -583,7 +583,10 @@ export interface IBaseCoin {
583583
backup: string;
584584
bitgo: string;
585585
}>;
586-
explainTransaction(options: Record<string, any>): Promise<ITransactionExplanation<any, string | number> | undefined>;
586+
explainTransaction(
587+
options: Record<string, any>,
588+
wallet?: IWallet
589+
): Promise<ITransactionExplanation<any, string | number> | undefined>;
587590
verifyTransaction(params: VerifyTransactionOptions): Promise<boolean>;
588591
verifyAddress(params: VerifyAddressOptions): Promise<boolean>;
589592
isWalletAddress(params: VerifyAddressOptions | TssVerifyAddressOptions, wallet?: IWallet): Promise<boolean>;

modules/sdk-core/src/bitgo/staking/stakingWallet.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -405,7 +405,7 @@ export class StakingWallet implements IStakingWallet {
405405
return;
406406
}
407407

408-
const explainedTransaction = await coin.explainTransaction(result);
408+
const explainedTransaction = await coin.explainTransaction(result, this.wallet);
409409
const mismatchErrors: string[] = [];
410410

411411
if (buildParams?.recipients && buildParams.recipients.length > 0) {

0 commit comments

Comments
 (0)