UNPKG

bitcoin-tx-lib

Version:

A Typescript library for building and signing Bitcoin transactions

101 lines 4.08 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const ecpairkey_1 = require("../ecpairkey"); const txbuilder_1 = require("./txbuilder"); class TestTransactionBuilder extends txbuilder_1.TransactionBuilder { build(params) { return this.buildAndSign(params); } testGenerateScriptSig(input, params) { return this.generateScriptSig(input, params); } testGenerateWitness(input, params) { return this.generateWitness(input, params); } testValidateInput(input, inputs) { return this.validateInput(input, inputs); } testValidateOutput(output, outputs) { return this.validateOutput(output, outputs); } testOutputsRaw(outputs) { return this.outputsRaw(outputs); } } describe("TransactionBuilder", () => { const pairKey = new ecpairkey_1.ECPairKey(); const baseInput = { txid: "a".repeat(64), vout: 0, scriptPubKey: "0014" + "ab".repeat(20), // P2WPKH value: 50000 }; const baseOutput = { address: pairKey.getAddress(), amount: 49000 }; const baseParams = { inputs: [baseInput], outputs: [baseOutput], pairkey: pairKey, locktime: 0, version: 2 }; let builder; beforeEach(() => { builder = new TestTransactionBuilder(); }); test("detects segwit input", () => { expect(builder.isSegwit([baseInput])).toBe(true); }); test("detects non-segwit input", () => { const input = Object.assign(Object.assign({}, baseInput), { scriptPubKey: "76a914" + "ab".repeat(20) + "88ac" }); expect(builder.isSegwit([input])).toBe(false); }); test("builds and signs segwit transaction", () => { const raw = builder.build(baseParams); expect(raw).toBeInstanceOf(Uint8Array); expect(raw.length).toBeGreaterThan(0); }); test("generates scriptSig correctly", () => { const input = Object.assign(Object.assign({}, baseInput), { scriptPubKey: "76a914" + "ab".repeat(20) + "88ac" }); const sig = builder.testGenerateScriptSig(input, Object.assign(Object.assign({}, baseParams), { inputs: [input] })); expect(sig).toBeInstanceOf(Uint8Array); expect(sig.length).toBeGreaterThan(0); }); test("generates witness correctly", () => { const witness = builder.testGenerateWitness(baseInput, baseParams); expect(witness).toBeInstanceOf(Uint8Array); expect(witness.length).toBeGreaterThan(0); }); test("validates valid input", () => { expect(() => builder.testValidateInput(baseInput, [])).not.toThrow(); }); test("throws on invalid txid length", () => { const input = Object.assign(Object.assign({}, baseInput), { txid: "1234" }); expect(() => builder.testValidateInput(input, [])).toThrow("Expected a valid txid"); }); test("throws on duplicated txid", () => { expect(() => builder.testValidateInput(baseInput, [baseInput])).toThrow("already been added"); }); test("validates output", () => { expect(() => builder.testValidateOutput(baseOutput, [])).not.toThrow(); }); test("throws on invalid output amount", () => { const output = Object.assign(Object.assign({}, baseOutput), { amount: 0 }); expect(() => builder.testValidateOutput(output, [])).toThrow("valid amount"); }); test("throws on invalid address", () => { const output = Object.assign(Object.assign({}, baseOutput), { address: "invalid" }); expect(() => builder.testValidateOutput(output, [])).toThrow("valid address"); }); test("throws on duplicated output address", () => { expect(() => builder.testValidateOutput(baseOutput, [baseOutput])).toThrow("already been added"); }); test("serializes outputs", () => { const raw = builder.testOutputsRaw([baseOutput]); expect(raw).toBeInstanceOf(Uint8Array); expect(raw.length).toBeGreaterThan(0); }); }); //# sourceMappingURL=txbuilder.test.js.map