actually commit `stable.nim`
This commit is contained in:
parent
d222f11edf
commit
c2777513bb
|
@ -0,0 +1,205 @@
|
|||
# beacon_chain
|
||||
# Copyright (c) 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
|
||||
ssz_serialization,
|
||||
./base
|
||||
|
||||
export base
|
||||
|
||||
const
|
||||
# https://eips.ethereum.org/EIPS/eip-7688
|
||||
MAX_ATTESTATION_FIELDS* = 8
|
||||
MAX_INDEXED_ATTESTATION_FIELDS* = 8
|
||||
MAX_EXECUTION_PAYLOAD_FIELDS* = 64
|
||||
MAX_BEACON_BLOCK_BODY_FIELDS* = 64
|
||||
MAX_BEACON_STATE_FIELDS* = 128
|
||||
|
||||
type
|
||||
# https://eips.ethereum.org/EIPS/eip-7688
|
||||
StableAttestation* {.
|
||||
sszStableContainer: MAX_ATTESTATION_FIELDS.} = object
|
||||
aggregation_bits*: Opt[ElectraCommitteeValidatorsBits]
|
||||
data*: Opt[AttestationData]
|
||||
signature*: Opt[ValidatorSig]
|
||||
committee_bits*: Opt[AttestationCommitteeBits]
|
||||
|
||||
StableIndexedAttestation* {.
|
||||
sszStableContainer: MAX_INDEXED_ATTESTATION_FIELDS.} = object
|
||||
attesting_indices*: Opt[List[uint64,
|
||||
Limit MAX_VALIDATORS_PER_COMMITTEE * MAX_COMMITTEES_PER_SLOT]]
|
||||
data*: Opt[AttestationData]
|
||||
signature*: Opt[ValidatorSig]
|
||||
|
||||
StableAttesterSlashing* = object
|
||||
attestation_1*: StableIndexedAttestation
|
||||
attestation_2*: StableIndexedAttestation
|
||||
|
||||
StableExecutionPayload* {.
|
||||
sszStableContainer: MAX_EXECUTION_PAYLOAD_FIELDS.} = object
|
||||
# Execution block header fields
|
||||
parent_hash*: Opt[Eth2Digest]
|
||||
fee_recipient*: Opt[ExecutionAddress]
|
||||
## 'beneficiary' in the yellow paper
|
||||
state_root*: Opt[Eth2Digest]
|
||||
receipts_root*: Opt[Eth2Digest]
|
||||
logs_bloom*: Opt[BloomLogs]
|
||||
prev_randao*: Opt[Eth2Digest]
|
||||
## 'difficulty' in the yellow paper
|
||||
block_number*: Opt[uint64]
|
||||
## 'number' in the yellow paper
|
||||
gas_limit*: Opt[uint64]
|
||||
gas_used*: Opt[uint64]
|
||||
timestamp*: Opt[uint64]
|
||||
extra_data*: Opt[List[byte, MAX_EXTRA_DATA_BYTES]]
|
||||
base_fee_per_gas*: Opt[UInt256]
|
||||
|
||||
# Extra payload fields
|
||||
block_hash*: Opt[Eth2Digest] # Hash of execution block
|
||||
transactions*: Opt[List[Transaction, MAX_TRANSACTIONS_PER_PAYLOAD]]
|
||||
withdrawals*: Opt[List[Withdrawal, MAX_WITHDRAWALS_PER_PAYLOAD]]
|
||||
blob_gas_used*: Opt[uint64]
|
||||
excess_blob_gas*: Opt[uint64]
|
||||
deposit_receipts*: Opt[List[DepositReceipt,
|
||||
MAX_DEPOSIT_RECEIPTS_PER_PAYLOAD]]
|
||||
withdrawal_requests*: Opt[List[ExecutionLayerWithdrawalRequest,
|
||||
MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD]]
|
||||
|
||||
StableExecutionPayloadHeader* {.
|
||||
sszStableContainer: MAX_EXECUTION_PAYLOAD_FIELDS.} = object
|
||||
# Execution block header fields
|
||||
parent_hash*: Opt[Eth2Digest]
|
||||
fee_recipient*: Opt[ExecutionAddress]
|
||||
state_root*: Opt[Eth2Digest]
|
||||
receipts_root*: Opt[Eth2Digest]
|
||||
logs_bloom*: Opt[BloomLogs]
|
||||
prev_randao*: Opt[Eth2Digest]
|
||||
block_number*: Opt[uint64]
|
||||
gas_limit*: Opt[uint64]
|
||||
gas_used*: Opt[uint64]
|
||||
timestamp*: Opt[uint64]
|
||||
extra_data*: Opt[List[byte, MAX_EXTRA_DATA_BYTES]]
|
||||
base_fee_per_gas*: Opt[UInt256]
|
||||
|
||||
# Extra payload fields
|
||||
block_hash*: Opt[Eth2Digest]
|
||||
## Hash of execution block
|
||||
transactions_root*: Opt[Eth2Digest]
|
||||
withdrawals_root*: Opt[Eth2Digest]
|
||||
blob_gas_used*: Opt[uint64]
|
||||
excess_blob_gas*: Opt[uint64]
|
||||
deposit_receipts_root*: Opt[Eth2Digest]
|
||||
withdrawal_requests_root*: Opt[Eth2Digest]
|
||||
|
||||
StableBeaconBlockBody* {.
|
||||
sszStableContainer: MAX_BEACON_BLOCK_BODY_FIELDS.} = object
|
||||
randao_reveal*: Opt[ValidatorSig]
|
||||
eth1_data*: Opt[Eth1Data]
|
||||
## Eth1 data vote
|
||||
|
||||
graffiti*: Opt[GraffitiBytes]
|
||||
## Arbitrary data
|
||||
|
||||
# Operations
|
||||
proposer_slashings*: Opt[List[ProposerSlashing,
|
||||
Limit MAX_PROPOSER_SLASHINGS]]
|
||||
attester_slashings*: Opt[List[StableAttesterSlashing,
|
||||
Limit MAX_ATTESTER_SLASHINGS_ELECTRA]]
|
||||
attestations*: Opt[List[StableAttestation, Limit MAX_ATTESTATIONS_ELECTRA]]
|
||||
deposits*: Opt[List[Deposit, Limit MAX_DEPOSITS]]
|
||||
voluntary_exits*: Opt[List[SignedVoluntaryExit, Limit MAX_VOLUNTARY_EXITS]]
|
||||
|
||||
sync_aggregate*: Opt[SyncAggregate]
|
||||
|
||||
# Execution
|
||||
execution_payload*: Opt[StableExecutionPayload]
|
||||
bls_to_execution_changes*: Opt[SignedBLSToExecutionChangeList]
|
||||
blob_kzg_commitments*: Opt[KzgCommitments]
|
||||
consolidations*: Opt[List[SignedConsolidation, Limit MAX_CONSOLIDATIONS]]
|
||||
|
||||
StableBeaconState* {.
|
||||
sszStableContainer: MAX_BEACON_STATE_FIELDS.} = object
|
||||
# Versioning
|
||||
genesis_time*: Opt[uint64]
|
||||
genesis_validators_root*: Opt[Eth2Digest]
|
||||
slot*: Opt[Slot]
|
||||
fork*: Opt[Fork]
|
||||
|
||||
# History
|
||||
latest_block_header*: Opt[BeaconBlockHeader]
|
||||
## `latest_block_header.state_root == ZERO_HASH` temporarily
|
||||
|
||||
block_roots*: Opt[HashArray[Limit SLOTS_PER_HISTORICAL_ROOT, Eth2Digest]]
|
||||
## Needed to process attestations, older to newer
|
||||
|
||||
state_roots*: Opt[HashArray[Limit SLOTS_PER_HISTORICAL_ROOT, Eth2Digest]]
|
||||
historical_roots*: Opt[HashList[Eth2Digest, Limit HISTORICAL_ROOTS_LIMIT]]
|
||||
## Frozen in Capella, replaced by historical_summaries
|
||||
|
||||
# Eth1
|
||||
eth1_data*: Opt[Eth1Data]
|
||||
eth1_data_votes*: Opt[HashList[Eth1Data,
|
||||
Limit(EPOCHS_PER_ETH1_VOTING_PERIOD * SLOTS_PER_EPOCH)]]
|
||||
eth1_deposit_index*: uint64
|
||||
|
||||
# Registry
|
||||
validators*: Opt[HashList[Validator, Limit VALIDATOR_REGISTRY_LIMIT]]
|
||||
balances*: Opt[HashList[Gwei, Limit VALIDATOR_REGISTRY_LIMIT]]
|
||||
|
||||
# Randomness
|
||||
randao_mixes*: Opt[HashArray[
|
||||
Limit EPOCHS_PER_HISTORICAL_VECTOR, Eth2Digest]]
|
||||
|
||||
# Slashings
|
||||
slashings*: Opt[HashArray[Limit EPOCHS_PER_SLASHINGS_VECTOR, Gwei]]
|
||||
## Per-epoch sums of slashed effective balances
|
||||
|
||||
# Participation
|
||||
previous_epoch_participation*: Opt[EpochParticipationFlags]
|
||||
current_epoch_participation*: Opt[EpochParticipationFlags]
|
||||
|
||||
# Finality
|
||||
justification_bits*: Opt[JustificationBits]
|
||||
## Bit set for every recent justified epoch
|
||||
|
||||
previous_justified_checkpoint*: Opt[Checkpoint]
|
||||
current_justified_checkpoint*: Opt[Checkpoint]
|
||||
finalized_checkpoint*: Opt[Checkpoint]
|
||||
|
||||
# Inactivity
|
||||
inactivity_scores*: Opt[InactivityScores]
|
||||
|
||||
# Light client sync committees
|
||||
current_sync_committee*: Opt[SyncCommittee]
|
||||
next_sync_committee*: Opt[SyncCommittee]
|
||||
|
||||
# Execution
|
||||
latest_execution_payload_header*: Opt[StableExecutionPayloadHeader]
|
||||
|
||||
# Withdrawals
|
||||
next_withdrawal_index*: Opt[WithdrawalIndex]
|
||||
next_withdrawal_validator_index*: Opt[uint64]
|
||||
|
||||
# Deep history valid from Capella onwards
|
||||
historical_summaries*:
|
||||
Opt[HashList[HistoricalSummary, Limit HISTORICAL_ROOTS_LIMIT]]
|
||||
|
||||
deposit_receipts_start_index*: Opt[uint64]
|
||||
deposit_balance_to_consume*: Opt[Gwei]
|
||||
exit_balance_to_consume*: Opt[Gwei]
|
||||
earliest_exit_epoch*: Opt[Epoch]
|
||||
consolidation_balance_to_consume*: Opt[Gwei]
|
||||
earliest_consolidation_epoch*: Opt[Epoch]
|
||||
pending_balance_deposits*: Opt[HashList[PendingBalanceDeposit,
|
||||
Limit PENDING_BALANCE_DEPOSITS_LIMIT]]
|
||||
|
||||
pending_partial_withdrawals*: Opt[HashList[PendingPartialWithdrawal,
|
||||
Limit PENDING_PARTIAL_WITHDRAWALS_LIMIT]]
|
||||
pending_consolidations*: Opt[HashList[PendingConsolidation,
|
||||
Limit PENDING_CONSOLIDATIONS_LIMIT]]
|
Loading…
Reference in New Issue