UNPKG

@lodestar/beacon-node

Version:

A Typescript implementation of the beacon chain

71 lines 3.76 kB
import { ChainForkConfig } from "@lodestar/config"; import { IForkChoice } from "@lodestar/fork-choice"; import { CachedBeaconStateAllForks } from "@lodestar/state-transition"; import { BeaconBlock, RootHex, Slot, phase0 } from "@lodestar/types"; import { Logger } from "@lodestar/utils"; import { IBeaconDb } from "../../db/index.js"; import { Metrics } from "../../metrics/index.js"; import { ChainEventEmitter } from "../emitter.js"; import { BlockStateCache, CheckpointStateCache } from "../stateCache/types.js"; import { ValidatorMonitor } from "../validatorMonitor.js"; import { IStateRegeneratorInternal, RegenCaller, StateRegenerationOpts } from "./interface.js"; export type RegenModules = { db: IBeaconDb; forkChoice: IForkChoice; blockStateCache: BlockStateCache; checkpointStateCache: CheckpointStateCache; config: ChainForkConfig; emitter: ChainEventEmitter; logger: Logger; metrics: Metrics | null; validatorMonitor: ValidatorMonitor | null; }; /** * Regenerates states that have already been processed by the fork choice * Since Feb 2024, we support reloading checkpoint state from disk via allowDiskReload flag. Due to its performance impact * this flag is only set to true in this case: * - getPreState: this is for block processing, it's important to reload state in unfinality time * - updateHeadState: rarely happen, but it's important to make sure we always can regen head state */ export declare class StateRegenerator implements IStateRegeneratorInternal { private readonly modules; constructor(modules: RegenModules); /** * Get the state to run with `block`. May be: * - If parent is in same epoch -> Exact state at `block.parentRoot` * - If parent is in prev epoch -> State after `block.parentRoot` dialed forward through epoch transition * - reload state if needed in this flow */ getPreState(block: BeaconBlock, opts: StateRegenerationOpts, regenCaller: RegenCaller): Promise<CachedBeaconStateAllForks>; /** * Get state after block `cp.root` dialed forward to first slot of `cp.epoch` */ getCheckpointState(cp: phase0.Checkpoint, opts: StateRegenerationOpts, regenCaller: RegenCaller, allowDiskReload?: boolean): Promise<CachedBeaconStateAllForks>; /** * Get state after block `blockRoot` dialed forward to `slot` * - allowDiskReload should be used with care, as it will cause the state to be reloaded from disk */ getBlockSlotState(blockRoot: RootHex, slot: Slot, opts: StateRegenerationOpts, regenCaller: RegenCaller, allowDiskReload?: boolean): Promise<CachedBeaconStateAllForks>; /** * Get state by exact root. If not in cache directly, requires finding the block that references the state from the * forkchoice and replaying blocks to get to it. * - allowDiskReload should be used with care, as it will cause the state to be reloaded from disk */ getState(stateRoot: RootHex, caller: RegenCaller, opts?: StateRegenerationOpts, allowDiskReload?: boolean): Promise<CachedBeaconStateAllForks>; private findFirstStateBlock; } /** * Starting at `state.slot`, * process slots forward towards `slot`, * emitting "checkpoint" events after every epoch processed. * * Stops processing after no more full epochs can be processed. */ export declare function processSlotsToNearestCheckpoint(modules: { checkpointStateCache: CheckpointStateCache; metrics: Metrics | null; validatorMonitor: ValidatorMonitor | null; emitter: ChainEventEmitter | null; logger: Logger | null; }, preState: CachedBeaconStateAllForks, slot: Slot, regenCaller: RegenCaller, opts: StateRegenerationOpts): Promise<CachedBeaconStateAllForks>; //# sourceMappingURL=regen.d.ts.map