UNPKG

@lodestar/beacon-node

Version:

A Typescript implementation of the beacon chain

80 lines 3.24 kB
import { ChainForkConfig } from "@lodestar/config"; import { CachedBeaconStateAllForks } from "@lodestar/state-transition"; import { Logger } from "@lodestar/utils"; import { IBeaconDb } from "../db/index.js"; import { Metrics } from "../metrics/index.js"; import { Eth1DataAndDeposits, IEth1Provider } from "./interface.js"; import { Eth1Options } from "./options.js"; export type Eth1DepositDataTrackerModules = { config: ChainForkConfig; db: IBeaconDb; metrics: Metrics | null; logger: Logger; signal: AbortSignal; }; /** * Main class handling eth1 data fetching, processing and storing * Upon instantiation, starts fetching deposits and blocks at regular intervals */ export declare class Eth1DepositDataTracker { private readonly eth1Provider; private config; private logger; private signal; private readonly metrics; private depositsCache; private eth1DataCache; private lastProcessedDepositBlockNumber; /** Dynamically adjusted follow distance */ private eth1FollowDistance; /** Dynamically adjusted batch size to fetch deposit logs */ private eth1GetBlocksBatchSizeDynamic; /** Dynamically adjusted batch size to fetch deposit logs */ private eth1GetLogsBatchSizeDynamic; private readonly forcedEth1DataVote; /** To stop `runAutoUpdate()` in addition to AbortSignal */ private stopPolling; constructor(opts: Eth1Options, { config, db, metrics, logger, signal }: Eth1DepositDataTrackerModules, eth1Provider: IEth1Provider); isPollingEth1Data(): boolean; stopPollingEth1Data(): void; /** * Return eth1Data and deposits ready for block production for a given state */ getEth1DataAndDeposits(state: CachedBeaconStateAllForks): Promise<Eth1DataAndDeposits>; /** * Returns an eth1Data vote for a given state. * Requires internal caches to be updated regularly to return good results */ private getEth1Data; /** * Returns deposits to be included for a given state and eth1Data vote. * Requires internal caches to be updated regularly to return good results */ private getDeposits; /** * Abortable async setInterval that runs its callback once at max between `ms` at minimum */ private runAutoUpdate; /** * Update the deposit and block cache, returning an error if either fail * @returns true if it has catched up to the remote follow block */ private update; /** * Fetch deposit events from remote eth1 node up to follow-distance block * @returns true if it has catched up to the remote follow block */ private updateDepositCache; /** * Fetch block headers from a remote eth1 node up to follow-distance block * * depositRoot and depositCount are inferred from already fetched deposits. * Calling get_deposit_root() and the smart contract for a non-latest block requires an * archive node, something most users don't have access too. * @returns true if it has catched up to the remote follow timestamp */ private updateBlockCache; private getFromBlockToFetch; private getLastProcessedDepositBlockNumber; } //# sourceMappingURL=eth1DepositDataTracker.d.ts.map