import { WasmDashTransaction, WasmTransaction, WasmZcashTransaction } from "./wasm/wasm_utxo.js";
import type { TxInputData, TxOutputData, TxOutputDataWithAddress } from "./wasm/wasm_utxo.js";
import type { CoinName } from "./coinName.js";
import { TransactionBase } from "./transactionBase.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 extends TransactionBase<WasmTransaction> {
    private constructor();
    /**
     * Check if a coin is supported by this transaction class.
     * Bitcoin-like transactions support all coins except Zcash and Dash.
     */
    static supportsCoin(coin: CoinName): boolean;
    /**
     * Create an empty transaction (version 1, locktime 0)
     */
    static create(): Transaction;
    static fromBytes(bytes: Uint8Array): Transaction;
    static fromBytes(bytes: Uint8Array, coin: "zec" | "tzec"): ZcashTransaction;
    static fromBytes(bytes: Uint8Array, coin: "dash" | "tdash"): DashTransaction;
    static fromBytes(bytes: Uint8Array, coin: CoinName): Transaction | ZcashTransaction | DashTransaction;
    /** @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;
    /**
     * 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;
    /** @internal */
    get wasm(): WasmTransaction;
}
/**
 * Zcash Transaction wrapper
 *
 * Provides a camelCase, strongly-typed API over the snake_case WASM bindings.
 */
export declare class ZcashTransaction extends TransactionBase<WasmZcashTransaction> {
    private constructor();
    /**
     * Check if a coin is supported by this transaction class.
     * Zcash transactions support Zcash mainnet and testnet.
     */
    static supportsCoin(coin: CoinName): boolean;
    static fromBytes(bytes: Uint8Array): ZcashTransaction;
    /** @internal Create from WASM instance directly (avoids re-parsing bytes) */
    static fromWasm(wasm: WasmZcashTransaction): ZcashTransaction;
    /** @internal */
    get wasm(): WasmZcashTransaction;
}
/**
 * Dash Transaction wrapper (supports EVO special transactions)
 *
 * Round-trip only: bytes -> parse -> bytes.
 */
export declare class DashTransaction extends TransactionBase<WasmDashTransaction> {
    private constructor();
    /**
     * Check if a coin is supported by this transaction class.
     * Dash transactions support Dash mainnet and testnet.
     */
    static supportsCoin(coin: CoinName): boolean;
    static fromBytes(bytes: Uint8Array): DashTransaction;
    /** @internal Create from WASM instance directly (avoids re-parsing bytes) */
    static fromWasm(wasm: WasmDashTransaction): DashTransaction;
    /** @internal */
    get wasm(): WasmDashTransaction;
}
