UNPKG

@lodestar/beacon-node

Version:

A Typescript implementation of the beacon chain

112 lines 4.43 kB
import { BeaconConfig } from "@lodestar/config"; import { CachedBeaconStateAllForks } from "@lodestar/state-transition"; import { Root, RootHex, phase0 } from "@lodestar/types"; export type EthJsonRpcBlockRaw = { /** the block number. null when its pending block. `"0x1b4"` */ number: string; /** 32 Bytes - hash of the block. null when its pending block. `"0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae"` */ hash: string; /** 32 Bytes - hash of the parent block. `"0xe99e022112df268087ea7eafaf4790497fd21dbeeb6bd7a1721df161a6657a54"` */ parentHash: string; /** * integer of the total difficulty of the chain until this block. `"0x78ed983323d"`. * Current mainnet value is 0x684de10dc5c03f006b6, 75 bits so requires a bigint. */ totalDifficulty: string; /** the unix timestamp for when the block was collated. `"0x55ba467c"` */ timestamp: string; }; export interface IEth1Provider { deployBlock: number; getBlockNumber(): Promise<number>; /** Returns HTTP code 200 + value=null if block is not found */ getBlockByNumber(blockNumber: number | "latest"): Promise<EthJsonRpcBlockRaw | null>; /** Returns HTTP code 200 + value=null if block is not found */ getBlockByHash(blockHashHex: string): Promise<EthJsonRpcBlockRaw | null>; /** null returns are ignored, may return a different number of blocks than expected */ getBlocksByNumber(fromBlock: number, toBlock: number): Promise<EthJsonRpcBlockRaw[]>; getDepositEvents(fromBlock: number, toBlock: number): Promise<phase0.DepositEvent[]>; validateContract(): Promise<void>; getState(): Eth1ProviderState; } export declare enum Eth1ProviderState { ONLINE = "ONLINE", OFFLINE = "OFFLINE", ERROR = "ERROR", AUTH_FAILED = "AUTH_FAILED" } export type Eth1DataAndDeposits = { eth1Data: phase0.Eth1Data; deposits: phase0.Deposit[]; }; export interface IEth1ForBlockProduction { getEth1DataAndDeposits(state: CachedBeaconStateAllForks): Promise<Eth1DataAndDeposits>; /** Returns the most recent POW block that satisfies the merge block condition */ getTerminalPowBlock(): Promise<Root | null>; /** Get a POW block by hash checking the local cache first */ getPowBlock(powBlockHash: string): Promise<PowMergeBlock | null>; /** Get current TD progress for log notifier */ getTDProgress(): TDProgress | null; /** * Should only start polling for mergeBlock if: * - after BELLATRIX_FORK_EPOCH * - Beacon node synced * - head state not isMergeTransitionComplete */ startPollingMergeBlock(): void; isPollingEth1Data(): boolean; /** * Should stop polling eth1Data after a Electra block is finalized AND deposit_requests_start_index is reached */ stopPollingEth1Data(): void; } /** Different Eth1Block from phase0.Eth1Block with blockHash */ export type Eth1Block = { blockHash: Uint8Array; blockNumber: number; timestamp: number; }; export type PowMergeBlock = { number: number; blockHash: RootHex; parentHash: RootHex; totalDifficulty: bigint; }; export type PowMergeBlockTimestamp = PowMergeBlock & { /** in seconds */ timestamp: number; }; export type TDProgress = { ttdHit: false; /** Power of ten by which tdDiffScaled is scaled down */ tdFactor: bigint; /** (TERMINAL_TOTAL_DIFFICULTY - block.totalDifficulty) / tdFactor */ tdDiffScaled: number; /** TERMINAL_TOTAL_DIFFICULTY */ ttd: bigint; /** totalDifficulty of latest fetched eth1 block */ td: bigint; /** timestamp in sec of latest fetched eth1 block */ timestamp: number; } | { ttdHit: true; }; export type BatchDepositEvents = { depositEvents: phase0.DepositEvent[]; blockNumber: number; }; export type Eth1Streamer = { getDepositsStream(fromBlock: number): AsyncGenerator<BatchDepositEvents>; getDepositsAndBlockStreamForGenesis(fromBlock: number): AsyncGenerator<[phase0.DepositEvent[], phase0.Eth1Block]>; }; export type IEth1StreamParams = Pick<BeaconConfig, "ETH1_FOLLOW_DISTANCE" | "MIN_GENESIS_TIME" | "GENESIS_DELAY" | "SECONDS_PER_ETH1_BLOCK"> & { maxBlocksPerPoll: number; }; export type IJson = string | number | boolean | undefined | IJson[] | { [key: string]: IJson; }; export interface RpcPayload<P = IJson[]> { method: string; params: P; } //# sourceMappingURL=interface.d.ts.map