@ledgerhq/hw-app-btc
Version:
Ledger Hardware Wallet Bitcoin Application API
41 lines • 1.68 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.extract = void 0;
const buffertools_1 = require("../buffertools");
/**
* This implements the "Transaction Extractor" role of BIP370 (PSBTv2
* https://github.com/bitcoin/bips/blob/master/bip-0370.mediawiki#transaction-extractor). However
* the role is partially documented in BIP174 (PSBTv0
* https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki#transaction-extractor).
*/
function extract(psbt) {
const tx = new buffertools_1.BufferWriter();
tx.writeUInt32(psbt.getGlobalTxVersion());
const isSegwit = !!psbt.getInputWitnessUtxo(0);
if (isSegwit) {
tx.writeSlice(Buffer.from([0, 1]));
}
const inputCount = psbt.getGlobalInputCount();
tx.writeVarInt(inputCount);
const witnessWriter = new buffertools_1.BufferWriter();
for (let i = 0; i < inputCount; i++) {
tx.writeSlice(psbt.getInputPreviousTxid(i));
tx.writeUInt32(psbt.getInputOutputIndex(i));
tx.writeVarSlice(psbt.getInputFinalScriptsig(i) ?? Buffer.from([]));
tx.writeUInt32(psbt.getInputSequence(i));
if (isSegwit) {
witnessWriter.writeSlice(psbt.getInputFinalScriptwitness(i));
}
}
const outputCount = psbt.getGlobalOutputCount();
tx.writeVarInt(outputCount);
for (let i = 0; i < outputCount; i++) {
tx.writeUInt64(psbt.getOutputAmount(i));
tx.writeVarSlice(psbt.getOutputScript(i));
}
tx.writeSlice(witnessWriter.buffer());
tx.writeUInt32(psbt.getGlobalFallbackLocktime() ?? 0);
return tx.buffer();
}
exports.extract = extract;
//# sourceMappingURL=psbtExtractor.js.map