@@ -115,8 +115,13 @@ type UtxoCustomSigningFunction<TNumber extends number | bigint> = {
115115} ;
116116
117117const { getExternalChainCode, isChainCode, scriptTypeForChain, outputScripts } = bitgo ;
118+
118119type Unspent < TNumber extends number | bigint = number > = bitgo . Unspent < TNumber > ;
119120
121+ type DecodedTransaction < TNumber extends number | bigint > =
122+ | utxolib . bitgo . UtxoTransaction < TNumber >
123+ | utxolib . bitgo . UtxoPsbt ;
124+
120125type RootWalletKeys = bitgo . RootWalletKeys ;
121126
122127export type UtxoCoinSpecific = AddressCoinSpecific | DescriptorAddressCoinSpecific ;
@@ -172,7 +177,7 @@ export interface TransactionInfo<TNumber extends number | bigint = number> {
172177}
173178
174179export interface ExplainTransactionOptions < TNumber extends number | bigint = number > {
175- txHex : string ;
180+ tx : DecodedTransaction < TNumber > ;
176181 txInfo ?: TransactionInfo < TNumber > ;
177182 feeInfo ?: string ;
178183 pubs ?: Triple < string > ;
@@ -565,9 +570,7 @@ export abstract class AbstractUtxoCoin extends BaseCoin {
565570 return utxolib . bitgo . createTransactionFromHex < TNumber > ( hex , this . network , this . amountType ) ;
566571 }
567572
568- decodeTransaction < TNumber extends number | bigint > (
569- input : Buffer | string
570- ) : utxolib . bitgo . UtxoTransaction < TNumber > | utxolib . bitgo . UtxoPsbt {
573+ decodeTransaction < TNumber extends number | bigint > ( input : Buffer | string ) : DecodedTransaction < TNumber > {
571574 if ( typeof input === 'string' ) {
572575 for ( const format of [ 'hex' , 'base64' ] as const ) {
573576 const buffer = Buffer . from ( input , format ) ;
@@ -640,12 +643,16 @@ export abstract class AbstractUtxoCoin extends BaseCoin {
640643
641644 const keySignatures = _ . get ( wallet , '_wallet.keySignatures' , { } ) ;
642645
643- if ( _ . isUndefined ( txPrebuild . txHex ) ) {
644- throw new Error ( 'missing required txPrebuild property txHex' ) ;
646+ let tx : DecodedTransaction < TNumber > ;
647+ if ( txPrebuild . txHex !== undefined ) {
648+ tx = this . decodeTransaction < TNumber > ( txPrebuild . txHex ) ;
649+ } else if ( txPrebuild . txBase64 !== undefined ) {
650+ tx = this . decodeTransaction ( txPrebuild . txBase64 ) ;
651+ } else {
652+ throw new Error ( 'missing required txPrebuild property txHex or txBase64' ) ;
645653 }
646- // obtain all outputs
647654 const explanation : TransactionExplanation = await this . explainTransaction < TNumber > ( {
648- txHex : txPrebuild . txHex ,
655+ tx ,
649656 txInfo : txPrebuild . txInfo ,
650657 pubs : keychainArray . map ( ( k ) => k . pub ) as Triple < string > ,
651658 } ) ;
@@ -1533,11 +1540,7 @@ export abstract class AbstractUtxoCoin extends BaseCoin {
15331540 async explainTransaction < TNumber extends number | bigint = number > (
15341541 params : ExplainTransactionOptions < TNumber >
15351542 ) : Promise < TransactionExplanation > {
1536- const { txHex } = params ;
1537- if ( typeof txHex !== 'string' || ! txHex . match ( / ^ ( [ a - f 0 - 9 ] { 2 } ) + $ / i) ) {
1538- throw new Error ( 'invalid transaction hex, must be a valid hex string' ) ;
1539- }
1540- return explainTx ( this . decodeTransaction ( txHex ) , params , this . network ) ;
1543+ return explainTx ( params . tx , params , this . network ) ;
15411544 }
15421545
15431546 /**
0 commit comments