UNPKG

@lodestar/beacon-node

Version:

A Typescript implementation of the beacon chain

234 lines • 9.74 kB
import { ForkName, ForkPostGloas, 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, ColumnWithSource, CreateBlockInputMeta, DAData, DAType, IBlockInput, LogMetaBasic, LogMetaBlobs, LogMetaColumns, MissingColumnMeta, PromiseParts, SourceMeta } from "./types.js"; export type BlockInput = BlockInputPreData | BlockInputBlobs | BlockInputColumns | BlockInputNoData; 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; export declare function isBlockInputNoData(blockInput: IBlockInput): blockInput is BlockInputNoData; 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; abstract getSerializedCacheKeys(): object[]; 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, opts?: { throwOnDuplicateAdd: boolean; }): void; getSerializedCacheKeys(): object[]; } 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, seenTimestampSec, peerIdStr }: AddBlock<ForkBlobsDA>, opts?: { throwOnDuplicateAdd: boolean; }): void; hasBlob(blobIndex: BlobIndex): boolean; getBlob(blobIndex: BlobIndex): deneb.BlobSidecar | undefined; addBlob({ blockRootHex, blobSidecar, source, peerIdStr, seenTimestampSec }: AddBlob, opts?: { throwOnDuplicateAdd: boolean; }): void; getVersionedHashes(): VersionedHashes; getMissingBlobMeta(): BlobMeta[]; getAllBlobsWithSource(): BlobWithSource[]; getBlobs(): deneb.BlobSidecars; getSerializedCacheKeys(): object[]; } export type ForkColumnsDA = ForkName.fulu; type BlockInputColumnsState = { hasBlock: true; hasAllData: true; hasComputedAllData: boolean; versionedHashes: VersionedHashes; block: SignedBeaconBlock<ForkColumnsDA>; source: SourceMeta; timeCompleteSec: number; } | { hasBlock: true; hasAllData: false; hasComputedAllData: false; versionedHashes: VersionedHashes; block: SignedBeaconBlock<ForkColumnsDA>; source: SourceMeta; } | { hasBlock: false; hasAllData: true; hasComputedAllData: boolean; versionedHashes: VersionedHashes; } | { hasBlock: false; hasAllData: false; hasComputedAllData: 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.DataColumnSidecar[]> { type: DAType.Columns; state: BlockInputColumnsState; private columnsCache; private readonly sampledColumns; private readonly custodyColumns; /** * This promise resolves when all sampled columns are available * * This is different from `dataPromise` which resolves when all data is available or could become available (e.g. through reconstruction) */ protected computedDataPromise: PromiseParts<import("@chainsafe/ssz").ValueOfFields<{ index: import("@chainsafe/ssz").UintNumberType; column: import("@chainsafe/ssz").ListCompositeType<import("@chainsafe/ssz").ByteVectorType>; kzgCommitments: import("@chainsafe/ssz").ListCompositeType<import("@chainsafe/ssz").ByteVectorType>; kzgProofs: import("@chainsafe/ssz").ListCompositeType<import("@chainsafe/ssz").ByteVectorType>; signedBlockHeader: import("@chainsafe/ssz").ContainerType<{ message: import("@chainsafe/ssz").ContainerType<{ slot: import("@chainsafe/ssz").UintNumberType; proposerIndex: import("@chainsafe/ssz").UintNumberType; parentRoot: import("@chainsafe/ssz").ByteVectorType; stateRoot: import("@chainsafe/ssz").ByteVectorType; bodyRoot: import("@chainsafe/ssz").ByteVectorType; }>; signature: import("@chainsafe/ssz").ByteVectorType; }>; kzgCommitmentsInclusionProof: import("@chainsafe/ssz").VectorCompositeType<import("@chainsafe/ssz").ByteVectorType>; }>[]>; private constructor(); get columnCount(): number; 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>, opts?: { throwOnDuplicateAdd: boolean; }): void; addColumn({ blockRootHex, columnSidecar, source, seenTimestampSec, peerIdStr }: AddColumn, opts?: { throwOnDuplicateAdd: boolean; }): void; hasColumn(columnIndex: number): boolean; getColumn(columnIndex: number): fulu.DataColumnSidecar | undefined; getVersionedHashes(): VersionedHashes; getCustodyColumns(): fulu.DataColumnSidecar[]; getSampledColumnsWithSource(): ColumnWithSource[]; getSampledColumns(): fulu.DataColumnSidecar[]; getAllColumnsWithSource(): ColumnWithSource[]; getAllColumns(): fulu.DataColumnSidecar[]; /** * Strictly checks missing sampled columns. Does NOT short-circuit on `state.hasAllData`. */ getMissingSampledColumnMeta(): MissingColumnMeta; hasComputedAllData(): boolean; waitForComputedAllData(timeout: number, signal?: AbortSignal): Promise<fulu.DataColumnSidecar[]>; getSerializedCacheKeys(): object[]; } type BlockInputNoDataState = { hasBlock: true; hasAllData: true; block: SignedBeaconBlock<ForkPostGloas>; source: SourceMeta; timeCompleteSec: number; }; export declare class BlockInputNoData extends AbstractBlockInput<ForkPostGloas, null> { type: DAType.NoData; state: BlockInputNoDataState; private constructor(); static createFromBlock(props: AddBlock<ForkPostGloas> & CreateBlockInputMeta): BlockInputNoData; addBlock(_: AddBlock<ForkPostGloas>, opts?: { throwOnDuplicateAdd: boolean; }): void; getBlobKzgCommitments(): deneb.BlobKzgCommitments; getSerializedCacheKeys(): object[]; } export {}; //# sourceMappingURL=blockInput.d.ts.map