UNPKG

@vbyte/btc-dev

Version:

Batteries-included toolset for plebian bitcoin development

46 lines (45 loc) 1.39 kB
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 }; }