import type { Chain, Network } from "@wormhole-foundation/sdk-base";
import type { Attestation, AttestationId, AutomaticCircleBridge, ChainContext, CircleTransferDetails, Signer, TransactionId, TxHash, WormholeMessageId } from "@wormhole-foundation/sdk-definitions";
import type { AttestationReceipt as _AttestationReceipt, TransferQuote, TransferReceipt as _TransferReceipt } from "../../types.js";
import { TransferState } from "../../types.js";
import { Wormhole } from "../../wormhole.js";
import type { WormholeTransfer } from "../wormholeTransfer.js";
export declare class CircleTransfer<N extends Network = Network> implements WormholeTransfer<CircleTransfer.Protocol> {
    private readonly wh;
    fromChain: ChainContext<N, Chain>;
    toChain: ChainContext<N, Chain>;
    private _state;
    transfer: CircleTransferDetails;
    txids: TransactionId[];
    attestations?: CircleTransfer.AttestationReceipt[];
    private constructor();
    getTransferState(): TransferState;
    static from<N extends Network>(wh: Wormhole<N>, from: CircleTransferDetails, timeout?: number, fromChain?: ChainContext<N, Chain>, toChain?: ChainContext<N, Chain>): Promise<CircleTransfer<N>>;
    static from<N extends Network>(wh: Wormhole<N>, from: WormholeMessageId, timeout?: number, fromChain?: ChainContext<N, Chain>, toChain?: ChainContext<N, Chain>): Promise<CircleTransfer<N>>;
    static from<N extends Network>(wh: Wormhole<N>, from: string, // CircleMessage hex encoded
    timeout?: number, fromChain?: ChainContext<N, Chain>, toChain?: ChainContext<N, Chain>): Promise<CircleTransfer<N>>;
    static from<N extends Network>(wh: Wormhole<N>, from: TransactionId, timeout?: number, fromChain?: ChainContext<N, Chain>, toChain?: ChainContext<N, Chain>): Promise<CircleTransfer<N>>;
    private static fromWormholeMessageId;
    private static fromCircleMessage;
    private static fromTransaction;
    initiateTransfer(signer: Signer): Promise<TxHash[]>;
    private _fetchWormholeAttestation;
    private _fetchCircleAttestation;
    fetchAttestation(timeout?: number): Promise<AttestationId[]>;
    completeTransfer(signer: Signer): Promise<TxHash[]>;
}
export declare namespace CircleTransfer {
    type Protocol = "CircleBridge" | "AutomaticCircleBridge";
    type AttestationReceipt = _AttestationReceipt<CircleTransfer.Protocol>;
    type CircleAttestationReceipt = _AttestationReceipt<"CircleBridge">;
    type AutomaticCircleAttestationReceipt = _AttestationReceipt<"AutomaticCircleBridge">;
    type TransferReceipt<SC extends Chain = Chain, DC extends Chain = Chain> = _TransferReceipt<CircleTransfer.AttestationReceipt, SC, DC>;
    function transfer<N extends Network, C extends Chain = Chain>(fromChain: ChainContext<N, C>, transfer: CircleTransferDetails, signer: Signer<N, Chain>): Promise<TransactionId[]>;
    function track<N extends Network, SC extends Chain, DC extends Chain>(wh: Wormhole<N>, receipt: CircleTransfer.TransferReceipt<SC, DC>, timeout?: number, _fromChain?: ChainContext<N, SC>, _toChain?: ChainContext<N, DC>): AsyncGenerator<CircleTransfer.TransferReceipt<SC, DC>>;
    function destinationOverrides<N extends Network>(srcChain: ChainContext<N, Chain>, dstChain: ChainContext<N, Chain>, transfer: CircleTransferDetails): Promise<CircleTransferDetails>;
    function quoteTransfer<N extends Network>(srcChain: ChainContext<N, Chain>, dstChain: ChainContext<N, Chain>, transfer: Omit<CircleTransferDetails, "from" | "to">): Promise<TransferQuote>;
    function isTransferComplete<N extends Network>(toChain: ChainContext<N, Chain>, attestation: Attestation<CircleTransfer.Protocol>): Promise<boolean>;
    function getTransferVaa<N extends Network>(wh: Wormhole<N>, wormholeMessageId: WormholeMessageId, timeout?: number): Promise<AutomaticCircleBridge.VAA>;
    function getTransferMessage<N extends Network>(fromChain: ChainContext<N, Chain>, txid: TxHash): Promise<import("@wormhole-foundation/sdk-definitions").CircleTransferMessage>;
    function getReceipt<N extends Network>(xfer: CircleTransfer<N>): CircleTransfer.TransferReceipt;
}
//# sourceMappingURL=cctpTransfer.d.ts.map