# beacon_chain # Copyright (c) 2021-2024 Status Research & Development GmbH # Licensed and distributed under either of # * MIT license (license terms in the root directory or at https://opensource.org/licenses/MIT). # * Apache v2 license (license terms in the root directory or at https://www.apache.org/licenses/LICENSE-2.0). # at your option. This file may not be copied, modified, or distributed except according to those terms. {.push raises: [].} import ./spec/datatypes/[base, altair, bellatrix], ./spec/[eth2_ssz_serialization, eth2_merkleization] from ./spec/datatypes/capella import ExecutionPayloadHeader, HistoricalSummary, Withdrawal from ./spec/datatypes/deneb import ExecutionPayloadHeader from ./spec/datatypes/electra import ExecutionPayloadHeader, PendingConsolidation, PendingDeposit, PendingPartialWithdrawal from ./spec/datatypes/fulu import ExecutionPayloadHeader type # https://github.com/ethereum/consensus-specs/blob/v1.4.0/specs/phase0/beacon-chain.md#beaconstate # Memory-representation-equivalent to a phase0 BeaconState for in-place SSZ # reading and writing Phase0BeaconStateNoImmutableValidators* = object # Versioning genesis_time*: uint64 genesis_validators_root*: Eth2Digest slot*: Slot fork*: Fork # History latest_block_header*: BeaconBlockHeader ## `latest_block_header.state_root == ZERO_HASH` temporarily block_roots*: HashArray[Limit SLOTS_PER_HISTORICAL_ROOT, Eth2Digest] ## Needed to process attestations, older to newer state_roots*: HashArray[Limit SLOTS_PER_HISTORICAL_ROOT, Eth2Digest] historical_roots*: HashList[Eth2Digest, Limit HISTORICAL_ROOTS_LIMIT] # Eth1 eth1_data*: Eth1Data eth1_data_votes*: HashList[Eth1Data, Limit(EPOCHS_PER_ETH1_VOTING_PERIOD * SLOTS_PER_EPOCH)] eth1_deposit_index*: uint64 # Registry validators*: HashList[ValidatorStatus, Limit VALIDATOR_REGISTRY_LIMIT] balances*: HashList[Gwei, Limit VALIDATOR_REGISTRY_LIMIT] # Randomness randao_mixes*: HashArray[Limit EPOCHS_PER_HISTORICAL_VECTOR, Eth2Digest] # Slashings slashings*: HashArray[Limit EPOCHS_PER_SLASHINGS_VECTOR, Gwei] ## Per-epoch sums of slashed effective balances # Attestations previous_epoch_attestations*: HashList[PendingAttestation, Limit(MAX_ATTESTATIONS * SLOTS_PER_EPOCH)] current_epoch_attestations*: HashList[PendingAttestation, Limit(MAX_ATTESTATIONS * SLOTS_PER_EPOCH)] # Finality justification_bits*: JustificationBits ## Bit set for every recent justified epoch previous_justified_checkpoint*: Checkpoint ## Previous epoch snapshot current_justified_checkpoint*: Checkpoint finalized_checkpoint*: Checkpoint # https://github.com/ethereum/consensus-specs/blob/v1.4.0/specs/altair/beacon-chain.md#beaconstate # Memory-representation-equivalent to an Altair BeaconState for in-place SSZ # reading and writing AltairBeaconStateNoImmutableValidators* = object # Versioning genesis_time*: uint64 genesis_validators_root*: Eth2Digest slot*: Slot fork*: Fork # History latest_block_header*: BeaconBlockHeader ## `latest_block_header.state_root == ZERO_HASH` temporarily block_roots*: HashArray[Limit SLOTS_PER_HISTORICAL_ROOT, Eth2Digest] ## Needed to process attestations, older to newer state_roots*: HashArray[Limit SLOTS_PER_HISTORICAL_ROOT, Eth2Digest] historical_roots*: HashList[Eth2Digest, Limit HISTORICAL_ROOTS_LIMIT] # Eth1 eth1_data*: Eth1Data eth1_data_votes*: HashList[Eth1Data, Limit(EPOCHS_PER_ETH1_VOTING_PERIOD * SLOTS_PER_EPOCH)] eth1_deposit_index*: uint64 # Registry validators*: HashList[ValidatorStatus, Limit VALIDATOR_REGISTRY_LIMIT] balances*: HashList[Gwei, Limit VALIDATOR_REGISTRY_LIMIT] # Randomness randao_mixes*: HashArray[Limit EPOCHS_PER_HISTORICAL_VECTOR, Eth2Digest] # Slashings slashings*: HashArray[Limit EPOCHS_PER_SLASHINGS_VECTOR, Gwei] ## Per-epoch sums of slashed effective balances # Participation previous_epoch_participation*: EpochParticipationFlags ## [Modified in Altair] current_epoch_participation*: EpochParticipationFlags ## [Modified in Altair] # Finality justification_bits*: JustificationBits ## Bit set for every recent justified epoch previous_justified_checkpoint*: Checkpoint current_justified_checkpoint*: Checkpoint finalized_checkpoint*: Checkpoint # Inactivity inactivity_scores*: HashList[uint64, Limit VALIDATOR_REGISTRY_LIMIT] # [New in Altair] # Light client sync committees current_sync_committee*: SyncCommittee # [New in Altair] next_sync_committee*: SyncCommittee # [New in Altair] # https://github.com/ethereum/consensus-specs/blob/v1.5.0-alpha.8/specs/bellatrix/beacon-chain.md#beaconstate # Memory-representation-equivalent to a Bellatrix BeaconState for in-place SSZ # reading and writing BellatrixBeaconStateNoImmutableValidators* = object # Versioning genesis_time*: uint64 genesis_validators_root*: Eth2Digest slot*: Slot fork*: Fork # History latest_block_header*: BeaconBlockHeader ## `latest_block_header.state_root == ZERO_HASH` temporarily block_roots*: HashArray[Limit SLOTS_PER_HISTORICAL_ROOT, Eth2Digest] ## Needed to process attestations, older to newer state_roots*: HashArray[Limit SLOTS_PER_HISTORICAL_ROOT, Eth2Digest] historical_roots*: HashList[Eth2Digest, Limit HISTORICAL_ROOTS_LIMIT] # Eth1 eth1_data*: Eth1Data eth1_data_votes*: HashList[Eth1Data, Limit(EPOCHS_PER_ETH1_VOTING_PERIOD * SLOTS_PER_EPOCH)] eth1_deposit_index*: uint64 # Registry validators*: HashList[ValidatorStatus, Limit VALIDATOR_REGISTRY_LIMIT] balances*: HashList[Gwei, Limit VALIDATOR_REGISTRY_LIMIT] # Randomness randao_mixes*: HashArray[Limit EPOCHS_PER_HISTORICAL_VECTOR, Eth2Digest] # Slashings slashings*: HashArray[Limit EPOCHS_PER_SLASHINGS_VECTOR, Gwei] ## Per-epoch sums of slashed effective balances # Participation previous_epoch_participation*: EpochParticipationFlags current_epoch_participation*: EpochParticipationFlags # Finality justification_bits*: JustificationBits ## Bit set for every recent justified epoch previous_justified_checkpoint*: Checkpoint current_justified_checkpoint*: Checkpoint finalized_checkpoint*: Checkpoint # Inactivity inactivity_scores*: HashList[uint64, Limit VALIDATOR_REGISTRY_LIMIT] # Sync current_sync_committee*: SyncCommittee next_sync_committee*: SyncCommittee # Execution latest_execution_payload_header*: bellatrix.ExecutionPayloadHeader # [New in Bellatrix] # https://github.com/ethereum/consensus-specs/blob/v1.4.0-beta.5/specs/capella/beacon-chain.md#beaconstate # with indirect changes via ExecutionPayload # Memory-representation-equivalent to a Capella BeaconState for in-place SSZ # reading and writing CapellaBeaconStateNoImmutableValidators* = object # Versioning genesis_time*: uint64 genesis_validators_root*: Eth2Digest slot*: Slot fork*: Fork # History latest_block_header*: BeaconBlockHeader ## `latest_block_header.state_root == ZERO_HASH` temporarily block_roots*: HashArray[Limit SLOTS_PER_HISTORICAL_ROOT, Eth2Digest] ## Needed to process attestations, older to newer state_roots*: HashArray[Limit SLOTS_PER_HISTORICAL_ROOT, Eth2Digest] historical_roots*: HashList[Eth2Digest, Limit HISTORICAL_ROOTS_LIMIT] ## Frozen in Capella, replaced by historical_summaries # Eth1 eth1_data*: Eth1Data eth1_data_votes*: HashList[Eth1Data, Limit(EPOCHS_PER_ETH1_VOTING_PERIOD * SLOTS_PER_EPOCH)] eth1_deposit_index*: uint64 # Registry validators*: HashList[ValidatorStatusCapella, Limit VALIDATOR_REGISTRY_LIMIT] balances*: HashList[Gwei, Limit VALIDATOR_REGISTRY_LIMIT] # Randomness randao_mixes*: HashArray[Limit EPOCHS_PER_HISTORICAL_VECTOR, Eth2Digest] # Slashings slashings*: HashArray[Limit EPOCHS_PER_SLASHINGS_VECTOR, Gwei] ## Per-epoch sums of slashed effective balances # Participation previous_epoch_participation*: EpochParticipationFlags current_epoch_participation*: EpochParticipationFlags # Finality justification_bits*: JustificationBits ## Bit set for every recent justified epoch previous_justified_checkpoint*: Checkpoint current_justified_checkpoint*: Checkpoint finalized_checkpoint*: Checkpoint # Inactivity inactivity_scores*: HashList[uint64, Limit VALIDATOR_REGISTRY_LIMIT] # Light client sync committees current_sync_committee*: SyncCommittee next_sync_committee*: SyncCommittee # Execution latest_execution_payload_header*: capella.ExecutionPayloadHeader ## [Modified in Capella] # Withdrawals next_withdrawal_index*: WithdrawalIndex # [New in Capella] next_withdrawal_validator_index*: uint64 # [New in Capella] # Deep history valid from Capella onwards historical_summaries*: HashList[HistoricalSummary, Limit HISTORICAL_ROOTS_LIMIT] # [New in Capella] # https://github.com/ethereum/consensus-specs/blob/v1.4.0-beta.5/specs/capella/beacon-chain.md#beaconstate # with indirect changes via ExecutionPayloadHeader # Memory-representation-equivalent to a Deneb BeaconState for in-place SSZ # reading and writing DenebBeaconStateNoImmutableValidators* = object # Versioning genesis_time*: uint64 genesis_validators_root*: Eth2Digest slot*: Slot fork*: Fork # History latest_block_header*: BeaconBlockHeader ## `latest_block_header.state_root == ZERO_HASH` temporarily block_roots*: HashArray[Limit SLOTS_PER_HISTORICAL_ROOT, Eth2Digest] ## Needed to process attestations, older to newer state_roots*: HashArray[Limit SLOTS_PER_HISTORICAL_ROOT, Eth2Digest] historical_roots*: HashList[Eth2Digest, Limit HISTORICAL_ROOTS_LIMIT] ## Frozen in Capella, replaced by historical_summaries # Eth1 eth1_data*: Eth1Data eth1_data_votes*: HashList[Eth1Data, Limit(EPOCHS_PER_ETH1_VOTING_PERIOD * SLOTS_PER_EPOCH)] eth1_deposit_index*: uint64 # Registry validators*: HashList[ValidatorStatusCapella, Limit VALIDATOR_REGISTRY_LIMIT] balances*: HashList[Gwei, Limit VALIDATOR_REGISTRY_LIMIT] # Randomness randao_mixes*: HashArray[Limit EPOCHS_PER_HISTORICAL_VECTOR, Eth2Digest] # Slashings slashings*: HashArray[Limit EPOCHS_PER_SLASHINGS_VECTOR, Gwei] ## Per-epoch sums of slashed effective balances # Participation previous_epoch_participation*: EpochParticipationFlags current_epoch_participation*: EpochParticipationFlags # Finality justification_bits*: JustificationBits ## Bit set for every recent justified epoch previous_justified_checkpoint*: Checkpoint current_justified_checkpoint*: Checkpoint finalized_checkpoint*: Checkpoint # Inactivity inactivity_scores*: HashList[uint64, Limit VALIDATOR_REGISTRY_LIMIT] # Light client sync committees current_sync_committee*: SyncCommittee next_sync_committee*: SyncCommittee # Execution latest_execution_payload_header*: deneb.ExecutionPayloadHeader # Withdrawals next_withdrawal_index*: WithdrawalIndex next_withdrawal_validator_index*: uint64 # Deep history valid from Capella onwards historical_summaries*: HashList[HistoricalSummary, Limit HISTORICAL_ROOTS_LIMIT] # https://github.com/ethereum/consensus-specs/blob/v1.4.0-beta.5/specs/capella/beacon-chain.md#beaconstate # with indirect changes via ExecutionPayloadHeader # Memory-representation-equivalent to a Deneb BeaconState for in-place SSZ # reading and writing ElectraBeaconStateNoImmutableValidators* = object # Versioning genesis_time*: uint64 genesis_validators_root*: Eth2Digest slot*: Slot fork*: Fork # History latest_block_header*: BeaconBlockHeader ## `latest_block_header.state_root == ZERO_HASH` temporarily block_roots*: HashArray[Limit SLOTS_PER_HISTORICAL_ROOT, Eth2Digest] ## Needed to process attestations, older to newer state_roots*: HashArray[Limit SLOTS_PER_HISTORICAL_ROOT, Eth2Digest] historical_roots*: HashList[Eth2Digest, Limit HISTORICAL_ROOTS_LIMIT] ## Frozen in Capella, replaced by historical_summaries # Eth1 eth1_data*: Eth1Data eth1_data_votes*: HashList[Eth1Data, Limit(EPOCHS_PER_ETH1_VOTING_PERIOD * SLOTS_PER_EPOCH)] eth1_deposit_index*: uint64 # Registry validators*: HashList[ValidatorStatusCapella, Limit VALIDATOR_REGISTRY_LIMIT] balances*: HashList[Gwei, Limit VALIDATOR_REGISTRY_LIMIT] # Randomness randao_mixes*: HashArray[Limit EPOCHS_PER_HISTORICAL_VECTOR, Eth2Digest] # Slashings slashings*: HashArray[Limit EPOCHS_PER_SLASHINGS_VECTOR, Gwei] ## Per-epoch sums of slashed effective balances # Participation previous_epoch_participation*: EpochParticipationFlags current_epoch_participation*: EpochParticipationFlags # Finality justification_bits*: JustificationBits ## Bit set for every recent justified epoch previous_justified_checkpoint*: Checkpoint current_justified_checkpoint*: Checkpoint finalized_checkpoint*: Checkpoint # Inactivity inactivity_scores*: HashList[uint64, Limit VALIDATOR_REGISTRY_LIMIT] # Light client sync committees current_sync_committee*: SyncCommittee next_sync_committee*: SyncCommittee # Execution latest_execution_payload_header*: electra.ExecutionPayloadHeader # Withdrawals next_withdrawal_index*: WithdrawalIndex next_withdrawal_validator_index*: uint64 # Deep history valid from Capella onwards historical_summaries*: HashList[HistoricalSummary, Limit HISTORICAL_ROOTS_LIMIT] deposit_requests_start_index*: uint64 # [New in Electra:EIP6110] deposit_balance_to_consume*: Gwei # [New in Electra:EIP7251] exit_balance_to_consume*: Gwei # [New in Electra:EIP7251] earliest_exit_epoch*: Epoch # [New in Electra:EIP7251] consolidation_balance_to_consume*: Gwei # [New in Electra:EIP7251] earliest_consolidation_epoch*: Epoch # [New in Electra:EIP7251] pending_deposits*: HashList[PendingDeposit, Limit PENDING_DEPOSITS_LIMIT] ## [New in Electra:EIP7251] # [New in Electra:EIP7251] pending_partial_withdrawals*: HashList[PendingPartialWithdrawal, Limit PENDING_PARTIAL_WITHDRAWALS_LIMIT] pending_consolidations*: HashList[PendingConsolidation, Limit PENDING_CONSOLIDATIONS_LIMIT] ## [New in Electra:EIP7251] # Memory-representation-equivalent to a Fulu BeaconState for in-place SSZ # reading and writing FuluBeaconStateNoImmutableValidators* = object # Versioning genesis_time*: uint64 genesis_validators_root*: Eth2Digest slot*: Slot fork*: Fork # History latest_block_header*: BeaconBlockHeader ## `latest_block_header.state_root == ZERO_HASH` temporarily block_roots*: HashArray[Limit SLOTS_PER_HISTORICAL_ROOT, Eth2Digest] ## Needed to process attestations, older to newer state_roots*: HashArray[Limit SLOTS_PER_HISTORICAL_ROOT, Eth2Digest] historical_roots*: HashList[Eth2Digest, Limit HISTORICAL_ROOTS_LIMIT] ## Frozen in Capella, replaced by historical_summaries # Eth1 eth1_data*: Eth1Data eth1_data_votes*: HashList[Eth1Data, Limit(EPOCHS_PER_ETH1_VOTING_PERIOD * SLOTS_PER_EPOCH)] eth1_deposit_index*: uint64 # Registry validators*: HashList[ValidatorStatusCapella, Limit VALIDATOR_REGISTRY_LIMIT] balances*: HashList[Gwei, Limit VALIDATOR_REGISTRY_LIMIT] # Randomness randao_mixes*: HashArray[Limit EPOCHS_PER_HISTORICAL_VECTOR, Eth2Digest] # Slashings slashings*: HashArray[Limit EPOCHS_PER_SLASHINGS_VECTOR, Gwei] ## Per-epoch sums of slashed effective balances # Participation previous_epoch_participation*: EpochParticipationFlags current_epoch_participation*: EpochParticipationFlags # Finality justification_bits*: JustificationBits ## Bit set for every recent justified epoch previous_justified_checkpoint*: Checkpoint current_justified_checkpoint*: Checkpoint finalized_checkpoint*: Checkpoint # Inactivity inactivity_scores*: HashList[uint64, Limit VALIDATOR_REGISTRY_LIMIT] # Light client sync committees current_sync_committee*: SyncCommittee next_sync_committee*: SyncCommittee # Execution latest_execution_payload_header*: fulu.ExecutionPayloadHeader # Withdrawals next_withdrawal_index*: WithdrawalIndex next_withdrawal_validator_index*: uint64 # Deep history valid from Capella onwards historical_summaries*: HashList[HistoricalSummary, Limit HISTORICAL_ROOTS_LIMIT] deposit_requests_start_index*: uint64 # [New in Electra:EIP6110] deposit_balance_to_consume*: Gwei # [New in Electra:EIP7251] exit_balance_to_consume*: Gwei # [New in Electra:EIP7251] earliest_exit_epoch*: Epoch # [New in Electra:EIP7251] consolidation_balance_to_consume*: Gwei # [New in Electra:EIP7251] earliest_consolidation_epoch*: Epoch # [New in Electra:EIP7251] pending_deposits*: HashList[PendingDeposit, Limit PENDING_DEPOSITS_LIMIT] ## [New in Electra:EIP7251] # [New in Electra:EIP7251] pending_partial_withdrawals*: HashList[PendingPartialWithdrawal, Limit PENDING_PARTIAL_WITHDRAWALS_LIMIT] pending_consolidations*: HashList[PendingConsolidation, Limit PENDING_CONSOLIDATIONS_LIMIT] ## [New in Electra:EIP7251]