import { L2Provider } from "@eth-optimism/sdk/dist/interfaces/l2-provider";
import { PopulatedTransaction, providers } from "ethers";
import { RelayData } from "../../interfaces";
import { SpokePool } from "../../typechain";
import { BigNumberish, EvmAddress, TvmAddress, TransactionCostEstimate, BigNumber, Address } from "../../utils";
import { Logger, QueryInterface } from "../relayFeeCalculator";
import { GasPriceEstimateOptions } from "../../gasPriceOracle";
import { EvmProvider } from "../../arch/evm/types";
export type SymbolMappingType = Record<string, {
    addresses: Record<number, string>;
    decimals: number;
}>;
/**
 * A unified QueryBase for querying gas costs, token prices, and decimals of various tokens
 * on a blockchain.
 */
export declare class QueryBase implements QueryInterface {
    readonly provider: EvmProvider;
    readonly symbolMapping: SymbolMappingType;
    readonly spokePoolAddress: string;
    readonly simulatedRelayerAddress: EvmAddress;
    readonly logger: Logger;
    readonly coingeckoProApiKey?: string | undefined;
    readonly fixedGasPrice?: BigNumberish | undefined;
    readonly coingeckoBaseCurrency: string;
    readonly spokePool: SpokePool;
    /**
     * Instantiates a QueryBase instance
     * @param provider A valid Ethers.js provider
     * @param symbolMapping A mapping to valid ERC20 tokens and their respective characteristics
     * @param spokePoolAddress 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: EvmProvider, symbolMapping: SymbolMappingType, spokePoolAddress: string, simulatedRelayerAddress: EvmAddress, 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 relayerAddress 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<GasPriceEstimateOptions & {
        gasPrice: BigNumberish;
        gasUnits: BigNumberish;
        opStackL1GasCostMultiplier: BigNumber;
    }>): Promise<TransactionCostEstimate>;
    /**
     * @notice Return ethers.PopulatedTransaction for a fill based on input deposit args
     * @param relayData RelayData instance, supplemented with destinationChainId
     * @param relayer Sender of PopulatedTransaction
     * @returns PopulatedTransaction
     */
    getUnsignedTxFromDeposit(relayData: Omit<RelayData, "recipient" | "outputToken"> & {
        destinationChainId: number;
        recipient: EvmAddress | TvmAddress;
        outputToken: EvmAddress | TvmAddress;
    }, relayer?: Address): Promise<PopulatedTransaction>;
    /**
     * @notice Return the gas cost of a simulated transaction
     * @param relayData RelayData instance, supplemented with destinationChainId
     * @param relayer Sender of PopulatedTransaction
     * @returns Estimated gas cost based on ethers.VoidSigner's gas estimation
     */
    getNativeGasCost(relayData: RelayData & {
        destinationChainId: number;
    }, relayer?: Address): Promise<BigNumber>;
    /**
     * @notice Return the native token cost of filling a deposit beyond gas cost. We're not using msg.value in our fills,
     * so return zero for EVM side
     * @param deposit RelayData associated with Deposit we're estimating for
     * @returns Native token cost
     */
    getAuxiliaryNativeTokenCost(_deposit: RelayData): BigNumber;
    /**
     * @notice Return L1 data fee for OP stack L2 transaction, which is based on L2 calldata.
     * @dev https://docs.optimism.io/stack/transactions/fees#l1-data-fee
     * @param unsignedTx L2 transaction that you want L1 data fee for
     * @param relayer Sender of unsignedTx
     * @param options Specify gas units to avoid additional gas estimation call and multiplier for L1 data fee
     * @returns BigNumber L1 data fee in gas units
     */
    getOpStackL1DataFee(unsignedTx: PopulatedTransaction, relayer: Address | undefined, options: Partial<{
        opStackL2GasUnits: BigNumberish;
        opStackL1DataFeeMultiplier: BigNumber;
    }>): Promise<BigNumber>;
    /**
     * Estimates the total gas cost required to submit an unsigned (populated) transaction on-chain.
     * @param unsignedTx The unsigned transaction that this function will estimate.
     * @param senderAddress The address that the transaction will be submitted from.
     * @param provider A valid ethers provider - will be used to reason the gas price.
     * @param options
     * @param options.gasPrice A manually provided gas price - if set, this function will not resolve the current gas price.
     * @param options.gasUnits A manually provided gas units - if set, this function will not estimate the gas units.
     * @param options.transport A custom transport object for custom gas price retrieval.
     * @returns Estimated cost in units of gas and the underlying gas token (gasPrice * estimatedGasUnits).
     */
    estimateGas(unsignedTx: PopulatedTransaction, senderAddress: Address, provider: providers.Provider | L2Provider<providers.Provider>, options?: Partial<GasPriceEstimateOptions & {
        gasPrice: BigNumberish;
        gasUnits: BigNumberish;
        opStackL1GasCostMultiplier: BigNumber;
    }>): Promise<TransactionCostEstimate>;
    /**
     * 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>;
}
