import { WasmDashTransaction, WasmTransaction, WasmZcashTransaction, type TxInputData, type TxOutputData, type TxOutputDataWithAddress } from "./wasm/wasm_utxo.js";
import type { CoinName } from "./coinName.js";
/** Common read-only interface shared by transactions and PSBTs */
export interface ITransactionCommon<TInput, TOutput> {
    inputCount(): number;
    outputCount(): number;
    version(): number;
    lockTime(): number;
    getInputs(): TInput[];
    getOutputs(): TOutput[];
}
/** Common interface for all transaction types */
export interface ITransaction extends ITransactionCommon<TxInputData, TxOutputData> {
    toBytes(): Uint8Array;
    getId(): string;
    getOutputsWithAddress(coin: CoinName): TxOutputDataWithAddress[];
}
/**
 * Transaction wrapper (Bitcoin-like networks)
 *
 * Provides a camelCase, strongly-typed API over the snake_case WASM bindings.
 */
export declare class Transaction implements ITransaction {
    private _wasm;
    private constructor();
    /**
     * Create an empty transaction (version 1, locktime 0)
     */
    static create(): Transaction;
    static fromBytes(bytes: Uint8Array): Transaction;
    /** @internal Create from WASM instance directly (avoids re-parsing bytes) */
    static fromWasm(wasm: WasmTransaction): Transaction;
    /**
     * Add an input to the transaction
     * @param txid - Previous transaction ID (hex string)
     * @param vout - Output index being spent
     * @param sequence - Optional sequence number (default: 0xFFFFFFFF)
     * @returns The index of the newly added input
     */
    addInputAtIndex(index: number, txid: string, vout: number, sequence?: number): number;
    addInput(txid: string, vout: number, sequence?: number): number;
    addOutputAtIndex(index: number, script: Uint8Array, value: bigint): number;
    addOutput(script: Uint8Array, value: bigint): number;
    toBytes(): Uint8Array;
    /**
     * Get the transaction ID (txid)
     *
     * The txid is the double SHA256 of the transaction bytes (excluding witness
     * data for segwit transactions), displayed in reverse byte order as is standard.
     *
     * @returns The transaction ID as a hex string
     */
    getId(): string;
    /**
     * Get the virtual size of the transaction
     *
     * Virtual size accounts for the segwit discount on witness data.
     *
     * @returns The virtual size in virtual bytes (vbytes)
     */
    getVSize(): number;
    inputCount(): number;
    outputCount(): number;
    version(): number;
    lockTime(): number;
    getInputs(): TxInputData[];
    getOutputs(): TxOutputData[];
    getOutputsWithAddress(coin: CoinName): TxOutputDataWithAddress[];
    /** @internal */
    get wasm(): WasmTransaction;
}
/**
 * Zcash Transaction wrapper
 *
 * Provides a camelCase, strongly-typed API over the snake_case WASM bindings.
 */
export declare class ZcashTransaction implements ITransaction {
    private _wasm;
    private constructor();
    static fromBytes(bytes: Uint8Array): ZcashTransaction;
    /** @internal Create from WASM instance directly (avoids re-parsing bytes) */
    static fromWasm(wasm: WasmZcashTransaction): ZcashTransaction;
    toBytes(): Uint8Array;
    /**
     * Get the transaction ID (txid)
     *
     * The txid is the double SHA256 of the full Zcash transaction bytes,
     * displayed in reverse byte order as is standard.
     *
     * @returns The transaction ID as a hex string
     */
    getId(): string;
    inputCount(): number;
    outputCount(): number;
    version(): number;
    lockTime(): number;
    getInputs(): TxInputData[];
    getOutputs(): TxOutputData[];
    getOutputsWithAddress(coin: CoinName): TxOutputDataWithAddress[];
    /** @internal */
    get wasm(): WasmZcashTransaction;
}
/**
 * Dash Transaction wrapper (supports EVO special transactions)
 *
 * Round-trip only: bytes -> parse -> bytes.
 */
export declare class DashTransaction implements ITransaction {
    private _wasm;
    private constructor();
    static fromBytes(bytes: Uint8Array): DashTransaction;
    /** @internal Create from WASM instance directly (avoids re-parsing bytes) */
    static fromWasm(wasm: WasmDashTransaction): DashTransaction;
    toBytes(): Uint8Array;
    /**
     * Get the transaction ID (txid)
     *
     * The txid is the double SHA256 of the full Dash transaction bytes,
     * displayed in reverse byte order as is standard.
     *
     * @returns The transaction ID as a hex string
     */
    getId(): string;
    inputCount(): number;
    outputCount(): number;
    version(): number;
    lockTime(): number;
    getInputs(): TxInputData[];
    getOutputs(): TxOutputData[];
    getOutputsWithAddress(coin: CoinName): TxOutputDataWithAddress[];
    /** @internal */
    get wasm(): WasmDashTransaction;
}
