mirror of
https://gitlab.com/pulsechaincom/lighthouse-pulse.git
synced 2025-01-07 11:32:21 +00:00
816c2c651b
- Removed BeaconStateBuilder - Added genesis code to `state_processing`.
60 lines
1.9 KiB
Rust
60 lines
1.9 KiB
Rust
use super::per_block_processing::{errors::BlockProcessingError, process_deposits};
|
|
use ssz::TreeHash;
|
|
use types::*;
|
|
|
|
pub enum GenesisError {
|
|
BlockProcessingError(BlockProcessingError),
|
|
BeaconStateError(BeaconStateError),
|
|
}
|
|
|
|
/// Returns the genesis `BeaconState`
|
|
///
|
|
/// Spec v0.5.0
|
|
pub fn get_genesis_state(
|
|
genesis_validator_deposits: &[Deposit],
|
|
genesis_time: u64,
|
|
genesis_eth1_data: Eth1Data,
|
|
spec: &ChainSpec,
|
|
) -> Result<(), BlockProcessingError> {
|
|
// Get the genesis `BeaconState`
|
|
let mut state = BeaconState::genesis(genesis_time, genesis_eth1_data, spec);
|
|
|
|
// Process genesis deposits.
|
|
process_deposits(&mut state, genesis_validator_deposits, spec)?;
|
|
|
|
// Process genesis activations.
|
|
for i in 0..state.validator_registry.len() {
|
|
if state.get_effective_balance(i, spec)? >= spec.max_deposit_amount {
|
|
state.validator_registry[i].activation_epoch = spec.genesis_epoch;
|
|
}
|
|
}
|
|
|
|
// Ensure the current epoch cache is built.
|
|
state.build_epoch_cache(RelativeEpoch::Current, spec)?;
|
|
|
|
// Set all the active index roots to be the genesis active index root.
|
|
let active_validator_indices = state
|
|
.get_active_validator_indices(spec.genesis_epoch, spec)?
|
|
.to_vec();
|
|
let genesis_active_index_root = Hash256::from_slice(&active_validator_indices.hash_tree_root());
|
|
state.latest_active_index_roots =
|
|
vec![genesis_active_index_root; spec.latest_active_index_roots_length as usize];
|
|
|
|
// Generate the current shuffling seed.
|
|
state.current_shuffling_seed = state.generate_seed(spec.genesis_epoch, spec)?;
|
|
|
|
Ok(())
|
|
}
|
|
|
|
impl From<BlockProcessingError> for GenesisError {
|
|
fn from(e: BlockProcessingError) -> GenesisError {
|
|
GenesisError::BlockProcessingError(e)
|
|
}
|
|
}
|
|
|
|
impl From<BeaconStateError> for GenesisError {
|
|
fn from(e: BeaconStateError) -> GenesisError {
|
|
GenesisError::BeaconStateError(e)
|
|
}
|
|
}
|