import { TransactionSigner } from "@solana/kit";
import { SVMProvider } from "../../arch/svm";
import { RelayData } from "../../interfaces";
import { Address, BigNumber, BigNumberish, SvmAddress, TransactionCostEstimate } from "../../utils";
import { Logger, QueryInterface } from "../relayFeeCalculator";
import { SymbolMappingType } from "./";
/**
 * A special QueryBase implementation for SVM used for querying gas costs, token prices, and decimals of various tokens
 * on Solana.
 */
export declare class SvmQuery implements QueryInterface {
    readonly provider: SVMProvider;
    readonly symbolMapping: SymbolMappingType;
    readonly spokePool: SvmAddress;
    readonly simulatedRelayerAddress: SvmAddress;
    readonly logger: Logger;
    readonly coingeckoProApiKey?: string | undefined;
    readonly fixedGasPrice?: BigNumberish | undefined;
    readonly coingeckoBaseCurrency: string;
    protected computeUnitEstimator: (transactionMessage: import("@solana/kit").CompilableTransactionMessage | (import("@solana/kit").ITransactionMessageWithFeePayer<string> & import("@solana/kit").TransactionMessage), config?: Omit<Readonly<{
        abortSignal?: AbortSignal | undefined;
        commitment?: import("@solana/kit").Commitment | undefined;
        minContextSlot?: bigint | undefined;
        rpc: import("@solana/kit").Rpc<import("@solana/kit").SimulateTransactionApi>;
        transactionMessage: import("@solana/kit").CompilableTransactionMessage | (import("@solana/kit").ITransactionMessageWithFeePayer<string> & import("@solana/kit").TransactionMessage);
    }>, "rpc" | "transactionMessage"> | undefined) => Promise<number>;
    /**
     * Instantiates a SvmQuery instance
     * @param provider A valid solana/kit rpc client.
     * @param symbolMapping A mapping to valid ERC20 tokens and their respective characteristics
     * @param spokePool The valid address of the Spoke Pool deployment
     * @param simulatedRelayerAddress The address that these queries will reference as the sender. Note: This address must be approved for USDC
     * @param logger A logging utility to report logs
     * @param coingeckoProApiKey An optional CoinGecko API key that links to a PRO account
     * @param fixedGasPrice Overrides the gas price with a fixed value. Note: primarily used for the Boba blockchain
     * @param coingeckoBaseCurrency The basis currency that CoinGecko will use to resolve pricing
     */
    constructor(provider: SVMProvider, symbolMapping: SymbolMappingType, spokePool: SvmAddress, simulatedRelayerAddress: SvmAddress, logger: Logger, coingeckoProApiKey?: string | undefined, fixedGasPrice?: BigNumberish | undefined, coingeckoBaseCurrency?: string);
    /**
     * Retrieves the current gas costs of performing a fillRelay contract at the referenced SpokePool.
     * @param relayData RelayData instance, supplemented with destinationChainId
     * @param _relayer Relayer address to simulate with.
     * @param options
     * @param options.gasPrice Optional gas price to use for the simulation.
     * @param options.gasUnits Optional gas units to use for the simulation.
     * @param options.transport Optional transport object for custom gas price retrieval.
     * @returns The gas estimate for this function call (multiplied with the optional buffer).
     */
    getGasCosts(relayData: RelayData & {
        destinationChainId: number;
    }, relayer?: Address, options?: Partial<{
        gasPrice: BigNumberish;
        gasUnits: BigNumberish;
        baseFeeMultiplier: BigNumber;
        priorityFeeMultiplier: BigNumber;
    }>): Promise<TransactionCostEstimate>;
    /**
     * @notice Return the gas cost of a simulated transaction
     * @param fillRelayTx FillRelay transaction
     * @param relayer SVM address of the relayer
     * @returns Estimated gas cost in compute units
     */
    getNativeGasCost(deposit: RelayData & {
        destinationChainId: number;
    }, relayer?: Address): Promise<BigNumber>;
    /**
     * @notice Return the fillRelay transaction for a given deposit
     * @param relayData RelayData instance, supplemented with destinationChainId
     * @param relayer SVM address of the relayer
     * @returns FillRelay transaction
     */
    protected getFillRelayTx(relayData: Omit<RelayData, "recipient" | "outputToken"> & {
        destinationChainId: number;
        recipient: SvmAddress;
        outputToken: SvmAddress;
    }, signer: TransactionSigner, repaymentChainId: number, repaymentAddress: Address): Promise<import("@solana/kit").TransactionMessageWithBlockhashLifetime & import("@solana/kit").ITransactionMessageWithFeePayerSigner<string, TransactionSigner<string>> & Omit<Readonly<{
        instructions: readonly import("@solana/kit").IInstruction<string, readonly (import("@solana/kit").IAccountMeta<string> | import("@solana/kit").IAccountLookupMeta<string, string>)[]>[];
        version: 0;
    }>, "feePayer">>;
    /**
     * Retrieves the current price of a token
     * @param tokenSymbol A valid [CoinGecko-ID](https://api.coingecko.com/api/v3/coins/list)
     * @returns The resolved token price within the specified coingeckoBaseCurrency
     */
    getTokenPrice(tokenSymbol: string): Promise<number>;
    /**
     * Resolves the number of decimal places a token can have
     * @param tokenSymbol A valid Across-Enabled Token ID
     * @returns The number of decimals of precision for the corresponding tokenSymbol
     */
    getTokenDecimals(tokenSymbol: string): number;
}
//# sourceMappingURL=svmQuery.d.ts.map