import { CachedBeaconStateAllForks } from "@lodestar/state-transition";
import { Root } from "@lodestar/types";
import { Eth1DepositDataTrackerModules } from "./eth1DepositDataTracker.js";
import { Eth1MergeBlockTrackerModules } from "./eth1MergeBlockTracker.js";
import { Eth1DataAndDeposits, IEth1ForBlockProduction, IEth1Provider, PowMergeBlock, TDProgress } from "./interface.js";
import { Eth1Options } from "./options.js";
import { Eth1Provider } from "./provider/eth1Provider.js";
export { Eth1Provider };
export type { IEth1ForBlockProduction, IEth1Provider };
export declare function initializeEth1ForBlockProduction(opts: Eth1Options, modules: Pick<Eth1DepositDataTrackerModules, "db" | "config" | "metrics" | "logger" | "signal">): IEth1ForBlockProduction;
export declare class Eth1ForBlockProduction implements IEth1ForBlockProduction {
    private readonly eth1DepositDataTracker;
    private readonly eth1MergeBlockTracker;
    constructor(opts: Eth1Options, modules: Eth1DepositDataTrackerModules & Eth1MergeBlockTrackerModules & {
        eth1Provider?: IEth1Provider;
    });
    getEth1DataAndDeposits(state: CachedBeaconStateAllForks): Promise<Eth1DataAndDeposits>;
    getTerminalPowBlock(): Promise<Root | null>;
    getPowBlock(powBlockHash: string): Promise<PowMergeBlock | null>;
    getTDProgress(): TDProgress | null;
    startPollingMergeBlock(): void;
    isPollingEth1Data(): boolean;
    stopPollingEth1Data(): void;
}
/**
 * Disabled version of Eth1ForBlockProduction
 * May produce invalid blocks by not adding new deposits and voting for the same eth1Data
 */
export declare class Eth1ForBlockProductionDisabled implements IEth1ForBlockProduction {
    /**
     * Returns same eth1Data as in state and no deposits
     * May produce invalid blocks if deposits have to be added
     */
    getEth1DataAndDeposits(state: CachedBeaconStateAllForks): Promise<Eth1DataAndDeposits>;
    /**
     * Will miss the oportunity to propose the merge block but will still produce valid blocks
     */
    getTerminalPowBlock(): Promise<Root | null>;
    /** Will not be able to validate the merge block */
    getPowBlock(_powBlockHash: string): Promise<PowMergeBlock | null>;
    getTDProgress(): TDProgress | null;
    isPollingEth1Data(): boolean;
    startPollingMergeBlock(): void;
    stopPollingEth1Data(): void;
}
//# sourceMappingURL=index.d.ts.map