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