import { TxTree } from "../tree/vtxoTree";
import { Outpoint, VirtualCoin } from "../wallet";
import { TreeNonces, TreePartialSigs } from "../tree/signingSession";
export interface ArkEvent {
    type: "vtxo_created" | "vtxo_spent" | "vtxo_swept" | "vtxo_expired";
    data: {
        txid?: string;
        address?: string;
        amount?: number;
        roundTxid?: string;
        expireAt?: number;
    };
}
export type NoteInput = string;
export type VtxoInput = {
    outpoint: Outpoint;
    tapscripts: string[];
};
export type Input = NoteInput | VtxoInput;
export type Output = {
    address: string;
    amount: bigint;
};
export declare enum SettlementEventType {
    Finalization = "finalization",
    Finalized = "finalized",
    Failed = "failed",
    SigningStart = "signing_start",
    SigningNoncesGenerated = "signing_nonces_generated"
}
export type FinalizationEvent = {
    type: SettlementEventType.Finalization;
    id: string;
    roundTx: string;
    vtxoTree: TxTree;
    connectors: TxTree;
    minRelayFeeRate: bigint;
    connectorsIndex: Map<string, Outpoint>;
};
export type FinalizedEvent = {
    type: SettlementEventType.Finalized;
    id: string;
    roundTxid: string;
};
export type FailedEvent = {
    type: SettlementEventType.Failed;
    id: string;
    reason: string;
};
export type SigningStartEvent = {
    type: SettlementEventType.SigningStart;
    id: string;
    cosignersPublicKeys: string[];
    unsignedVtxoTree: TxTree;
    unsignedSettlementTx: string;
};
export type SigningNoncesGeneratedEvent = {
    type: SettlementEventType.SigningNoncesGenerated;
    id: string;
    treeNonces: TreeNonces;
};
export type SettlementEvent = FinalizationEvent | FinalizedEvent | FailedEvent | SigningStartEvent | SigningNoncesGeneratedEvent;
export interface ArkInfo {
    pubkey: string;
    batchExpiry: bigint;
    unilateralExitDelay: bigint;
    roundInterval: bigint;
    network: string;
    dust: bigint;
    boardingDescriptorTemplate: string;
    vtxoDescriptorTemplates: string[];
    forfeitAddress: string;
    marketHour?: {
        start: number;
        end: number;
    };
}
export interface ArkProvider {
    getInfo(): Promise<ArkInfo>;
    getVirtualCoins(address: string): Promise<{
        spendableVtxos: VirtualCoin[];
        spentVtxos: VirtualCoin[];
    }>;
    submitVirtualTx(psbtBase64: string): Promise<string>;
    subscribeToEvents(callback: (event: ArkEvent) => void): Promise<() => void>;
    registerInputsForNextRound(inputs: Input[]): Promise<{
        requestId: string;
    }>;
    registerOutputsForNextRound(requestId: string, outputs: Output[], vtxoTreeSigningPublicKeys: string[], signAll?: boolean): Promise<void>;
    submitTreeNonces(settlementID: string, pubkey: string, nonces: TreeNonces): Promise<void>;
    submitTreeSignatures(settlementID: string, pubkey: string, signatures: TreePartialSigs): Promise<void>;
    submitSignedForfeitTxs(signedForfeitTxs: string[], signedRoundTx?: string): Promise<void>;
    ping(paymentID: string): Promise<void>;
    getEventStream(signal: AbortSignal): AsyncIterableIterator<SettlementEvent>;
    subscribeForAddress(address: string, abortSignal: AbortSignal): AsyncIterableIterator<{
        newVtxos: VirtualCoin[];
        spentVtxos: VirtualCoin[];
    }>;
}
export declare class RestArkProvider implements ArkProvider {
    serverUrl: string;
    constructor(serverUrl: string);
    getInfo(): Promise<ArkInfo>;
    getVirtualCoins(address: string): Promise<{
        spendableVtxos: VirtualCoin[];
        spentVtxos: VirtualCoin[];
    }>;
    submitVirtualTx(psbtBase64: string): Promise<string>;
    subscribeToEvents(callback: (event: ArkEvent) => void): Promise<() => void>;
    registerInputsForNextRound(inputs: Input[]): Promise<{
        requestId: string;
    }>;
    registerOutputsForNextRound(requestId: string, outputs: Output[], cosignersPublicKeys: string[], signingAll?: boolean): Promise<void>;
    submitTreeNonces(settlementID: string, pubkey: string, nonces: TreeNonces): Promise<void>;
    submitTreeSignatures(settlementID: string, pubkey: string, signatures: TreePartialSigs): Promise<void>;
    submitSignedForfeitTxs(signedForfeitTxs: string[], signedRoundTx?: string): Promise<void>;
    ping(requestId: string): Promise<void>;
    getEventStream(signal: AbortSignal): AsyncIterableIterator<SettlementEvent>;
    subscribeForAddress(address: string, abortSignal: AbortSignal): AsyncIterableIterator<{
        newVtxos: VirtualCoin[];
        spentVtxos: VirtualCoin[];
    }>;
    private toConnectorsIndex;
    private toTxTree;
    private parseSettlementEvent;
}
