import { TransactionType } from '../enums/TransactionType.js';
import type { IDeploymentParameters } from '../interfaces/ITransactionParameters.js';
import { Psbt } from '@btc-vision/bitcoin';
import { TransactionBuilder } from './TransactionBuilder.js';
import type { TapPayment } from '../shared/TweakedTransaction.js';
import type { TapLeafScript } from '../interfaces/Tap.js';
import { Address } from '../../keypair/Address.js';
import type { IChallengeSolution } from '../../epoch/interfaces/IChallengeSolution.js';
import type { IP2WSHAddress } from '../mineable/IP2WSHAddress.js';
export declare class DeploymentTransaction extends TransactionBuilder<TransactionType.DEPLOYMENT> {
    static readonly MAXIMUM_CONTRACT_SIZE: number;
    type: TransactionType.DEPLOYMENT;
    protected readonly challenge: IChallengeSolution;
    protected readonly epochChallenge: IP2WSHAddress;
    /**
     * The contract address
     * @protected
     */
    protected readonly _contractAddress: Address;
    /**
     * The tap leaf script
     * @private
     */
    protected tapLeafScript: TapLeafScript | null;
    private readonly deploymentVersion;
    /**
     * The target script redeem
     * @private
     */
    private targetScriptRedeem;
    /**
     * The left over funds script redeem
     * @private
     */
    private leftOverFundsScriptRedeem;
    /**
     * The compiled target script
     * @private
     */
    private readonly compiledTargetScript;
    /**
     * The script tree
     * @private
     */
    private readonly scriptTree;
    /**
     * The deployment bitcoin generator
     * @private
     */
    private deploymentGenerator;
    /**
     * The contract seed
     * @private
     */
    private readonly contractSeed;
    /**
     * The contract bytecode
     * @private
     */
    private readonly bytecode;
    /**
     * Constructor calldata
     * @private
     */
    private readonly calldata?;
    /**
     * The contract signer
     * @private
     */
    private readonly contractSigner;
    /**
     * The contract public key
     * @private
     */
    private readonly _contractPubKey;
    /**
     * The contract salt random bytes
     * @private
     */
    private readonly randomBytes;
    private _computedAddress;
    constructor(parameters: IDeploymentParameters);
    /**
     * Get the contract public key
     */
    get contractPubKey(): string;
    /**
     * @description Get the contract address (PKSH)
     */
    get contractAddress(): Address;
    /**
     * @description Get the P2TR address
     */
    get p2trAddress(): string;
    exportCompiledTargetScript(): Uint8Array;
    /**
     * Get the random bytes used for the interaction
     * @returns {Uint8Array} The random bytes
     */
    getRndBytes(): Uint8Array;
    /**
     * Get the contract bytecode
     * @returns {Uint8Array} The contract bytecode
     */
    getChallenge(): IChallengeSolution;
    getContractAddress(): string;
    /**
     * Get the contract signer public key
     * @protected
     */
    protected contractSignerXOnlyPubKey(): Uint8Array;
    /**
     * Build the transaction
     * @protected
     */
    protected buildTransaction(): Promise<void>;
    protected signInputsWalletBased(transaction: Psbt): Promise<void>;
    /**
     * Sign the inputs
     * @param {Psbt} transaction The transaction to sign
     * @protected
     */
    protected signInputs(transaction: Psbt): Promise<void>;
    /**
     * Get the tap output
     * @protected
     */
    protected generateScriptAddress(): TapPayment;
    /**
     * Generate the tap data
     * @protected
     */
    protected generateTapData(): TapPayment;
    private generateFeatures;
    private verifyCalldata;
    private verifyBytecode;
    /**
     * Generate the contract seed for the deployment
     * @private
     */
    private getContractSeed;
    /**
     * Finalize the transaction
     * @param _inputIndex
     * @param input
     */
    private customFinalizer;
    /**
     * Generate the redeem scripts
     * @private
     */
    private generateRedeemScripts;
    /**
     * Get the second leaf script
     * @private
     */
    private getLeafScript;
    /**
     * Get the script tree
     * @private
     */
    private getScriptTree;
}
//# sourceMappingURL=DeploymentTransaction.d.ts.map