import { Logger } from 'pino'; import { z } from 'zod'; import { Address } from '@hyperlane-xyz/utils'; import type { ChainMetadataManager } from '../../metadata/ChainMetadataManager.js'; import { MultiProvider } from '../../providers/MultiProvider.js'; import type { ChainNameOrId } from '../../types.js'; import { GetEventLogsResponse } from './types.js'; export type EvmEventLogsReaderConfig = { chain: ChainNameOrId; useRPC?: boolean; paginationBlockRange?: number; explorerFallback?: ExplorerFallbackConfig; }; export declare const GetLogByTopicOptionsSchema: z.ZodObject<{ eventTopic: z.ZodPipe>; contractAddress: z.ZodString; fromBlock: z.ZodOptional; toBlock: z.ZodOptional; }, z.core.$strip>; export declare const RequiredGetLogByTopicOptionsSchema: z.ZodObject<{ eventTopic: z.ZodNonOptional>>; contractAddress: z.ZodNonOptional; fromBlock: z.ZodNonOptional>; toBlock: z.ZodNonOptional>; }, z.core.$strip>; type GetLogByTopicOptions = z.infer; type RequiredGetLogByTopicOptions = z.infer; interface IEvmEventLogsReaderStrategy { getContractDeploymentBlockNumber(address: Address): Promise; getContractLogs(address: RequiredGetLogByTopicOptions): Promise; } export type ExplorerFallbackConfig = Partial>; export declare class EvmEtherscanLikeEventLogsReader implements IEvmEventLogsReaderStrategy { protected readonly chain: ChainNameOrId; protected readonly config: Awaited>; protected readonly multiProvider: MultiProvider; constructor(chain: ChainNameOrId, config: Awaited>, multiProvider: MultiProvider); getContractDeploymentBlockNumber(address: string): Promise; getContractLogs(options: RequiredGetLogByTopicOptions): Promise; } export declare class EvmRpcEventLogsReader implements IEvmEventLogsReaderStrategy { protected readonly chain: ChainNameOrId; protected readonly config: { paginationBlockRange?: number; }; protected readonly multiProvider: MultiProvider; constructor(chain: ChainNameOrId, config: { paginationBlockRange?: number; }, multiProvider: MultiProvider); getContractDeploymentBlockNumber(address: string): Promise; getContractLogs(options: RequiredGetLogByTopicOptions): Promise; } export declare class FallbackEvmEventLogsReader implements IEvmEventLogsReaderStrategy { protected readonly chain: ChainNameOrId; protected readonly readers: EvmEtherscanLikeEventLogsReader[]; protected readonly logger: Logger; protected readonly config: ExplorerFallbackConfig; constructor(chain: ChainNameOrId, readers: EvmEtherscanLikeEventLogsReader[], logger: Logger, config?: ExplorerFallbackConfig); private executeWithFallback; getContractDeploymentBlockNumber(address: Address): Promise; getContractLogs(options: RequiredGetLogByTopicOptions): Promise; } export declare class EvmEventLogsReader { protected readonly config: EvmEventLogsReaderConfig; protected readonly multiProvider: MultiProvider; protected logReaderStrategy: IEvmEventLogsReaderStrategy; protected readonly logger: Logger; protected fallbackLogReaderStrategy?: IEvmEventLogsReaderStrategy | undefined; private deploymentBlockCache; private explorerDeploymentBlockCache; protected constructor(config: EvmEventLogsReaderConfig, multiProvider: MultiProvider, logReaderStrategy: IEvmEventLogsReaderStrategy, logger: Logger, fallbackLogReaderStrategy?: IEvmEventLogsReaderStrategy | undefined); static fromConfig(config: EvmEventLogsReaderConfig, multiProvider: MultiProvider, logger?: Logger): EvmEventLogsReader; getContractDeploymentBlockFromExplorer(contractAddress: Address): Promise; /** * The block the contract was deployed in, which is where a scan of its whole * history starts. Read over the block explorer where the chain has a usable * one and over the RPC otherwise, the same way `getLogsByTopic` resolves it * when a caller does not supply `fromBlock`, and cached per instance. * * Exposed for callers that read the same range more than once: resolving it * here and passing it as `fromBlock` keeps a later read from deriving it * again over the RPC, which bisects `eth_getCode` through historical blocks * that a chain serving no archive state cannot answer. */ getContractDeploymentBlock(contractAddress: Address): Promise; getLogsByTopic(options: GetLogByTopicOptions): Promise; private getDeploymentBlock; private getLogsByTopicWithStrategy; } export {}; //# sourceMappingURL=EvmEventLogsReader.d.ts.map