@@ -151,6 +151,7 @@ export class Wallet implements IWallet {
151151 prebuildWhitelistedParams ( ) : string [ ] {
152152 return [
153153 'addressType' ,
154+ 'apiVersion' ,
154155 'changeAddress' ,
155156 'consolidateAddresses' ,
156157 'cpfpFeeRate' ,
@@ -1537,7 +1538,7 @@ export class Wallet implements IWallet {
15371538 * @return {* }
15381539 */
15391540 async signTransaction ( params : WalletSignTransactionOptions = { } ) : Promise < SignedTransaction | TxRequest > {
1540- const { txPrebuild } = params ;
1541+ const { txPrebuild, apiVersion } = params ;
15411542
15421543 if ( _ . isFunction ( params . customGShareGeneratingFunction ) && _ . isFunction ( params . customRShareGeneratingFunction ) ) {
15431544 // invoke external signer TSS for EdDSA workflow
@@ -1555,7 +1556,7 @@ export class Wallet implements IWallet {
15551556 } ) ;
15561557
15571558 if ( this . _wallet . multisigType === 'tss' ) {
1558- return this . signTransactionTss ( { ...presign , prv : this . getUserPrv ( presign as GetUserPrvOptions ) } ) ;
1559+ return this . signTransactionTss ( { ...presign , prv : this . getUserPrv ( presign as GetUserPrvOptions ) , apiVersion } ) ;
15591560 }
15601561
15611562 let { pubs } = params ;
@@ -2526,8 +2527,16 @@ export class Wallet implements IWallet {
25262527 private async prebuildTransactionTss ( params : PrebuildTransactionOptions = { } ) : Promise < PrebuildTransactionResult > {
25272528 const reqId = params . reqId || new RequestTracer ( ) ;
25282529 this . bitgo . setRequestTracer ( reqId ) ;
2530+ if (
2531+ params . apiVersion === 'lite' &&
2532+ ( this . _wallet . type === 'custodial' || this . baseCoin . getMPCAlgorithm ( ) === 'ecdsa' )
2533+ ) {
2534+ throw new Error ( `Custodial and ECDSA MPC algorithm must always use 'full' api version` ) ;
2535+ }
2536+
25292537 const apiVersion =
2530- this . _wallet . type === 'custodial' || this . baseCoin . getMPCAlgorithm ( ) === 'ecdsa' ? 'full' : 'lite' ;
2538+ params . apiVersion ||
2539+ ( this . _wallet . type === 'custodial' || this . baseCoin . getMPCAlgorithm ( ) === 'ecdsa' ? 'full' : 'lite' ) ;
25312540
25322541 // Two options different implementations of fees seems to now be supported, for now we will support both to be backwards compatible
25332542 // TODO(BG-59685): deprecate one of these so that we have a single way to pass fees
@@ -2709,6 +2718,7 @@ export class Wallet implements IWallet {
27092718 txRequest : params . txPrebuild . txRequestId ,
27102719 prv : params . prv ,
27112720 reqId : params . reqId || new RequestTracer ( ) ,
2721+ apiVersion : params . apiVersion ,
27122722 } ) ;
27132723 return {
27142724 txRequestId : signedTxRequest . txRequestId ,
@@ -2794,7 +2804,7 @@ export class Wallet implements IWallet {
27942804 }
27952805
27962806 // ECDSA TSS uses TxRequestFull
2797- if ( this . baseCoin . getMPCAlgorithm ( ) === 'ecdsa' ) {
2807+ if ( this . baseCoin . getMPCAlgorithm ( ) === 'ecdsa' || params . apiVersion === 'full' ) {
27982808 return signedTransaction ;
27992809 }
28002810
0 commit comments