import { Address, WithAddress } from '@hyperlane-xyz/utils';
import { MultiProvider } from '../providers/MultiProvider.js';
import { ChainName, ChainNameOrId } from '../types.js';
import { HyperlaneReader } from '../utils/HyperlaneReader.js';
import { CrossCollateralRoutingFeeConfig, FeeParameters, RoutingFeeConfig, TokenFeeConfig } from './types.js';
import { CrossCollateralRoutersByDomain } from './crossCollateralUtils.js';
export type DerivedTokenFeeConfig = WithAddress<TokenFeeConfig>;
type DerivedCrossCollateralFeeContracts = Record<ChainName, Record<string, DerivedTokenFeeConfig>>;
export type DerivedRoutingFeeConfig = WithAddress<RoutingFeeConfig> & {
    feeContracts: Record<ChainName, DerivedTokenFeeConfig>;
};
export type DerivedCrossCollateralRoutingFeeConfig = WithAddress<CrossCollateralRoutingFeeConfig> & {
    feeContracts: DerivedCrossCollateralFeeContracts;
};
export type TokenFeeReaderParams = {
    address: Address;
    routingDestinations?: number[];
    crossCollateralRouters?: CrossCollateralRoutersByDomain;
};
export declare class EvmTokenFeeReader extends HyperlaneReader {
    protected readonly multiProvider: MultiProvider;
    protected readonly chain: ChainNameOrId;
    protected readonly concurrency: number;
    protected readonly logger: import("pino").default.Logger<never>;
    constructor(multiProvider: MultiProvider, chain: ChainNameOrId, concurrency?: number);
    deriveTokenFeeConfig(params: TokenFeeReaderParams): Promise<DerivedTokenFeeConfig>;
    private deriveLinearFeeConfig;
    private deriveOffchainQuotedLinearFeeConfig;
    private deriveProgressiveFeeConfig;
    private deriveRegressiveFeeConfig;
    private deriveRoutingFeeConfig;
    private deriveCrossCollateralRoutingFeeConfig;
    private createCachedFeeConfigReader;
    private deriveCrossCollateralDestinationFees;
    convertFromBps(bps: number): FeeParameters;
}
export {};
//# sourceMappingURL=EvmTokenFeeReader.d.ts.map