import { TransactionSigner } from "@solana/kit";
import { SVMProvider, SolanaTransaction } 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: import("@solana-program/compute-budget/dist/types/estimateComputeLimitInternal").EstimateComputeUnitLimitFactoryFunction;
    /**
     * 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 native token cost of filling a deposit beyond gas cost. If `value_amount` is specified in a message,
     * `value_amount` of SOL gets forwarded to the first Account. We account for that in Fill cost estimation
     * @param deposit RelayData associated with Deposit we're estimating for
     * @throws If deposit.message is malformed (unable to be deserialized into `AcrossPlusMessage`)
     * @returns Native token cost
     */
    getAuxiliaryNativeTokenCost(deposit: RelayData): 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<SolanaTransaction>;
    /**
     * 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;
    estimateComputeUnits(relayData: RelayData & {
        destinationChainId: number;
        recipient: SvmAddress;
        outputToken: SvmAddress;
        exclusiveRelayer: SvmAddress;
    }, relayer: SvmAddress, repaymentChainId: number, repaymentAddress: SvmAddress): Promise<bigint>;
}
//# sourceMappingURL=svmQuery.d.ts.map