Implement compute_new_active_state()
This commit is contained in:
parent
3bca5e1d0f
commit
1fa54a60fb
@ -1,3 +1,5 @@
|
|||||||
|
extern crate rlp;
|
||||||
|
|
||||||
use super::bytes;
|
use super::bytes;
|
||||||
use super::config;
|
use super::config;
|
||||||
use super::utils;
|
use super::utils;
|
||||||
@ -7,8 +9,11 @@ use super::aggregate_vote;
|
|||||||
use super::crystallized_state;
|
use super::crystallized_state;
|
||||||
use super::crosslink_record;
|
use super::crosslink_record;
|
||||||
use super::partial_crosslink_record;
|
use super::partial_crosslink_record;
|
||||||
|
use super::recent_proposer_record;
|
||||||
use super::validator_record;
|
use super::validator_record;
|
||||||
|
use super::block;
|
||||||
|
|
||||||
|
pub mod new_active_state;
|
||||||
pub mod crosslinks;
|
pub mod crosslinks;
|
||||||
pub mod deposits;
|
pub mod deposits;
|
||||||
pub mod epoch;
|
pub mod epoch;
|
||||||
|
77
src/state/transition/new_active_state.rs
Normal file
77
src/state/transition/new_active_state.rs
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
use std::ops::BitXor;
|
||||||
|
|
||||||
|
use super::active_state::ActiveState;
|
||||||
|
use super::crystallized_state::CrystallizedState;
|
||||||
|
use super::recent_proposer_record::RecentPropserRecord;
|
||||||
|
use super::block::Block;
|
||||||
|
use super::utils::types::Sha256Digest;
|
||||||
|
use super::config::Config;
|
||||||
|
use super::rlp;
|
||||||
|
|
||||||
|
use super::attestors::{
|
||||||
|
process_attestations,
|
||||||
|
get_attesters_and_proposer
|
||||||
|
};
|
||||||
|
use super::ffg::update_ffg_and_crosslink_progress;
|
||||||
|
|
||||||
|
pub fn compute_new_active_state(
|
||||||
|
cry_state: &CrystallizedState,
|
||||||
|
act_state: &ActiveState,
|
||||||
|
parent_block: &Block,
|
||||||
|
block: &Block,
|
||||||
|
config: &Config)
|
||||||
|
-> ActiveState
|
||||||
|
{
|
||||||
|
let (attestation_indicies, proposer) = get_attesters_and_proposer(
|
||||||
|
&cry_state,
|
||||||
|
&act_state,
|
||||||
|
&block.skip_count,
|
||||||
|
&config);
|
||||||
|
|
||||||
|
let parent_block_rlp = rlp::encode(parent_block);
|
||||||
|
let attesters_option = process_attestations(
|
||||||
|
&cry_state.active_validators,
|
||||||
|
&attestation_indicies,
|
||||||
|
&block.attestation_bitfield,
|
||||||
|
&parent_block_rlp.to_vec(),
|
||||||
|
&block.attestation_aggregate_sig);
|
||||||
|
|
||||||
|
// TODO: bls verify signature here.
|
||||||
|
|
||||||
|
let (partial_crosslinks, ffg_voter_bitfield, total_new_voters) =
|
||||||
|
update_ffg_and_crosslink_progress(
|
||||||
|
&cry_state,
|
||||||
|
&act_state.partial_crosslinks,
|
||||||
|
&act_state.ffg_voter_bitfield,
|
||||||
|
&block.shard_aggregate_votes,
|
||||||
|
&config);
|
||||||
|
|
||||||
|
let attesters = match attesters_option {
|
||||||
|
None => panic!("No attestors available"),
|
||||||
|
Some(x) => x
|
||||||
|
};
|
||||||
|
|
||||||
|
let proposer = RecentPropserRecord {
|
||||||
|
index: proposer,
|
||||||
|
randao_commitment: Sha256Digest::zero(),
|
||||||
|
balance_delta: (attesters.len() + total_new_voters) as i64
|
||||||
|
};
|
||||||
|
|
||||||
|
let height = act_state.height + 1;
|
||||||
|
let randao = act_state.randao.bitxor(block.randao_reveal);
|
||||||
|
let mut recent_attesters = act_state.recent_attesters.to_vec();
|
||||||
|
recent_attesters.extend_from_slice(&attesters);
|
||||||
|
let total_skip_count = act_state.total_skip_count + block.skip_count;
|
||||||
|
let mut recent_proposers = act_state.recent_proposers.to_vec();
|
||||||
|
recent_proposers.push(proposer);
|
||||||
|
|
||||||
|
ActiveState {
|
||||||
|
height,
|
||||||
|
randao,
|
||||||
|
ffg_voter_bitfield,
|
||||||
|
recent_attesters,
|
||||||
|
partial_crosslinks,
|
||||||
|
total_skip_count,
|
||||||
|
recent_proposers
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user