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, TransactionCostEstimate, BigNumber, Address } from "../../utils";
import { Logger, QueryInterface } from "../relayFeeCalculator";
import { Transport } from "viem";
import { EvmProvider } from "../../arch/evm/types";
export type SymbolMappingType = Record<string, {
    addresses: Record<number, string>;
    decimals: number;
}>;
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;
    constructor(provider: EvmProvider, symbolMapping: SymbolMappingType, spokePoolAddress: string, simulatedRelayerAddress: EvmAddress, logger: Logger, coingeckoProApiKey?: string | undefined, fixedGasPrice?: BigNumberish | undefined, coingeckoBaseCurrency?: string);
    getGasCosts(relayData: RelayData & {
        destinationChainId: number;
    }, relayer?: Address, options?: Partial<{
        gasPrice: BigNumberish;
        gasUnits: BigNumberish;
        baseFeeMultiplier: BigNumber;
        priorityFeeMultiplier: BigNumber;
        opStackL1GasCostMultiplier: BigNumber;
        transport: Transport;
    }>): Promise<TransactionCostEstimate>;
    getUnsignedTxFromDeposit(relayData: Omit<RelayData, "recipient" | "outputToken"> & {
        destinationChainId: number;
        recipient: EvmAddress;
        outputToken: EvmAddress;
    }, relayer?: Address): Promise<PopulatedTransaction>;
    getNativeGasCost(relayData: RelayData & {
        destinationChainId: number;
    }, relayer?: Address): Promise<BigNumber>;
    getOpStackL1DataFee(unsignedTx: PopulatedTransaction, relayer: Address | undefined, options: Partial<{
        opStackL2GasUnits: BigNumberish;
        opStackL1DataFeeMultiplier: BigNumber;
    }>): Promise<BigNumber>;
    estimateGas(unsignedTx: PopulatedTransaction, senderAddress: Address, provider: providers.Provider | L2Provider<providers.Provider>, options?: Partial<{
        gasPrice: BigNumberish;
        gasUnits: BigNumberish;
        baseFeeMultiplier: BigNumber;
        priorityFeeMultiplier: BigNumber;
        opStackL1GasCostMultiplier: BigNumber;
        transport: Transport;
    }>): Promise<TransactionCostEstimate>;
    getTokenPrice(tokenSymbol: string): Promise<number>;
}
