diff --git a/modules/sdk-core/src/bitgo/wallet/iWallet.ts b/modules/sdk-core/src/bitgo/wallet/iWallet.ts index 810a8cf5b6..e68f2808b4 100644 --- a/modules/sdk-core/src/bitgo/wallet/iWallet.ts +++ b/modules/sdk-core/src/bitgo/wallet/iWallet.ts @@ -206,6 +206,7 @@ export interface WalletSignTransactionOptions extends WalletSignBaseOptions { customMPCv2SigningRound3GenerationFunction?: CustomMPCv2SigningRound3GeneratingFunction; apiVersion?: ApiVersion; multisigTypeVersion?: 'MPCv2'; + walletPassphrase?: string; [index: string]: unknown; } diff --git a/modules/sdk-core/src/bitgo/wallet/wallet.ts b/modules/sdk-core/src/bitgo/wallet/wallet.ts index 497098b62e..20be6d5ad5 100644 --- a/modules/sdk-core/src/bitgo/wallet/wallet.ts +++ b/modules/sdk-core/src/bitgo/wallet/wallet.ts @@ -1717,6 +1717,21 @@ export class Wallet implements IWallet { params.txPrebuild = { txRequestId }; } + if (params.walletPassphrase && !(params.keychain || params.key)) { + if (!_.isString(params.walletPassphrase)) { + throw new Error('walletPassphrase must be a string'); + } + const keychains = await this.getKeychainsAndValidatePassphrase({ + reqId: params.reqId, + walletPassphrase: params.walletPassphrase, + }); + const userKeychain = keychains[0]; + if (!userKeychain || !userKeychain.encryptedPrv) { + throw new Error('the user keychain does not have property encryptedPrv'); + } + params.keychain = userKeychain; + } + const presign = await this.baseCoin.presignTransaction({ ...params, walletData: this._wallet,