@vbyte/btc-dev
Version:
Batteries-included toolset for plebian bitcoin development
46 lines (45 loc) • 1.39 kB
JavaScript
import { Assert } from '@vbyte/micro-lib/assert';
import { decode_tx } from './decode.js';
import { assert_tx_template } from './validate.js';
import { create_tx, create_tx_output } from './create.js';
export function parse_tx(txdata, prevouts) {
let tx;
if (typeof txdata === 'string' || txdata instanceof Uint8Array) {
tx = decode_tx(txdata);
}
else {
assert_tx_template(txdata);
tx = create_tx(txdata);
}
if (prevouts) {
Assert.has_items(prevouts, 'prevouts must be a non-empty array');
for (const [idx, vin] of tx.vin.entries()) {
const prevout = prevouts.at(idx);
Assert.exists(prevout, 'prevout not found for input index: ' + idx);
vin.prevout = create_tx_output(prevout);
}
}
return tx;
}
export function serialize_tx(txdata) {
const tx = parse_tx(txdata);
const version = tx.version;
const locktime = tx.locktime;
const vin = [];
const vout = [];
for (const e of tx.vin) {
if (e.prevout !== null) {
vin.push({
script_pk: e.prevout.script_pk,
value: Number(e.prevout.value)
});
}
}
for (const e of tx.vout) {
vout.push({
script_pk: e.script_pk,
value: Number(e.value)
});
}
return { version, locktime, vin, vout };
}