import { P2TRPayment, Psbt, PsbtInput, Signer, TapScriptSig, Taptree } from '@btc-vision/bitcoin';
import { TransactionBuilder } from './TransactionBuilder.js';
import { TransactionType } from '../enums/TransactionType.js';
import { ITransactionParameters } from '../interfaces/ITransactionParameters.js';
import { ECPairInterface } from 'ecpair';
export interface MultiSignParameters extends Omit<ITransactionParameters, 'gasSatFee' | 'priorityFee' | 'signer'> {
    readonly pubkeys: Buffer[];
    readonly minimumSignatures: number;
    readonly from?: undefined;
    readonly to?: undefined;
    readonly psbt?: Psbt;
    readonly receiver: string;
    readonly requestedAmount: bigint;
    readonly refundVault: string;
}
export interface MultiSignFromBase64Params extends Omit<MultiSignParameters, 'psbt'> {
    readonly psbt: string;
}
export declare class MultiSignTransaction extends TransactionBuilder<TransactionType.MULTI_SIG> {
    static readonly LOCK_LEAF_SCRIPT: Buffer;
    static readonly signHashTypesArray: number[];
    static readonly numsPoint: Buffer<ArrayBuffer>;
    type: TransactionType.MULTI_SIG;
    protected targetScriptRedeem: P2TRPayment | null;
    protected leftOverFundsScriptRedeem: P2TRPayment | null;
    protected readonly compiledTargetScript: Buffer;
    protected readonly scriptTree: Taptree;
    protected readonly publicKeys: Buffer[];
    protected readonly minimumSignatures: number;
    protected readonly originalInputCount: number;
    protected readonly requestedAmount: bigint;
    protected readonly receiver: string;
    protected readonly refundVault: string;
    protected readonly sighashTypes: number[];
    constructor(parameters: MultiSignParameters);
    static fromBase64(params: MultiSignFromBase64Params): MultiSignTransaction;
    static verifyIfSigned(psbt: Psbt, signerPubKey: Buffer): boolean;
    static signPartial(psbt: Psbt, signer: Signer | ECPairInterface, originalInputCount: number, minimums: number[]): {
        final: boolean;
        signed: boolean;
    };
    static partialFinalizer: (inputIndex: number, input: PsbtInput, partialSignatures: Buffer[], orderedPubKeys: Buffer[], isFinal: boolean) => {
        finalScriptWitness: Buffer<ArrayBufferLike>;
    };
    static dedupeSignatures(original: TapScriptSig[], partial: TapScriptSig[]): TapScriptSig[];
    static attemptFinalizeInputs(psbt: Psbt, startIndex: number, orderedPubKeys: Buffer[][], isFinal: boolean): boolean;
    finalizeTransactionInputs(): boolean;
    signPSBT(): Promise<Psbt>;
    protected buildTransaction(): Promise<void>;
    protected internalBuildTransaction(transaction: Psbt, checkPartialSigs?: boolean): Promise<boolean>;
    protected signInputs(_transaction: Psbt): Promise<void>;
    protected generateScriptAddress(): P2TRPayment;
    protected generateTapData(): P2TRPayment;
    protected getScriptSolution(input: PsbtInput): Buffer[];
    protected getScriptTree(): Taptree;
    private getTotalOutputAmount;
    private calculateOutputLeftAmountFromVaults;
    private customFinalizer;
    private generateRedeemScripts;
}
