import { ChainConfig } from "@lodestar/config";
import { Logger } from "@lodestar/logger";
import { phase0 } from "@lodestar/types";
import { Eth1Block, Eth1ProviderState, IEth1Provider } from "../interface.js";
import { EthJsonRpcBlockRaw } from "../interface.js";
import { Eth1Options } from "../options.js";
import { JsonRpcHttpClientMetrics } from "./jsonRpcHttpClient.js";
export declare class Eth1Provider implements IEth1Provider {
    readonly deployBlock: number;
    private readonly depositContractAddress;
    private readonly rpc;
    private state;
    private logger?;
    constructor(config: Pick<ChainConfig, "DEPOSIT_CONTRACT_ADDRESS">, opts: Pick<Eth1Options, "depositContractDeployBlock" | "providerUrls" | "jwtSecretHex" | "jwtId" | "jwtVersion"> & {
        logger?: Logger;
    }, signal?: AbortSignal, metrics?: JsonRpcHttpClientMetrics | null);
    getState(): Eth1ProviderState;
    validateContract(): Promise<void>;
    getDepositEvents(fromBlock: number, toBlock: number): Promise<phase0.DepositEvent[]>;
    /**
     * Fetches an arbitrary array of block numbers in batch
     */
    getBlocksByNumber(fromBlock: number, toBlock: number): Promise<EthJsonRpcBlockRaw[]>;
    getBlockByNumber(blockNumber: number | "latest"): Promise<EthJsonRpcBlockRaw | null>;
    getBlockByHash(blockHashHex: string): Promise<EthJsonRpcBlockRaw | null>;
    getBlockNumber(): Promise<number>;
    getCode(address: string): Promise<string>;
    getLogs(options: {
        fromBlock: number;
        toBlock: number;
        address: string;
        topics: string[];
    }): Promise<{
        blockNumber: number;
        data: string;
        topics: string[];
    }[]>;
}
export declare function parseEth1Block(blockRaw: EthJsonRpcBlockRaw): Eth1Block;
//# sourceMappingURL=eth1Provider.d.ts.map