@lodestar/beacon-node
Version:
A Typescript implementation of the beacon chain
80 lines • 3.24 kB
TypeScript
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