import { Transport } from "viem";
import { RelayData } from "../interfaces";
import { BigNumber, BigNumberish, TransactionCostEstimate, Address } from "../utils";
export interface QueryInterface {
    getGasCosts: (deposit: RelayData & {
        destinationChainId: number;
    }, relayer: Address, options?: Partial<{
        gasPrice: BigNumberish;
        gasUnits: BigNumberish;
        baseFeeMultiplier: BigNumber;
        priorityFeeMultiplier: BigNumber;
        opStackL1GasCostMultiplier: BigNumber;
        transport: Transport;
    }>) => Promise<TransactionCostEstimate>;
    getTokenPrice: (tokenSymbol: string) => Promise<number>;
    getNativeGasCost: (deposit: RelayData & {
        destinationChainId: number;
    }, relayer: Address) => Promise<BigNumber>;
}
export declare const expectedCapitalCostsKeys: string[];
export interface CapitalCostConfig {
    lowerBound: string;
    upperBound: string;
    cutoff: string;
    decimals: number;
}
type ChainIdAsString = string;
export interface CapitalCostConfigOverride {
    default: CapitalCostConfig;
    routeOverrides?: Record<ChainIdAsString, Record<ChainIdAsString, CapitalCostConfig>>;
    destinationChainOverrides?: Record<ChainIdAsString, CapitalCostConfig>;
    originChainOverrides?: Record<ChainIdAsString, CapitalCostConfig>;
}
export type RelayCapitalCostConfig = CapitalCostConfigOverride | CapitalCostConfig;
export interface BaseRelayFeeCalculatorConfig {
    nativeTokenDecimals?: number;
    gasDiscountPercent?: number;
    capitalDiscountPercent?: number;
    feeLimitPercent?: number;
    capitalCostsConfig: {
        [token: string]: CapitalCostConfig | CapitalCostConfigOverride;
    };
}
export interface RelayFeeCalculatorConfigWithQueries extends BaseRelayFeeCalculatorConfig {
    queries: QueryInterface;
}
export interface RelayFeeCalculatorConfigWithMap extends BaseRelayFeeCalculatorConfig {
    queriesMap: Record<number, QueryInterface>;
}
export type RelayFeeCalculatorConfig = RelayFeeCalculatorConfigWithQueries | RelayFeeCalculatorConfigWithMap;
export interface RelayerFeeDetails {
    amountToRelay: string;
    tokenSymbol: string;
    gasFeePercent: string;
    gasFeeTotal: string;
    gasDiscountPercent: number;
    capitalFeePercent: string;
    capitalFeeTotal: string;
    capitalDiscountPercent: number;
    relayFeePercent: string;
    relayFeeTotal: string;
    feeLimitPercent: number;
    isAmountTooLow: boolean;
    maxGasFeePercent: string;
    minDeposit: string;
}
export interface LoggingFunction {
    (data: {
        at: string;
        message: string;
        [key: string]: unknown;
    }): void;
}
export interface Logger {
    debug: LoggingFunction;
    info: LoggingFunction;
    warn: LoggingFunction;
    error: LoggingFunction;
}
export declare const DEFAULT_LOGGER: Logger;
export declare function getDefaultRelayer(chainId?: number): Address;
export declare class RelayFeeCalculator {
    private queries;
    private gasDiscountPercent;
    private capitalDiscountPercent;
    private feeLimitPercent;
    private nativeTokenDecimals;
    private capitalCostsConfig;
    private logger;
    constructor(config: RelayFeeCalculatorConfigWithQueries, logger?: Logger);
    constructor(config: RelayFeeCalculatorConfigWithMap, logger?: Logger, destinationChainId?: number);
    private static capitalCostConfigIsOverride;
    static validateAndTransformCapitalCostsConfigOverride(capitalCosts: CapitalCostConfigOverride | CapitalCostConfig): CapitalCostConfigOverride;
    static validateCapitalCostsConfig(capitalCosts: CapitalCostConfig): void;
    getTokenPrice(tokenSymbol: string): Promise<number>;
    gasFeePercent(deposit: RelayData & {
        destinationChainId: number;
    }, outputAmount: BigNumberish, simulateZeroFill?: boolean, relayerAddress?: Address, _tokenPrice?: number, tokenMapping?: {
        ACX: {
            name: string;
            symbol: string;
            decimals: number;
            addresses: {
                [x: number]: string;
            };
            coingeckoId: string;
        };
        ARB: {
            name: string;
            symbol: string;
            decimals: number;
            addresses: {
                [x: number]: string;
            };
            coingeckoId: string;
        };
        AZERO: {
            name: string;
            symbol: string;
            decimals: number;
            addresses: {
                [x: number]: string;
            };
            coingeckoId: string;
        };
        BADGER: {
            name: string;
            symbol: string;
            decimals: number;
            addresses: {
                [x: number]: string;
            };
            coingeckoId: string;
        };
        BAL: {
            name: string;
            symbol: string;
            decimals: number;
            addresses: {
                [x: number]: string;
            };
            coingeckoId: string;
        };
        BNB: {
            name: string;
            symbol: string;
            decimals: number;
            addresses: {
                [x: number]: string;
            };
            coingeckoId: string;
        };
        BOBA: {
            name: string;
            symbol: string;
            decimals: number;
            addresses: {
                [x: number]: string;
            };
            coingeckoId: string;
        };
        CAKE: {
            name: string;
            symbol: string;
            decimals: number;
            addresses: {
                [x: number]: string;
            };
            coingeckoId: string;
        };
        DAI: {
            name: string;
            symbol: string;
            decimals: number;
            addresses: {
                [x: number]: string;
            };
            coingeckoId: string;
        };
        ETH: {
            name: string;
            symbol: string;
            decimals: number;
            addresses: {
                [x: number]: string;
            };
            coingeckoId: string;
        };
        ezETH: {
            name: string;
            symbol: string;
            decimals: number;
            addresses: {
                [x: number]: string;
            };
            coingeckoId: string;
        };
        GHO: {
            name: string;
            symbol: string;
            decimals: number;
            addresses: {
                [x: number]: string;
            };
            coingeckoId: string;
        };
        GRASS: {
            name: string;
            symbol: string;
            decimals: number;
            addresses: {
                [x: number]: string;
            };
            coingeckoId: string;
        };
        LSK: {
            name: string;
            symbol: string;
            decimals: number;
            addresses: {
                [x: number]: string;
            };
            coingeckoId: string;
        };
        MATIC: {
            name: string;
            symbol: string;
            decimals: number;
            addresses: {
                [x: number]: string;
            };
            coingeckoId: string;
        };
        OP: {
            name: string;
            symbol: string;
            decimals: number;
            addresses: {
                [x: number]: string;
            };
            coingeckoId: string;
        };
        POOL: {
            name: string;
            symbol: string;
            decimals: number;
            addresses: {
                [x: number]: string;
            };
            coingeckoId: string;
        };
        SNX: {
            name: string;
            symbol: string;
            decimals: number;
            addresses: {
                [x: number]: string;
            };
            coingeckoId: string;
        };
        SOL: {
            name: string;
            symbol: string;
            decimals: number;
            addresses: {
                [x: number]: string;
                133268194659241: string;
            };
            coingeckoId: string;
        };
        "TATARA-USDC": {
            name: string;
            symbol: string;
            decimals: number;
            addresses: {
                [x: number]: string;
            };
            coingeckoId: string;
        };
        "TATARA-USDS": {
            name: string;
            symbol: string;
            decimals: number;
            addresses: {
                [x: number]: string;
            };
            coingeckoId: string;
        };
        "TATARA-USDT": {
            name: string;
            symbol: string;
            decimals: number;
            addresses: {
                [x: number]: string;
            };
            coingeckoId: string;
        };
        "TATARA-WBTC": {
            name: string;
            symbol: string;
            decimals: number;
            addresses: {
                [x: number]: string;
            };
            coingeckoId: string;
        };
        UMA: {
            name: string;
            symbol: string;
            decimals: number;
            addresses: {
                [x: number]: string;
            };
            coingeckoId: string;
        };
        USDB: {
            name: string;
            symbol: string;
            decimals: number;
            addresses: {
                [x: number]: string;
            };
            coingeckoId: string;
        };
        USDC: {
            name: string;
            symbol: string;
            decimals: number;
            addresses: {
                [x: number]: string;
                133268194659241: string;
            };
            coingeckoId: string;
        };
        "USDC.e": {
            name: string;
            symbol: string;
            decimals: number;
            addresses: {
                [x: number]: string;
            };
            coingeckoId: string;
        };
        USDbC: {
            name: string;
            symbol: string;
            decimals: number;
            addresses: {
                [x: number]: string;
            };
            coingeckoId: string;
        };
        USDzC: {
            name: string;
            symbol: string;
            decimals: number;
            addresses: {
                [x: number]: string;
            };
            coingeckoId: string;
        };
        "USDC-BNB": {
            name: string;
            symbol: string;
            decimals: number;
            addresses: {
                [x: number]: string;
            };
            l1TokenDecimals: number;
            coingeckoId: string;
        };
        USDT: {
            name: string;
            symbol: string;
            decimals: number;
            addresses: {
                [x: number]: string;
            };
            coingeckoId: string;
        };
        "USDT-BNB": {
            name: string;
            symbol: string;
            decimals: number;
            addresses: {
                [x: number]: string;
            };
            l1TokenDecimals: number;
            coingeckoId: string;
        };
        VLR: {
            name: string;
            symbol: string;
            decimals: number;
            addresses: {
                [x: number]: string;
            };
            coingeckoId: string;
        };
        WAZERO: {
            name: string;
            symbol: string;
            decimals: number;
            addresses: {
                [x: number]: string;
            };
            coingeckoId: string;
        };
        WBNB: {
            name: string;
            symbol: string;
            decimals: number;
            addresses: {
                [x: number]: string;
            };
            coingeckoId: string;
        };
        WBTC: {
            name: string;
            symbol: string;
            decimals: number;
            addresses: {
                [x: number]: string;
            };
            coingeckoId: string;
        };
        WETH: {
            name: string;
            symbol: string;
            decimals: number;
            addresses: {
                [x: number]: string;
            };
            coingeckoId: string;
        };
        WGHO: {
            name: string;
            symbol: string;
            decimals: number;
            addresses: {
                [x: number]: string;
            };
            coingeckoId: string;
        };
        WGRASS: {
            name: string;
            symbol: string;
            decimals: number;
            addresses: {
                [x: number]: string;
            };
            coingeckoId: string;
        };
        WLD: {
            name: string;
            symbol: string;
            decimals: number;
            addresses: {
                [x: number]: string;
            };
            coingeckoId: string;
        };
        WMATIC: {
            name: string;
            symbol: string;
            decimals: number;
            addresses: {
                [x: number]: string;
            };
            coingeckoId: string;
        };
        WSOL: {
            name: string;
            symbol: string;
            decimals: number;
            addresses: {
                [x: number]: string;
                133268194659241: string;
            };
            coingeckoId: string;
        };
        XYZ: {
            name: string;
            symbol: string;
            decimals: number;
            addresses: {
                [x: number]: string;
            };
            coingeckoId: string;
        };
    }, gasPrice?: BigNumberish, gasLimit?: BigNumberish, _tokenGasCost?: BigNumberish, transport?: Transport): Promise<BigNumber>;
    capitalFeePercent(_outputAmount: BigNumberish, _tokenSymbol: string, _originRoute?: ChainIdAsString, _destinationRoute?: ChainIdAsString): BigNumber;
    private checkAllConfigConflicts;
    private warnIfConfigConflicts;
    relayerFeeDetails(deposit: RelayData & {
        destinationChainId: number;
    }, outputAmount?: BigNumberish, simulateZeroFill?: boolean, relayerAddress?: Address, _tokenPrice?: number, gasPrice?: BigNumberish, gasUnits?: BigNumberish, tokenGasCost?: BigNumberish): Promise<RelayerFeeDetails>;
}
export {};
