Skip to content

Commit 120bea7

Browse files
refactor(abstract-utxo): accept better arguments for explainTx and explainPsbt
Move decoding step to callsite Issue: BTC-1450
1 parent a891814 commit 120bea7

File tree

2 files changed

+11
-19
lines changed

2 files changed

+11
-19
lines changed

modules/abstract-utxo/src/abstractUtxoCoin.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1503,7 +1503,11 @@ export abstract class AbstractUtxoCoin extends BaseCoin {
15031503
if (typeof txHex !== 'string' || !txHex.match(/^([a-f0-9]{2})+$/i)) {
15041504
throw new Error('invalid transaction hex, must be a valid hex string');
15051505
}
1506-
return utxolib.bitgo.isPsbt(txHex) ? explainPsbt(params, this.network) : explainTx(params, this);
1506+
if (utxolib.bitgo.isPsbt(txHex)) {
1507+
return explainPsbt(utxolib.bitgo.createPsbtFromHex(txHex, this.network), params, this.network);
1508+
} else {
1509+
return explainTx(this.createTransactionFromHex<TNumber>(txHex), params, this.network);
1510+
}
15071511
}
15081512

15091513
/**

modules/abstract-utxo/src/transaction.ts

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -258,17 +258,11 @@ function getTxInputSignaturesCount<TNumber extends number | bigint>(
258258
* Decompose a raw psbt into useful information, such as the total amounts,
259259
* change amounts, and transaction outputs.
260260
*/
261-
export function explainPsbt<TNumber extends number | bigint>(
261+
export function explainPsbt<TNumber extends number | bigint, Tx extends bitgo.UtxoTransaction<bigint>>(
262+
psbt: bitgo.UtxoPsbt<Tx>,
262263
params: ExplainTransactionOptions<TNumber>,
263264
network: utxolib.Network
264265
): TransactionExplanation {
265-
const { txHex } = params;
266-
let psbt: bitgo.UtxoPsbt;
267-
try {
268-
psbt = bitgo.createPsbtFromHex(txHex, network);
269-
} catch (e) {
270-
throw new Error('failed to parse psbt hex');
271-
}
272266
const txOutputs = psbt.txOutputs;
273267

274268
function getChainAndIndexFromBip32Derivations(output: bitgo.PsbtOutput) {
@@ -346,18 +340,12 @@ export function explainPsbt<TNumber extends number | bigint>(
346340
* change amounts, and transaction outputs.
347341
*/
348342
export function explainTx<TNumber extends number | bigint>(
343+
tx: bitgo.UtxoTransaction<TNumber>,
349344
params: ExplainTransactionOptions<TNumber>,
350-
coin: AbstractUtxoCoin
345+
network: utxolib.Network
351346
): TransactionExplanation {
352-
const { txHex } = params;
353-
let tx;
354-
try {
355-
tx = coin.createTransactionFromHex(txHex);
356-
} catch (e) {
357-
throw new Error('failed to parse transaction hex');
358-
}
359-
const common = explainCommon(tx, params, coin.network);
360-
const inputSignaturesCount = getTxInputSignaturesCount(tx, params, coin.network);
347+
const common = explainCommon(tx, params, network);
348+
const inputSignaturesCount = getTxInputSignaturesCount(tx, params, network);
361349
return {
362350
...common,
363351
inputSignatures: inputSignaturesCount,

0 commit comments

Comments
 (0)