import { Address, Rpc, RpcTransport, SolanaRpcApiFromTransport } from "@solana/kit";
import winston from "winston";
import { SvmCpiEventsClient } from "../../arch/svm";
import { FillStatus, RelayDataWithMessageHash } from "../../interfaces";
import { BigNumber, DepositSearchResult, EventSearchConfig, MakeOptional } from "../../utils";
import { HubPoolClient } from "../HubPoolClient";
import { SpokePoolClient, SpokePoolUpdate } from "./SpokePoolClient";
/**
 * SvmSpokePoolClient is a client for the SVM SpokePool program. It extends the base SpokePoolClient
 * and implements the abstract methods required for interacting with an SVM Spoke Pool.
 */
export declare class SVMSpokePoolClient extends SpokePoolClient {
    svmEventsClient: SvmCpiEventsClient;
    protected programId: Address;
    protected statePda: Address;
    readonly type = "SVM";
    /**
     * Note: Strongly prefer to use the async create() method to instantiate.
     */
    constructor(logger: winston.Logger, hubPoolClient: HubPoolClient | null, chainId: number, deploymentSlot: bigint, // Using slot instead of block number for SVM
    eventSearchConfig: MakeOptional<EventSearchConfig, "to">, svmEventsClient: SvmCpiEventsClient, programId: Address, statePda: Address);
    /**
     * Factory method to asynchronously create an instance of SvmSpokePoolClient.
     */
    static create(logger: winston.Logger, hubPoolClient: HubPoolClient | null, chainId: number, deploymentSlot: bigint, eventSearchConfig: MakeOptional<EventSearchConfig, "to"> | undefined, // Provide default
    rpc: Rpc<SolanaRpcApiFromTransport<RpcTransport>>): Promise<SVMSpokePoolClient>;
    /**
     * Factory method to asynchronously create an instance of SvmSpokePoolClient with an existing event client.
     */
    static createWithExistingEventClient(logger: winston.Logger, hubPoolClient: HubPoolClient | null, chainId: number, deploymentSlot: bigint, eventSearchConfig: MakeOptional<EventSearchConfig, "to"> | undefined, // Provide default
    eventClient: SvmCpiEventsClient): Promise<SVMSpokePoolClient>;
    _queryableEventNames(): string[];
    /**
     * Performs an update to refresh the state of this client by querying SVM events.
     */
    protected _update(eventsToQuery: string[]): Promise<SpokePoolUpdate>;
    /**
     * Retrieves the fill deadline buffer fetched from the State PDA.
     * @note This function assumes that fill deadline buffer is a constant value in svm environments.
     */
    getMaxFillDeadlineInRange(_startSlot: number, _endSlot: number): Promise<number>;
    /**
     * Retrieves the timestamp for a given SVM slot number.
     */
    getTimestampForBlock(slot: number): Promise<number>;
    /**
     * Retrieves the timestamp for a given SVM slot number.
     * @note This function uses the same underlying function as getTimestampForBlock.
     *       It is kept for consistency with the EVM SpokePoolClient.
     */
    getTimeAt(slot: number): Promise<number>;
    /**
     * Finds a deposit based on its deposit ID on the SVM chain.
     */
    findDeposit(depositId: BigNumber): Promise<DepositSearchResult>;
    /**
     * Retrieves the fill status for a given relay data from the SVM chain.
     */
    relayFillStatus(relayData: RelayDataWithMessageHash, atHeight?: number): Promise<FillStatus>;
    /**
     * Retrieves the fill status for an array of given relay data.
     * @param relayData The array relay data to retrieve the fill status for.
     * @param atHeight The slot at which to query the fill status.
     * @returns The fill status for each of the given relay data.
     */
    fillStatusArray(relayData: RelayDataWithMessageHash[], atHeight?: number, destinationChainId?: number): Promise<(FillStatus | undefined)[]>;
}
