bitcoin-tx-lib
Version:
A Typescript library for building and signing Bitcoin transactions
69 lines (68 loc) • 2.89 kB
TypeScript
import { ECPairKey } from "../ecpairkey";
import { InputTransaction, OutputTransaction } from "../types";
export type BuildFormat = "raw" | "txid";
export interface SigParams {
inputs: InputTransaction[];
outputs: OutputTransaction[];
pairkey: ECPairKey;
locktime: number;
version: number;
}
/**
* Base class for building and signing Bitcoin transactions (both Legacy and SegWit).
*/
export declare abstract class TransactionBuilder {
/**
* Determines if any input is a SegWit (P2WPKH or P2WSH) input.
* @param inputs List of transaction inputs.
* @returns True if at least one input is SegWit.
*/
isSegwit(inputs: InputTransaction[]): boolean;
/**
* Checks if a specific input is a SegWit input (P2WPKH or P2WSH).
* @param input The input to check.
* @returns True if input is SegWit.
*/
isSegwitInput(input: InputTransaction): boolean;
/**
* Builds and signs the entire transaction.
* @param params Signing parameters including inputs, outputs, key, version and locktime.
* @param format Whether to generate a "raw" or "txid" version.
* @returns Raw transaction bytes.
*/
protected buildAndSign(params: SigParams, format?: BuildFormat): Uint8Array;
/**
* Generates the `scriptSig` for a legacy (non-SegWit) P2PKH input.
* @param input The input to sign.
* @param params All transaction signing context.
* @returns The generated `scriptSig` as a byte array.
*/
protected generateScriptSig(input: InputTransaction, { inputs, outputs, pairkey, locktime, version }: SigParams): Uint8Array;
/**
* Generates the witness data for a SegWit input (P2WPKH).
* @param input The input to sign.
* @param params All transaction signing context.
* @returns The witness field as a byte array.
*/
protected generateWitness(input: InputTransaction, { inputs, outputs, pairkey, locktime, version }: SigParams): Uint8Array;
/**
* Serializes transaction outputs into their raw binary format.
* @param outputs List of transaction outputs.
* @returns Byte array of all outputs serialized.
*/
protected outputsRaw(outputs: OutputTransaction[]): Uint8Array;
/**
* Validates a transaction input.
* Throws if txid is invalid, scriptPubKey is missing, or the txid is duplicated.
* @param input The input to validate.
* @param inputs The current list of inputs.
*/
protected validateInput(input: InputTransaction, inputs: InputTransaction[]): void;
/**
* Validates a transaction output.
* Throws if amount is non-positive, address is invalid, or address is duplicated.
* @param output The output to validate.
* @param outputs The current list of outputs.
*/
protected validateOutput(output: OutputTransaction, outputs: OutputTransaction[]): void;
}