@lodestar/types
Version:
Typescript types required for lodestar
168 lines • 8.48 kB
JavaScript
import { ContainerType, ListCompositeType, VectorCompositeType } from "@chainsafe/ssz";
import { EPOCHS_PER_SYNC_COMMITTEE_PERIOD, BLOCK_BODY_EXECUTION_PAYLOAD_DEPTH as EXECUTION_PAYLOAD_DEPTH, HISTORICAL_ROOTS_LIMIT, MAX_BLS_TO_EXECUTION_CHANGES, MAX_WITHDRAWALS_PER_PAYLOAD, SLOTS_PER_EPOCH, } from "@lodestar/params";
import { ssz as altairSsz } from "../altair/index.js";
import { ssz as bellatrixSsz } from "../bellatrix/index.js";
import { ssz as phase0Ssz } from "../phase0/index.js";
import { ssz as primitiveSsz } from "../primitive/index.js";
const { UintNum64, Slot, ValidatorIndex, WithdrawalIndex, Root, BLSSignature, BLSPubkey, ExecutionAddress, Gwei, UintBn256, Bytes32, } = primitiveSsz;
export const ExecutionBranch = new VectorCompositeType(Bytes32, EXECUTION_PAYLOAD_DEPTH);
export const Withdrawal = new ContainerType({
index: WithdrawalIndex,
validatorIndex: ValidatorIndex,
address: ExecutionAddress,
amount: Gwei,
}, { typeName: "Withdrawal", jsonCase: "eth2" });
export const BLSToExecutionChange = new ContainerType({
validatorIndex: ValidatorIndex,
fromBlsPubkey: BLSPubkey,
toExecutionAddress: ExecutionAddress,
}, { typeName: "BLSToExecutionChange", jsonCase: "eth2" });
export const SignedBLSToExecutionChange = new ContainerType({
message: BLSToExecutionChange,
signature: BLSSignature,
}, { typeName: "SignedBLSToExecutionChange", jsonCase: "eth2" });
export const Withdrawals = new ListCompositeType(Withdrawal, MAX_WITHDRAWALS_PER_PAYLOAD);
export const ExecutionPayload = new ContainerType({
...bellatrixSsz.ExecutionPayload.fields,
withdrawals: Withdrawals, // New in capella
}, { typeName: "ExecutionPayload", jsonCase: "eth2" });
export const ExecutionPayloadHeader = new ContainerType({
...bellatrixSsz.ExecutionPayloadHeader.fields,
withdrawalsRoot: Root, // New in capella
}, { typeName: "ExecutionPayloadHeader", jsonCase: "eth2" });
export const BLSToExecutionChanges = new ListCompositeType(SignedBLSToExecutionChange, MAX_BLS_TO_EXECUTION_CHANGES);
export const BeaconBlockBody = new ContainerType({
...altairSsz.BeaconBlockBody.fields,
executionPayload: ExecutionPayload, // Modified in capella
blsToExecutionChanges: BLSToExecutionChanges,
}, { typeName: "BeaconBlockBody", jsonCase: "eth2", cachePermanentRootStruct: true });
export const BeaconBlock = new ContainerType({
slot: Slot,
proposerIndex: ValidatorIndex,
// Reclare expandedType() with altair block and altair state
parentRoot: Root,
stateRoot: Root,
body: BeaconBlockBody, // Modified in Capella
}, { typeName: "BeaconBlock", jsonCase: "eth2", cachePermanentRootStruct: true });
export const SignedBeaconBlock = new ContainerType({
message: BeaconBlock, // Modified in capella
signature: BLSSignature,
}, { typeName: "SignedBeaconBlock", jsonCase: "eth2" });
export const BuilderBid = new ContainerType({
header: ExecutionPayloadHeader,
value: UintBn256,
pubkey: BLSPubkey,
}, { typeName: "BuilderBid", jsonCase: "eth2" });
export const SignedBuilderBid = new ContainerType({
message: BuilderBid,
signature: BLSSignature,
}, { typeName: "SignedBuilderBid", jsonCase: "eth2" });
export const HistoricalSummary = new ContainerType({
blockSummaryRoot: Root,
stateSummaryRoot: Root,
}, { typeName: "HistoricalSummary", jsonCase: "eth2" });
export const HistoricalSummaries = new ListCompositeType(HistoricalSummary, HISTORICAL_ROOTS_LIMIT, {
typeName: "HistoricalSummaries",
});
// we don't reuse bellatrix.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: primitiveSsz.Slot,
fork: phase0Ssz.Fork,
// History
latestBlockHeader: phase0Ssz.BeaconBlockHeader,
blockRoots: phase0Ssz.HistoricalBlockRoots,
stateRoots: phase0Ssz.HistoricalStateRoots,
// historical_roots Frozen in Capella, replaced by historical_summaries
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: altairSsz.EpochParticipation,
currentEpochParticipation: altairSsz.EpochParticipation,
// Finality
justificationBits: phase0Ssz.JustificationBits,
previousJustifiedCheckpoint: phase0Ssz.Checkpoint,
currentJustifiedCheckpoint: phase0Ssz.Checkpoint,
finalizedCheckpoint: phase0Ssz.Checkpoint,
// Inactivity
inactivityScores: altairSsz.InactivityScores,
// Sync
currentSyncCommittee: altairSsz.SyncCommittee,
nextSyncCommittee: altairSsz.SyncCommittee,
// Execution
latestExecutionPayloadHeader: ExecutionPayloadHeader, // [Modified in Capella]
// Withdrawals
nextWithdrawalIndex: WithdrawalIndex, // [New in Capella]
nextWithdrawalValidatorIndex: ValidatorIndex, // [New in Capella]
// Deep history valid from Capella onwards
historicalSummaries: HistoricalSummaries, // [New in Capella]
}, { typeName: "BeaconState", jsonCase: "eth2" });
export const BlindedBeaconBlockBody = new ContainerType({
...altairSsz.BeaconBlockBody.fields,
executionPayloadHeader: ExecutionPayloadHeader, // Modified in capella
blsToExecutionChanges: BLSToExecutionChanges, // New in capella
}, { typeName: "BlindedBeaconBlockBody", jsonCase: "eth2", cachePermanentRootStruct: true });
export const BlindedBeaconBlock = new ContainerType({
...bellatrixSsz.BlindedBeaconBlock.fields,
body: BlindedBeaconBlockBody, // Modified in capella
}, { typeName: "BlindedBeaconBlock", jsonCase: "eth2", cachePermanentRootStruct: true });
export const SignedBlindedBeaconBlock = new ContainerType({
message: BlindedBeaconBlock, // Modified in capella
signature: BLSSignature,
}, { typeName: "SignedBlindedBeaconBlock", jsonCase: "eth2" });
export const LightClientHeader = new ContainerType({
beacon: phase0Ssz.BeaconBlockHeader,
execution: ExecutionPayloadHeader,
executionBranch: ExecutionBranch,
}, { typeName: "LightClientHeader", jsonCase: "eth2" });
export const LightClientBootstrap = new ContainerType({
header: LightClientHeader,
currentSyncCommittee: altairSsz.SyncCommittee,
currentSyncCommitteeBranch: altairSsz.LightClientBootstrap.fields.currentSyncCommitteeBranch,
}, { typeName: "LightClientBootstrap", jsonCase: "eth2" });
export const LightClientUpdate = new ContainerType({
attestedHeader: LightClientHeader,
nextSyncCommittee: altairSsz.SyncCommittee,
nextSyncCommitteeBranch: altairSsz.LightClientUpdate.fields.nextSyncCommitteeBranch,
finalizedHeader: LightClientHeader,
finalityBranch: altairSsz.LightClientUpdate.fields.finalityBranch,
syncAggregate: altairSsz.SyncAggregate,
signatureSlot: Slot,
}, { typeName: "LightClientUpdate", jsonCase: "eth2" });
export const LightClientFinalityUpdate = new ContainerType({
attestedHeader: LightClientHeader,
finalizedHeader: LightClientHeader,
finalityBranch: altairSsz.LightClientFinalityUpdate.fields.finalityBranch,
syncAggregate: altairSsz.SyncAggregate,
signatureSlot: Slot,
}, { typeName: "LightClientFinalityUpdate", jsonCase: "eth2" });
export const LightClientOptimisticUpdate = new ContainerType({
attestedHeader: LightClientHeader,
syncAggregate: altairSsz.SyncAggregate,
signatureSlot: Slot,
}, { typeName: "LightClientOptimisticUpdate", 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" });
// PayloadAttributes primarily for SSE event
export const PayloadAttributes = new ContainerType({
...bellatrixSsz.PayloadAttributes.fields,
withdrawals: Withdrawals,
}, { typeName: "PayloadAttributes", jsonCase: "eth2" });
export const SSEPayloadAttributes = new ContainerType({
...bellatrixSsz.SSEPayloadAttributesCommon.fields,
payloadAttributes: PayloadAttributes,
}, { typeName: "SSEPayloadAttributes", jsonCase: "eth2" });
//# sourceMappingURL=sszTypes.js.map