Tidy epoch_processing
This commit is contained in:
parent
054be5b9b2
commit
79d1b15afc
@ -1,7 +1,7 @@
|
|||||||
use super::winning_root::WinningRoot;
|
use super::winning_root::WinningRoot;
|
||||||
use crate::{
|
use crate::{
|
||||||
validator::StatusFlags, validator_registry::get_active_validator_indices, Attestation,
|
validator::StatusFlags, validator_registry::get_active_validator_indices, AttestationData,
|
||||||
AttestationData, BeaconState, Bitfield, ChainSpec, Crosslink, Hash256, PendingAttestation,
|
BeaconState, Bitfield, ChainSpec, Crosslink, Hash256, PendingAttestation,
|
||||||
};
|
};
|
||||||
use integer_sqrt::IntegerSquareRoot;
|
use integer_sqrt::IntegerSquareRoot;
|
||||||
use std::collections::{HashMap, HashSet};
|
use std::collections::{HashMap, HashSet};
|
||||||
@ -34,7 +34,7 @@ impl BeaconState {
|
|||||||
get_active_validator_indices(&self.validator_registry, self.slot);
|
get_active_validator_indices(&self.validator_registry, self.slot);
|
||||||
let total_balance: u64 = active_validator_indices
|
let total_balance: u64 = active_validator_indices
|
||||||
.iter()
|
.iter()
|
||||||
.fold(0, |acc, i| self.get_effective_balance(*i, spec));
|
.fold(0, |acc, i| acc + self.get_effective_balance(*i, spec));
|
||||||
|
|
||||||
let current_epoch_attestations: Vec<&PendingAttestation> = self
|
let current_epoch_attestations: Vec<&PendingAttestation> = self
|
||||||
.latest_attestations
|
.latest_attestations
|
||||||
@ -240,25 +240,6 @@ impl BeaconState {
|
|||||||
.iter()
|
.iter()
|
||||||
.fold(0, |acc, i| acc + self.get_effective_balance(*i, spec));
|
.fold(0, |acc, i| acc + self.get_effective_balance(*i, spec));
|
||||||
|
|
||||||
let all_crosslink_committees: Vec<CrosslinkCommittees> = {
|
|
||||||
// TODO: check staturating sub is correct
|
|
||||||
let start_slot = self.slot.saturating_sub(2 * spec.epoch_length);
|
|
||||||
|
|
||||||
// Sub is safe due to previous line.
|
|
||||||
//
|
|
||||||
// TODO: provide detailed reasoning.
|
|
||||||
let mut committees = Vec::with_capacity((self.slot - start_slot) as usize);
|
|
||||||
for slot in start_slot..self.slot {
|
|
||||||
match self.get_crosslink_committees_at_slot(slot) {
|
|
||||||
Some(c) => committees.push(c),
|
|
||||||
None => return Err(Error::UnableToGetCrosslinkCommittees),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
committees
|
|
||||||
};
|
|
||||||
|
|
||||||
// TODO: I didn't include the `winning_balance` stuff.. Not sure why it's there.
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Eth1 Data
|
* Eth1 Data
|
||||||
*/
|
*/
|
||||||
@ -275,7 +256,8 @@ impl BeaconState {
|
|||||||
* Justification
|
* Justification
|
||||||
*/
|
*/
|
||||||
self.previous_justified_slot = self.justified_slot;
|
self.previous_justified_slot = self.justified_slot;
|
||||||
self.justification_bitfield = (self.justification_bitfield * 2) % u64::pow(2, 64);
|
let (new_bitfield, _) = self.justification_bitfield.overflowing_mul(2);
|
||||||
|
self.justification_bitfield = new_bitfield;
|
||||||
|
|
||||||
// If >= 2/3 of validators voted for the previous epoch boundary
|
// If >= 2/3 of validators voted for the previous epoch boundary
|
||||||
if (3 * previous_epoch_boundary_attesting_balance) >= (2 * total_balance) {
|
if (3 * previous_epoch_boundary_attesting_balance) >= (2 * total_balance) {
|
||||||
@ -337,7 +319,7 @@ impl BeaconState {
|
|||||||
if let Some(winning_root) = winning_root {
|
if let Some(winning_root) = winning_root {
|
||||||
let total_committee_balance: u64 = crosslink_committee
|
let total_committee_balance: u64 = crosslink_committee
|
||||||
.iter()
|
.iter()
|
||||||
.fold(0, |acc, i| self.get_effective_balance(*i, spec));
|
.fold(0, |acc, i| acc + self.get_effective_balance(*i, spec));
|
||||||
|
|
||||||
winning_root_for_shards.insert(shard, winning_root.clone());
|
winning_root_for_shards.insert(shard, winning_root.clone());
|
||||||
|
|
||||||
@ -546,7 +528,7 @@ impl BeaconState {
|
|||||||
};
|
};
|
||||||
|
|
||||||
if should_update_validator_registy {
|
if should_update_validator_registy {
|
||||||
self.update_validator_registry(total_balance, spec);
|
self.update_validator_registry(spec);
|
||||||
|
|
||||||
self.current_epoch_calculation_slot = self.slot;
|
self.current_epoch_calculation_slot = self.slot;
|
||||||
self.current_epoch_start_shard = (self.current_epoch_start_shard
|
self.current_epoch_start_shard = (self.current_epoch_start_shard
|
||||||
@ -596,7 +578,7 @@ impl BeaconState {
|
|||||||
get_active_validator_indices(&self.validator_registry, self.slot);
|
get_active_validator_indices(&self.validator_registry, self.slot);
|
||||||
let total_balance = active_validator_indices
|
let total_balance = active_validator_indices
|
||||||
.iter()
|
.iter()
|
||||||
.fold(0, |acc, i| self.get_effective_balance(*i, spec));
|
.fold(0, |acc, i| acc + self.get_effective_balance(*i, spec));
|
||||||
|
|
||||||
for index in 0..self.validator_balances.len() {
|
for index in 0..self.validator_balances.len() {
|
||||||
let validator = &self.validator_registry[index];
|
let validator = &self.validator_registry[index];
|
||||||
@ -609,7 +591,7 @@ impl BeaconState {
|
|||||||
let total_at_start = self.latest_penalized_balances
|
let total_at_start = self.latest_penalized_balances
|
||||||
[((e + 1) % spec.latest_penalized_exit_length) as usize];
|
[((e + 1) % spec.latest_penalized_exit_length) as usize];
|
||||||
let total_at_end = self.latest_penalized_balances[e as usize];
|
let total_at_end = self.latest_penalized_balances[e as usize];
|
||||||
let total_penalities = total_at_end.saturating_sub(total_at_end);
|
let total_penalities = total_at_end.saturating_sub(total_at_start);
|
||||||
let penalty = self.get_effective_balance(index, spec)
|
let penalty = self.get_effective_balance(index, spec)
|
||||||
* std::cmp::min(total_penalities * 3, total_balance)
|
* std::cmp::min(total_penalities * 3, total_balance)
|
||||||
/ total_balance;
|
/ total_balance;
|
||||||
@ -654,12 +636,12 @@ impl BeaconState {
|
|||||||
self.latest_randao_mixes[(slot & spec.latest_randao_mixes_length) as usize]
|
self.latest_randao_mixes[(slot & spec.latest_randao_mixes_length) as usize]
|
||||||
}
|
}
|
||||||
|
|
||||||
fn update_validator_registry(&mut self, total_balance: u64, spec: &ChainSpec) {
|
fn update_validator_registry(&mut self, spec: &ChainSpec) {
|
||||||
let active_validator_indices =
|
let active_validator_indices =
|
||||||
get_active_validator_indices(&self.validator_registry, self.slot);
|
get_active_validator_indices(&self.validator_registry, self.slot);
|
||||||
let total_balance = active_validator_indices
|
let total_balance = active_validator_indices
|
||||||
.iter()
|
.iter()
|
||||||
.fold(0, |acc, i| self.get_effective_balance(*i, spec));
|
.fold(0, |acc, i| acc + self.get_effective_balance(*i, spec));
|
||||||
|
|
||||||
let max_balance_churn = std::cmp::max(
|
let max_balance_churn = std::cmp::max(
|
||||||
spec.max_deposit,
|
spec.max_deposit,
|
||||||
@ -802,7 +784,7 @@ impl BeaconState {
|
|||||||
self.get_effective_balance(validator_index, spec) / base_reward_quotient / 5
|
self.get_effective_balance(validator_index, spec) / base_reward_quotient / 5
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_crosslink_committees_at_slot(&self, slot: u64) -> Option<CrosslinkCommittees> {
|
pub fn get_crosslink_committees_at_slot(&self, _slot: u64) -> Option<CrosslinkCommittees> {
|
||||||
Some(vec![(vec![0], 0)])
|
Some(vec![(vec![0], 0)])
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -831,7 +813,3 @@ impl BeaconState {
|
|||||||
|
|
||||||
type CrosslinkCommittee = (Vec<usize>, usize);
|
type CrosslinkCommittee = (Vec<usize>, usize);
|
||||||
type CrosslinkCommittees = Vec<CrosslinkCommittee>;
|
type CrosslinkCommittees = Vec<CrosslinkCommittee>;
|
||||||
|
|
||||||
fn merkle_root(_input: &[Hash256]) -> Hash256 {
|
|
||||||
Hash256::zero()
|
|
||||||
}
|
|
||||||
|
Loading…
Reference in New Issue
Block a user