import { Transaction } from '../../node_modules/@btc-vision/bitcoin/browser/index.js';
import { UTXO } from '../utxo/interfaces/IUTXO.js';
import { FundingTransaction } from './builders/FundingTransaction.js';
import { TransactionBuilder } from './builders/TransactionBuilder.js';
import { TransactionType } from './enums/TransactionType.js';
import { IDeploymentParameters, IFundingTransactionParameters, IInteractionParameters } from './interfaces/ITransactionParameters.js';
import { ICancelTransactionParametersWithoutSigner, ICustomTransactionWithoutSigner, IFundingTransactionParametersWithoutSigner, InteractionParametersWithoutSigner } from './interfaces/IWeb3ProviderTypes.js';
import { RawChallenge } from '../epoch/interfaces/IChallengeSolution.js';
import { IConsolidatedInteractionParameters } from './interfaces/IConsolidatedTransactionParameters.js';
import { BitcoinTransferBase, CancelledTransaction, DeploymentResult, InteractionResponse } from './interfaces/ITransactionResponses.js';
import { ICancelTransactionParameters } from './interfaces/ICancelTransactionParameters.js';
import { ICustomTransactionParameters } from './interfaces/ICustomTransactionParameters.js';
export interface FundingTransactionResponse {
    readonly tx: Transaction;
    readonly original: FundingTransaction;
    readonly estimatedFees: bigint;
    readonly nextUTXOs: UTXO[];
    readonly inputUtxos: UTXO[];
}
export type { BitcoinTransferBase } from './interfaces/ITransactionResponses.js';
export interface BitcoinTransferResponse extends BitcoinTransferBase {
    readonly original: FundingTransaction;
}
/**
 * Response from signConsolidatedInteraction.
 * Contains both setup and reveal transactions for the CHCT system.
 */
export interface ConsolidatedInteractionResponse {
    /** Setup transaction hex - creates P2WSH commitment outputs */
    readonly setupTransaction: string;
    /** Reveal transaction hex - spends commitments, reveals data in witnesses */
    readonly revealTransaction: string;
    /** Setup transaction ID */
    readonly setupTxId: string;
    /** Reveal transaction ID */
    readonly revealTxId: string;
    /** Total fees across both transactions in satoshis */
    readonly totalFees: bigint;
    /** Number of data chunks */
    readonly chunkCount: number;
    /** Total compiled data size in bytes */
    readonly dataSize: number;
    /** Challenge for the interaction */
    readonly challenge: RawChallenge;
    /** Input UTXOs used */
    readonly inputUtxos: UTXO[];
    /** Compiled target script (same as InteractionTransaction) */
    readonly compiledTargetScript: string;
}
export declare class TransactionFactory {
    debug: boolean;
    private readonly DUMMY_PUBKEY;
    private readonly P2TR_SCRIPT;
    private readonly INITIAL_FUNDING_ESTIMATE;
    private readonly MAX_ITERATIONS;
    /**
     * @description Creates a cancellable transaction.
     * @param {ICancelTransactionParameters | ICancelTransactionParametersWithoutSigner} params - The cancel transaction parameters
     * @returns {Promise<CancelledTransaction>} - The cancelled transaction result
     */
    createCancellableTransaction(params: ICancelTransactionParameters | ICancelTransactionParametersWithoutSigner): Promise<CancelledTransaction>;
    /**
     * @description Generate a transaction with a custom script.
     * @param {ICustomTransactionParameters | ICustomTransactionWithoutSigner} interactionParameters - The custom transaction parameters
     * @returns {Promise<[string, string, UTXO[], UTXO[]]>} - The signed transaction tuple [fundingTx, customTx, nextUTXOs, inputUtxos]
     */
    createCustomScriptTransaction(interactionParameters: ICustomTransactionParameters | ICustomTransactionWithoutSigner): Promise<[string, string, UTXO[], UTXO[]]>;
    /**
     * @description Generates the required transactions.
     * @param {IInteractionParameters | InteractionParametersWithoutSigner} interactionParameters - The interaction parameters
     * @returns {Promise<InteractionResponse>} - The signed transaction
     */
    signInteraction(interactionParameters: IInteractionParameters | InteractionParametersWithoutSigner): Promise<InteractionResponse>;
    /**
     * @description Generates a consolidated interaction transaction (CHCT system).
     *
     * Drop-in replacement for signInteraction that bypasses BIP110/Bitcoin Knots censorship.
     * Uses P2WSH with HASH160 commitments instead of Tapscript (which uses OP_IF and gets censored).
     *
     * Returns two transactions:
     * - Setup: Creates P2WSH outputs with hash commitments to data chunks
     * - Reveal: Spends those outputs, revealing data in witnesses
     *
     * Data integrity is consensus-enforced - if data is stripped/modified,
     * HASH160(data) != committed_hash and the transaction is INVALID.
     *
     * @param {IConsolidatedInteractionParameters} interactionParameters - Same parameters as signInteraction
     * @returns {Promise<ConsolidatedInteractionResponse>} - Both setup and reveal transactions
     */
    signConsolidatedInteraction(interactionParameters: IConsolidatedInteractionParameters): Promise<ConsolidatedInteractionResponse>;
    /**
     * @description Generates the required transactions.
     * @param {IDeploymentParameters} deploymentParameters - The deployment parameters
     * @returns {Promise<DeploymentResult>} - The signed transaction
     */
    signDeployment(deploymentParameters: IDeploymentParameters): Promise<DeploymentResult>;
    /**
     * @description Creates a funding transaction.
     * @param {IFundingTransactionParameters} parameters - The funding transaction parameters
     * @returns {Promise<BitcoinTransferBase>} - The signed transaction
     */
    createBTCTransfer(parameters: IFundingTransactionParameters | IFundingTransactionParametersWithoutSigner): Promise<BitcoinTransferBase>;
    /**
     * Get all new UTXOs of a generated transaction.
     * @param {TransactionBuilder<TransactionType>} original - The original transaction
     * @param {Transaction} tx - The transaction
     * @param {string} to - The address to filter
     * @returns {UTXO[]} - The new UTXOs belonging to the specified address
     */
    getAllNewUTXOs(original: TransactionBuilder<TransactionType>, tx: Transaction, to: string): UTXO[];
    /**
     * Parse optional inputs and normalize nonWitnessUtxo format.
     * @param {UTXO[]} optionalInputs - The optional inputs to parse
     * @returns {UTXO[]} - The parsed inputs with normalized nonWitnessUtxo
     */
    private parseOptionalInputs;
    /**
     * Detect and use OP_WALLET for funding transactions if available.
     *
     * @param {IFundingTransactionParameters | IFundingTransactionParametersWithoutSigner} fundingParams - The funding transaction parameters
     * @return {Promise<BitcoinTransferBase | null>} - The funding transaction response or null if OP_WALLET not available
     */
    private detectFundingOPWallet;
    /**
     * Detect and use OP_WALLET for cancel transactions if available.
     * @param {ICancelTransactionParameters | ICancelTransactionParametersWithoutSigner} interactionParameters - The cancel parameters
     * @returns {Promise<CancelledTransaction | null>} - The cancelled transaction or null if OP_WALLET not available
     */
    private detectCancelOPWallet;
    /**
     * Detect and use OP_WALLET for interaction transactions if available.
     * @param {IInteractionParameters | InteractionParametersWithoutSigner} interactionParameters - The interaction parameters
     * @returns {Promise<InteractionResponse | null>} - The interaction response or null if OP_WALLET not available
     */
    private detectInteractionOPWallet;
    /**
     * Detect and use OP_WALLET for deployment transactions if available.
     * @param {IDeploymentParameters | IDeploymentParametersWithoutSigner} deploymentParameters - The deployment parameters
     * @returns {Promise<DeploymentResult | null>} - The deployment result or null if OP_WALLET not available
     */
    private detectDeploymentOPWallet;
    /**
     * Create and sign a funding transaction.
     * @param {IFundingTransactionParameters} parameters - The funding transaction parameters
     * @returns {Promise<FundingTransactionResponse>} - The funding transaction response
     */
    private createFundTransaction;
    /**
     * Check if the UTXOs contain any P2WDA inputs
     *
     * This method examines both main UTXOs and optional inputs to determine
     * if any of them are P2WDA addresses. P2WDA detection is based on the
     * witness script pattern: (OP_2DROP * 5) <pubkey> OP_CHECKSIG
     *
     * @param {UTXO[]} utxos - The main UTXOs to check
     * @returns {boolean} - true if any UTXO is P2WDA, false otherwise
     */
    private hasP2WDAInputs;
    /**
     * Sign a P2WDA interaction transaction
     *
     * P2WDA interactions are fundamentally different from standard OP_NET interactions.
     * Instead of using a two-transaction model (funding + interaction), P2WDA embeds
     * the operation data directly in the witness field of a single transaction.
     * This achieves significant cost savings through the witness discount.
     *
     * Key differences:
     * - Single transaction instead of two
     * - Operation data in witness field instead of taproot script
     * - 75% cost reduction for data storage
     * - No separate funding transaction needed
     *
     * @param {IInteractionParameters | InteractionParametersWithoutSigner} interactionParameters - The interaction parameters
     * @returns {Promise<InteractionResponse>} - The signed P2WDA interaction response
     */
    private signP2WDAInteraction;
    /**
     * Get the priority fee from transaction parameters.
     * @param {ITransactionParameters} params - The transaction parameters
     * @returns {bigint} - The priority fee, minimum dust if below threshold
     */
    private getPriorityFee;
    /**
     * Common iteration logic for finding the correct funding amount.
     *
     * This method iteratively estimates the required funding amount by simulating
     * transactions until the amount converges or max iterations is reached.
     *
     * @param {P extends IInteractionParameters | IDeploymentParameters | ICustomTransactionParameters} params - The transaction parameters
     * @param {new (params: P) => T} TransactionClass - The transaction class constructor
     * @param {(tx: T extends InteractionTransaction | DeploymentTransaction | CustomScriptTransaction) => Promise<bigint>} calculateAmount - Function to calculate required amount
     * @param {string} debugPrefix - Prefix for debug logging
     * @returns {Promise<{finalTransaction: T extends InteractionTransaction | DeploymentTransaction | CustomScriptTransaction, estimatedAmount: bigint, challenge: IChallengeSolution | null}>} - The final transaction and estimated amount
     */
    private iterateFundingAmount;
    /**
     * Convert a transaction output to a UTXO.
     * @param {Transaction} tx - The transaction
     * @param {string} to - The address
     * @param {number} index - The output index
     * @returns {UTXO[]} - The UTXO array (empty if output doesn't exist)
     */
    private getUTXOAsTransaction;
}
//# sourceMappingURL=TransactionFactory.d.ts.map