import { Address } from '@hyperlane-xyz/utils';
import { MultiProtocolProvider } from '../providers/MultiProtocolProvider.js';
import { MultiProvider } from '../providers/MultiProvider.js';
import { ChainNameOrId } from '../types.js';
import { HyperlaneReader } from '../utils/HyperlaneReader.js';
import { RateLimitMidPoint, xERC20Limits } from './adapters/ITokenAdapter.js';
import { XERC20Type } from './types.js';
export interface StandardXERC20Limits {
    type: typeof XERC20Type.Standard;
    mint: string;
    burn: string;
}
export interface VeloXERC20Limits {
    type: typeof XERC20Type.Velo;
    bufferCap: string;
    rateLimitPerSecond: string;
}
/**
 * Unified XERC20 limits type
 */
export type XERC20Limits = StandardXERC20Limits | VeloXERC20Limits;
/**
 * Map of bridge addresses to their limits
 */
export type XERC20LimitsMap = Record<Address, XERC20Limits>;
/**
 * Reader for on-chain XERC20 state.
 * Reads limits and bridge configurations from XERC20 contracts.
 */
export declare class EvmXERC20Reader extends HyperlaneReader {
    protected readonly multiProvider: MultiProvider;
    protected logger: import("pino").default.Logger<never>;
    protected readonly multiProtocolProvider: MultiProtocolProvider;
    constructor(multiProvider: MultiProvider, chain: ChainNameOrId);
    deriveXERC20TokenType(xERC20Address: Address): Promise<XERC20Type>;
    /**
     * Read current limits for the specified bridges.
     */
    readLimits(xERC20Address: Address, bridges: Address[], type: XERC20Type): Promise<XERC20LimitsMap>;
    /**
     * Read all bridges configured on-chain for a Velodrome XERC20 by parsing ConfigurationChanged events.
     * Returns empty array for Standard XERC20 since it has no event-based bridge enumeration.
     * Note: Queries from block 0 which may be slow on chains with long histories.
     */
    readOnChainBridges(xERC20Address: Address, type: XERC20Type): Promise<Address[]>;
    protected toStandardLimits(limits: xERC20Limits): StandardXERC20Limits;
    protected toVeloLimits(rateLimits: RateLimitMidPoint): VeloXERC20Limits;
}
export declare function limitsAreZero(limits: XERC20Limits): boolean;
export declare function limitsMatch(a: XERC20Limits, b: XERC20Limits): boolean;
//# sourceMappingURL=EvmXERC20Reader.d.ts.map