@lodestar/types
Version:
Typescript types required for lodestar
140 lines • 6.81 kB
JavaScript
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