UNPKG

@lodestar/types

Version:

Typescript types required for lodestar

140 lines • 6.81 kB
import { BitVectorType, ContainerType, ListBasicType, ListCompositeType, VectorCompositeType } from "@chainsafe/ssz"; import { CURRENT_SYNC_COMMITTEE_DEPTH, EPOCHS_PER_SYNC_COMMITTEE_PERIOD, FINALIZED_ROOT_DEPTH, HISTORICAL_ROOTS_LIMIT, NEXT_SYNC_COMMITTEE_DEPTH, SLOTS_PER_EPOCH, SYNC_COMMITTEE_SIZE, SYNC_COMMITTEE_SUBNET_COUNT, VALIDATOR_REGISTRY_LIMIT, } from "@lodestar/params"; import * as phase0Ssz from "../phase0/sszTypes.js"; import * as primitiveSsz from "../primitive/sszTypes.js"; const { Bytes32, UintNum64, UintBn64, Slot, SubcommitteeIndex, ValidatorIndex, Root, BLSPubkey, BLSSignature, ParticipationFlags, } = primitiveSsz; export const SyncSubnets = new BitVectorType(SYNC_COMMITTEE_SUBNET_COUNT); export const FinalityBranch = new VectorCompositeType(Bytes32, FINALIZED_ROOT_DEPTH); export const CurrentSyncCommitteeBranch = new VectorCompositeType(Bytes32, CURRENT_SYNC_COMMITTEE_DEPTH); export const NextSyncCommitteeBranch = new VectorCompositeType(Bytes32, NEXT_SYNC_COMMITTEE_DEPTH); export const Metadata = new ContainerType({ seqNumber: UintBn64, attnets: phase0Ssz.AttestationSubnets, syncnets: SyncSubnets, }, { typeName: "Metadata", jsonCase: "eth2" }); export const SyncCommittee = new ContainerType({ pubkeys: new VectorCompositeType(BLSPubkey, SYNC_COMMITTEE_SIZE), aggregatePubkey: BLSPubkey, }, { typeName: "SyncCommittee", jsonCase: "eth2" }); export const SyncCommitteeMessage = new ContainerType({ slot: Slot, beaconBlockRoot: Root, validatorIndex: ValidatorIndex, signature: BLSSignature, }, { typeName: "SyncCommitteeMessage", jsonCase: "eth2" }); export const SyncCommitteeContribution = new ContainerType({ slot: Slot, beaconBlockRoot: Root, subcommitteeIndex: SubcommitteeIndex, aggregationBits: new BitVectorType(SYNC_COMMITTEE_SIZE / SYNC_COMMITTEE_SUBNET_COUNT), signature: BLSSignature, }, { typeName: "SyncCommitteeContribution", jsonCase: "eth2" }); export const ContributionAndProof = new ContainerType({ aggregatorIndex: ValidatorIndex, contribution: SyncCommitteeContribution, selectionProof: BLSSignature, }, { typeName: "ContributionAndProof", jsonCase: "eth2", cachePermanentRootStruct: true }); export const SignedContributionAndProof = new ContainerType({ message: ContributionAndProof, signature: BLSSignature, }, { typeName: "SignedContributionAndProof", jsonCase: "eth2" }); export const SyncAggregatorSelectionData = new ContainerType({ slot: Slot, subcommitteeIndex: SubcommitteeIndex, }, { typeName: "SyncAggregatorSelectionData", jsonCase: "eth2" }); export const SyncCommitteeBits = new BitVectorType(SYNC_COMMITTEE_SIZE); export const SyncAggregate = new ContainerType({ syncCommitteeBits: SyncCommitteeBits, syncCommitteeSignature: BLSSignature, }, { typeName: "SyncCommitteeBits", jsonCase: "eth2" }); export const BeaconBlockBody = new ContainerType({ ...phase0Ssz.BeaconBlockBody.fields, syncAggregate: SyncAggregate, }, { typeName: "BeaconBlockBody", jsonCase: "eth2", cachePermanentRootStruct: true }); export const BeaconBlock = new ContainerType({ slot: Slot, proposerIndex: ValidatorIndex, parentRoot: Root, stateRoot: Root, body: BeaconBlockBody, }, { typeName: "BeaconBlock", jsonCase: "eth2", cachePermanentRootStruct: true }); export const SignedBeaconBlock = new ContainerType({ message: BeaconBlock, signature: BLSSignature, }, { typeName: "SignedBeaconBlock", jsonCase: "eth2" }); export const EpochParticipation = new ListBasicType(ParticipationFlags, VALIDATOR_REGISTRY_LIMIT); export const InactivityScores = new ListBasicType(UintNum64, VALIDATOR_REGISTRY_LIMIT); // we don't reuse phase0.BeaconState fields since we need to replace some keys // and we cannot keep order doing that export const BeaconState = new ContainerType({ genesisTime: UintNum64, genesisValidatorsRoot: Root, slot: Slot, fork: phase0Ssz.Fork, // History latestBlockHeader: phase0Ssz.BeaconBlockHeader, blockRoots: phase0Ssz.HistoricalBlockRoots, stateRoots: phase0Ssz.HistoricalStateRoots, historicalRoots: new ListCompositeType(Root, HISTORICAL_ROOTS_LIMIT), // Eth1 eth1Data: phase0Ssz.Eth1Data, eth1DataVotes: phase0Ssz.Eth1DataVotes, eth1DepositIndex: UintNum64, // Registry validators: phase0Ssz.Validators, balances: phase0Ssz.Balances, randaoMixes: phase0Ssz.RandaoMixes, // Slashings slashings: phase0Ssz.Slashings, // Participation previousEpochParticipation: EpochParticipation, currentEpochParticipation: EpochParticipation, // Finality justificationBits: phase0Ssz.JustificationBits, previousJustifiedCheckpoint: phase0Ssz.Checkpoint, currentJustifiedCheckpoint: phase0Ssz.Checkpoint, finalizedCheckpoint: phase0Ssz.Checkpoint, // Inactivity inactivityScores: InactivityScores, // Sync currentSyncCommittee: SyncCommittee, nextSyncCommittee: SyncCommittee, }, { typeName: "BeaconState", jsonCase: "eth2" }); export const LightClientHeader = new ContainerType({ beacon: phase0Ssz.BeaconBlockHeader, }, { typeName: "LightClientHeader", jsonCase: "eth2" }); export const LightClientBootstrap = new ContainerType({ header: LightClientHeader, currentSyncCommittee: SyncCommittee, currentSyncCommitteeBranch: CurrentSyncCommitteeBranch, }, { typeName: "LightClientBootstrap", jsonCase: "eth2" }); export const LightClientUpdate = new ContainerType({ attestedHeader: LightClientHeader, nextSyncCommittee: SyncCommittee, nextSyncCommitteeBranch: NextSyncCommitteeBranch, finalizedHeader: LightClientHeader, finalityBranch: FinalityBranch, syncAggregate: SyncAggregate, signatureSlot: Slot, }, { typeName: "LightClientUpdate", jsonCase: "eth2" }); export const LightClientFinalityUpdate = new ContainerType({ attestedHeader: LightClientHeader, finalizedHeader: LightClientHeader, finalityBranch: FinalityBranch, syncAggregate: SyncAggregate, signatureSlot: Slot, }, { typeName: "LightClientFinalityUpdate", jsonCase: "eth2" }); export const LightClientOptimisticUpdate = new ContainerType({ attestedHeader: LightClientHeader, syncAggregate: SyncAggregate, signatureSlot: Slot, }, { typeName: "LightClientOptimisticUpdate", jsonCase: "eth2" }); export const LightClientUpdatesByRange = new ContainerType({ startPeriod: UintNum64, count: UintNum64, }, { typeName: "LightClientUpdatesByRange", jsonCase: "eth2" }); export const LightClientStore = new ContainerType({ snapshot: LightClientBootstrap, validUpdates: new ListCompositeType(LightClientUpdate, EPOCHS_PER_SYNC_COMMITTEE_PERIOD * SLOTS_PER_EPOCH), }, { typeName: "LightClientStore", jsonCase: "eth2" }); //# sourceMappingURL=sszTypes.js.map