UNPKG

@lodestar/beacon-node

Version:

A Typescript implementation of the beacon chain

166 lines • 6.49 kB
import { ForkName, ForkPreDeneb } from "@lodestar/params"; import { BlobIndex, ColumnIndex, SignedBeaconBlock, Slot, deneb, fulu } from "@lodestar/types"; import { VersionedHashes } from "../../../execution/index.js"; import { AddBlob, AddBlock, AddColumn, BlobMeta, BlobWithSource, BlockInputInit, ColumnMeta, ColumnWithSource, CreateBlockInputMeta, DAData, DAType, IBlockInput, LogMetaBasic, LogMetaBlobs, LogMetaColumns, PromiseParts, SourceMeta } from "./types.js"; export type BlockInput = BlockInputPreData | BlockInputBlobs | BlockInputColumns; export declare function isBlockInputPreDeneb(blockInput: IBlockInput): blockInput is BlockInputPreData; export declare function isBlockInputBlobs(blockInput: IBlockInput): blockInput is BlockInputBlobs; export declare function isBlockInputColumns(blockInput: IBlockInput): blockInput is BlockInputColumns; type BlockInputState<F extends ForkName> = { hasBlock: false; hasAllData: false; } | { hasBlock: false; hasAllData: true; } | { hasBlock: true; hasAllData: false; block: SignedBeaconBlock<F>; source: SourceMeta; } | { hasBlock: true; hasAllData: true; block: SignedBeaconBlock<F>; source: SourceMeta; timeCompleteSec: number; }; declare abstract class AbstractBlockInput<F extends ForkName = ForkName, TData extends DAData = DAData> implements IBlockInput<F, TData> { abstract type: DAType; daOutOfRange: boolean; timeCreatedSec: number; forkName: ForkName; slot: Slot; blockRootHex: string; parentRootHex: string; abstract state: BlockInputState<F>; protected blockPromise: PromiseParts<SignedBeaconBlock<F>>; protected dataPromise: PromiseParts<TData>; constructor(init: BlockInputInit); abstract addBlock(props: AddBlock<F>): void; hasBlock(): boolean; getBlock(): SignedBeaconBlock<F>; getBlockSource(): SourceMeta; hasAllData(): boolean; hasBlockAndAllData(): boolean; getLogMeta(): LogMetaBasic; getTimeComplete(): number; waitForBlock(timeout: number, signal?: AbortSignal): Promise<SignedBeaconBlock<F>>; waitForAllData(timeout: number, signal?: AbortSignal): Promise<TData>; waitForBlockAndAllData(timeout: number, signal?: AbortSignal): Promise<this>; } type BlockInputPreDataState = { hasBlock: true; hasAllData: true; block: SignedBeaconBlock<ForkPreDeneb>; source: SourceMeta; timeCompleteSec: number; }; /** * Pre-DA, BlockInput only has a single state. * - the block simply exists */ export declare class BlockInputPreData extends AbstractBlockInput<ForkPreDeneb, null> { type: DAType.PreData; state: BlockInputPreDataState; private constructor(); static createFromBlock(props: AddBlock & CreateBlockInputMeta): BlockInputPreData; addBlock(_: AddBlock): void; } export type ForkBlobsDA = ForkName.deneb | ForkName.electra; type BlockInputBlobsState = { hasBlock: true; hasAllData: true; versionedHashes: VersionedHashes; block: SignedBeaconBlock<ForkBlobsDA>; source: SourceMeta; timeCompleteSec: number; } | { hasBlock: true; hasAllData: false; versionedHashes: VersionedHashes; block: SignedBeaconBlock<ForkBlobsDA>; source: SourceMeta; } | { hasBlock: false; hasAllData: false; }; /** * With blobs, BlockInput has several states: * - The block is seen and all blobs are seen * - The block is seen and all blobs are not yet seen * - The block is yet not seen and its unknown if all blobs are seen */ export declare class BlockInputBlobs extends AbstractBlockInput<ForkBlobsDA, deneb.BlobSidecars> { type: DAType.Blobs; state: BlockInputBlobsState; private blobsCache; private constructor(); static createFromBlock(props: AddBlock<ForkBlobsDA> & CreateBlockInputMeta): BlockInputBlobs; static createFromBlob(props: AddBlob & CreateBlockInputMeta): BlockInputBlobs; getLogMeta(): LogMetaBlobs; addBlock({ blockRootHex, block, source }: AddBlock<ForkBlobsDA>): void; hasBlob(blobIndex: BlobIndex): boolean; addBlob({ blockRootHex, blobSidecar, source, peerIdStr, seenTimestampSec }: AddBlob): void; getVersionedHashes(): VersionedHashes; getMissingBlobMeta(): BlobMeta[]; getAllBlobsWithSource(): BlobWithSource[]; getBlobs(): deneb.BlobSidecars; } export type ForkColumnsDA = ForkName.fulu; type BlockInputColumnsState = { hasBlock: true; hasAllData: true; versionedHashes: VersionedHashes; block: SignedBeaconBlock<ForkColumnsDA>; source: SourceMeta; timeCompleteSec: number; } | { hasBlock: true; hasAllData: false; versionedHashes: VersionedHashes; block: SignedBeaconBlock<ForkColumnsDA>; source: SourceMeta; } | { hasBlock: false; hasAllData: true; versionedHashes: VersionedHashes; } | { hasBlock: false; hasAllData: false; versionedHashes: VersionedHashes; }; /** * With columns, BlockInput has several states: * - The block is seen and all required sampled columns are seen * - The block is seen and all required sampled columns are not yet seen * - The block is not yet seen and all required sampled columns are seen * - The block is not yet seen and all required sampled columns are not yet seen */ export declare class BlockInputColumns extends AbstractBlockInput<ForkColumnsDA, fulu.DataColumnSidecars> { type: DAType.Columns; state: BlockInputColumnsState; private columnsCache; private readonly sampledColumns; private readonly custodyColumns; private constructor(); static createFromBlock(props: AddBlock<ForkColumnsDA> & CreateBlockInputMeta & { sampledColumns: ColumnIndex[]; custodyColumns: ColumnIndex[]; }): BlockInputColumns; static createFromColumn(props: AddColumn & CreateBlockInputMeta & { sampledColumns: ColumnIndex[]; custodyColumns: ColumnIndex[]; }): BlockInputColumns; getLogMeta(): LogMetaColumns; addBlock(props: AddBlock<ForkColumnsDA>): void; addColumn({ blockRootHex, columnSidecar, source, seenTimestampSec, peerIdStr }: AddColumn): void; hasColumn(columnIndex: number): boolean; getVersionedHashes(): VersionedHashes; getCustodyColumns(): fulu.DataColumnSidecars; getSampledColumns(): fulu.DataColumnSidecars; getAllColumnsWithSource(): ColumnWithSource[]; getAllColumns(): fulu.DataColumnSidecars; getMissingSampledColumnMeta(): ColumnMeta[]; } export {}; //# sourceMappingURL=blockInput.d.ts.map