UNPKG

@lodestar/types

Version:

Typescript types required for lodestar

155 lines (137 loc) 4.5 kB
import { ByteVectorType, ContainerType, ListBasicType, ListCompositeType, VectorBasicType, VectorCompositeType, } from "@chainsafe/ssz"; import { BYTES_PER_FIELD_ELEMENT, FIELD_ELEMENTS_PER_CELL, FIELD_ELEMENTS_PER_EXT_BLOB, KZG_COMMITMENTS_INCLUSION_PROOF_DEPTH, MAX_BLOB_COMMITMENTS_PER_BLOCK, MIN_SEED_LOOKAHEAD, NUMBER_OF_COLUMNS, SLOTS_PER_EPOCH, } from "@lodestar/params"; import {ssz as altairSsz} from "../altair/index.js"; import {ssz as denebSsz} from "../deneb/index.js"; import {ssz as electraSsz} from "../electra/index.js"; import {ssz as phase0Ssz} from "../phase0/index.js"; import {ssz as primitiveSsz} from "../primitive/index.js"; const {Root, ColumnIndex, RowIndex, Bytes32, Slot, UintNum64, ValidatorIndex} = primitiveSsz; export const KZGProof = denebSsz.KZGProof; export const Blob = denebSsz.Blob; export const Metadata = new ContainerType( { ...altairSsz.Metadata.fields, custodyGroupCount: UintNum64, }, {typeName: "Metadata", jsonCase: "eth2"} ); export const Status = new ContainerType( { ...phase0Ssz.Status.fields, earliestAvailableSlot: Slot, }, {typeName: "Status", jsonCase: "eth2"} ); export const Cell = new ByteVectorType(BYTES_PER_FIELD_ELEMENT * FIELD_ELEMENTS_PER_CELL); export const DataColumn = new ListCompositeType(Cell, MAX_BLOB_COMMITMENTS_PER_BLOCK); export const DataColumns = new ListCompositeType(DataColumn, NUMBER_OF_COLUMNS); export const ExtendedMatrix = new ListCompositeType(Cell, MAX_BLOB_COMMITMENTS_PER_BLOCK * NUMBER_OF_COLUMNS); export const KzgCommitmentsInclusionProof = new VectorCompositeType(Bytes32, KZG_COMMITMENTS_INCLUSION_PROOF_DEPTH); export const KZGProofs = new ListCompositeType( denebSsz.KZGProof, FIELD_ELEMENTS_PER_EXT_BLOB * MAX_BLOB_COMMITMENTS_PER_BLOCK ); export const ProposerLookahead = new VectorBasicType(ValidatorIndex, (MIN_SEED_LOOKAHEAD + 1) * SLOTS_PER_EPOCH); export const DataColumnSidecar = new ContainerType( { index: ColumnIndex, column: DataColumn, kzgCommitments: denebSsz.BlobKzgCommitments, kzgProofs: denebSsz.KZGProofs, signedBlockHeader: phase0Ssz.SignedBeaconBlockHeader, kzgCommitmentsInclusionProof: KzgCommitmentsInclusionProof, }, {typeName: "DataColumnSidecar", jsonCase: "eth2"} ); export const DataColumnSidecars = new ListCompositeType(DataColumnSidecar, NUMBER_OF_COLUMNS); export const MatrixEntry = new ContainerType( { cell: Cell, kzgProof: denebSsz.KZGProof, columnIndex: ColumnIndex, rowIndex: RowIndex, }, {typeName: "MatrixEntry", jsonCase: "eth2"} ); // ReqResp types // ============= export const DataColumnsByRootIdentifier = new ContainerType( { blockRoot: Root, columns: new ListBasicType(ColumnIndex, NUMBER_OF_COLUMNS), }, {typeName: "DataColumnsByRootIdentifier", jsonCase: "eth2"} ); export const DataColumnSidecarsByRangeRequest = new ContainerType( { startSlot: Slot, count: UintNum64, columns: new ListBasicType(ColumnIndex, NUMBER_OF_COLUMNS), }, {typeName: "DataColumnSidecarsByRangeRequest", jsonCase: "eth2"} ); export const BeaconBlocksByHeadRequest = new ContainerType( { beaconRoot: Root, count: UintNum64, }, {typeName: "BeaconBlocksByHeadRequest", jsonCase: "eth2"} ); // Explicit aliases for a few common types export const BeaconBlock = electraSsz.BeaconBlock; export const SignedBeaconBlock = electraSsz.SignedBeaconBlock; // Containers export const BlobsBundle = new ContainerType( { commitments: denebSsz.BlobKzgCommitments, proofs: KZGProofs, blobs: denebSsz.Blobs, }, {typeName: "BlobsBundle", jsonCase: "eth2"} ); export const ExecutionPayloadAndBlobsBundle = new ContainerType( { executionPayload: electraSsz.ExecutionPayload, blobsBundle: BlobsBundle, }, {typeName: "ExecutionPayloadAndBlobsBundle", jsonCase: "eth2"} ); export const BeaconState = new ContainerType( { ...electraSsz.BeaconState.fields, proposerLookahead: ProposerLookahead, // New in FULU:EIP7917 }, {typeName: "BeaconState", jsonCase: "eth2"} ); export const BlockContents = new ContainerType( { block: electraSsz.BeaconBlock, kzgProofs: KZGProofs, blobs: denebSsz.Blobs, }, {typeName: "BlockContents", jsonCase: "eth2"} ); export const SignedBlockContents = new ContainerType( { signedBlock: electraSsz.SignedBeaconBlock, kzgProofs: KZGProofs, blobs: denebSsz.Blobs, }, {typeName: "SignedBlockContents", jsonCase: "eth2"} );