From 606c32950d5ae1166bcf5900a39dcdef0ad17ede Mon Sep 17 00:00:00 2001 From: Paul Hauner Date: Sat, 20 Oct 2018 13:08:43 +1100 Subject: [PATCH] Move shuffling functions around - Move `delegation` from the `transition` dir into its own dir: `beacon_chain/validator_shuffling` - Rename `beacon_chain/utils/shuffling` -> `vec_shuffle` --- Cargo.toml | 4 +-- beacon_chain/transition/src/delegation/mod.rs | 6 ---- beacon_chain/transition/src/lib.rs | 10 ------ .../{shuffling => vec_shuffle}/Cargo.toml | 2 +- .../{shuffling => vec_shuffle}/src/lib.rs | 0 .../{shuffling => vec_shuffle}/src/rng.rs | 0 beacon_chain/validator_induction/src/lib.rs | 4 +++ .../Cargo.toml | 6 ++-- .../src/active_validator_indices.rs | 19 +++++++++++ beacon_chain/validator_shuffling/src/lib.rs | 8 +++++ .../src/shuffle.rs} | 33 +++++++------------ 11 files changed, 49 insertions(+), 43 deletions(-) delete mode 100644 beacon_chain/transition/src/delegation/mod.rs delete mode 100644 beacon_chain/transition/src/lib.rs rename beacon_chain/utils/{shuffling => vec_shuffle}/Cargo.toml (85%) rename beacon_chain/utils/{shuffling => vec_shuffle}/src/lib.rs (100%) rename beacon_chain/utils/{shuffling => vec_shuffle}/src/rng.rs (100%) rename beacon_chain/{transition => validator_shuffling}/Cargo.toml (52%) create mode 100644 beacon_chain/validator_shuffling/src/active_validator_indices.rs create mode 100644 beacon_chain/validator_shuffling/src/lib.rs rename beacon_chain/{transition/src/delegation/validator.rs => validator_shuffling/src/shuffle.rs} (92%) diff --git a/Cargo.toml b/Cargo.toml index 55bd4de532..0ac7299298 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -33,15 +33,15 @@ name = "lighthouse" [workspace] members = [ "beacon_chain/types", - "beacon_chain/transition", "beacon_chain/utils/bls", "beacon_chain/utils/boolean-bitfield", "beacon_chain/utils/hashing", "beacon_chain/utils/honey-badger-split", - "beacon_chain/utils/shuffling", "beacon_chain/utils/ssz", "beacon_chain/utils/ssz_helpers", + "beacon_chain/utils/vec_shuffle", "beacon_chain/validation", "beacon_chain/validator_induction", + "beacon_chain/validator_shuffling", "lighthouse/db", ] diff --git a/beacon_chain/transition/src/delegation/mod.rs b/beacon_chain/transition/src/delegation/mod.rs deleted file mode 100644 index 66f3304f3a..0000000000 --- a/beacon_chain/transition/src/delegation/mod.rs +++ /dev/null @@ -1,6 +0,0 @@ -use super::honey_badger_split; -use super::types; -use super::TransitionError; -use super::shuffling::shuffle; - -pub mod validator; diff --git a/beacon_chain/transition/src/lib.rs b/beacon_chain/transition/src/lib.rs deleted file mode 100644 index ccac525291..0000000000 --- a/beacon_chain/transition/src/lib.rs +++ /dev/null @@ -1,10 +0,0 @@ -extern crate honey_badger_split; -extern crate types; -extern crate shuffling; - -pub mod delegation; - -#[derive(Debug)] -pub enum TransitionError { - InvalidInput(String), -} diff --git a/beacon_chain/utils/shuffling/Cargo.toml b/beacon_chain/utils/vec_shuffle/Cargo.toml similarity index 85% rename from beacon_chain/utils/shuffling/Cargo.toml rename to beacon_chain/utils/vec_shuffle/Cargo.toml index df0a108eea..4fa29288a2 100644 --- a/beacon_chain/utils/shuffling/Cargo.toml +++ b/beacon_chain/utils/vec_shuffle/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "shuffling" +name = "vec_shuffle" version = "0.1.0" authors = ["Paul Hauner "] diff --git a/beacon_chain/utils/shuffling/src/lib.rs b/beacon_chain/utils/vec_shuffle/src/lib.rs similarity index 100% rename from beacon_chain/utils/shuffling/src/lib.rs rename to beacon_chain/utils/vec_shuffle/src/lib.rs diff --git a/beacon_chain/utils/shuffling/src/rng.rs b/beacon_chain/utils/vec_shuffle/src/rng.rs similarity index 100% rename from beacon_chain/utils/shuffling/src/rng.rs rename to beacon_chain/utils/vec_shuffle/src/rng.rs diff --git a/beacon_chain/validator_induction/src/lib.rs b/beacon_chain/validator_induction/src/lib.rs index 6c5bf11a96..4a3d9bb0a1 100644 --- a/beacon_chain/validator_induction/src/lib.rs +++ b/beacon_chain/validator_induction/src/lib.rs @@ -10,3 +10,7 @@ pub use inductor::{ ValidatorInductor, ValidatorInductionError, }; + +pub use registration::{ + ValidatorRegistration, +}; diff --git a/beacon_chain/transition/Cargo.toml b/beacon_chain/validator_shuffling/Cargo.toml similarity index 52% rename from beacon_chain/transition/Cargo.toml rename to beacon_chain/validator_shuffling/Cargo.toml index c17d6994fd..ba99841b80 100644 --- a/beacon_chain/transition/Cargo.toml +++ b/beacon_chain/validator_shuffling/Cargo.toml @@ -1,9 +1,9 @@ [package] -name = "transition" +name = "validator_shuffling" version = "0.1.0" -authors = ["Age Manning "] +authors = ["Paul Hauner "] [dependencies] honey-badger-split = { path = "../utils/honey-badger-split" } types = { path = "../types" } -shuffling = { path = "../utils/shuffling" } +vec_shuffle = { path = "../utils/vec_shuffle" } diff --git a/beacon_chain/validator_shuffling/src/active_validator_indices.rs b/beacon_chain/validator_shuffling/src/active_validator_indices.rs new file mode 100644 index 0000000000..1a6b7b99a1 --- /dev/null +++ b/beacon_chain/validator_shuffling/src/active_validator_indices.rs @@ -0,0 +1,19 @@ +use types::{ + ValidatorRecord, + ValidatorStatus, +}; + +/// Returns the indicies of each active validator in a given vec of validators. +pub fn active_validator_indices(validators: &[ValidatorRecord]) + -> Vec +{ + validators.iter() + .enumerate() + .filter_map(|(i, validator)| { + match validator.status { + x if x == ValidatorStatus::Active as u8 => Some(i), + _ => None + } + }) + .collect() +} diff --git a/beacon_chain/validator_shuffling/src/lib.rs b/beacon_chain/validator_shuffling/src/lib.rs new file mode 100644 index 0000000000..a11483e560 --- /dev/null +++ b/beacon_chain/validator_shuffling/src/lib.rs @@ -0,0 +1,8 @@ +extern crate honey_badger_split; +extern crate vec_shuffle; +extern crate types; + +mod active_validator_indices; +mod shuffle; + +pub use shuffle::shard_and_committees_for_cycle; diff --git a/beacon_chain/transition/src/delegation/validator.rs b/beacon_chain/validator_shuffling/src/shuffle.rs similarity index 92% rename from beacon_chain/transition/src/delegation/validator.rs rename to beacon_chain/validator_shuffling/src/shuffle.rs index ab7c06b643..1ce778a6b0 100644 --- a/beacon_chain/transition/src/delegation/validator.rs +++ b/beacon_chain/validator_shuffling/src/shuffle.rs @@ -1,29 +1,20 @@ -use super::honey_badger_split::SplitExt; -use super::types::{ +use std::cmp::min; + +use honey_badger_split::SplitExt; +use vec_shuffle::shuffle; +use types::{ ShardAndCommittee, ValidatorRecord, - ValidatorStatus, ChainConfig, }; -use super::TransitionError; -use super::shuffle; -use std::cmp::min; + +use super::active_validator_indices::active_validator_indices; type DelegatedCycle = Vec>; -/// Returns the indicies of each active validator in a given vec of validators. -fn active_validator_indicies(validators: &[ValidatorRecord]) - -> Vec -{ - validators.iter() - .enumerate() - .filter_map(|(i, validator)| { - match validator.status { - x if x == ValidatorStatus::Active as u8 => Some(i), - _ => None - } - }) - .collect() +#[derive(Debug)] +pub enum TransitionError { + InvalidInput(String), } @@ -31,7 +22,7 @@ fn active_validator_indicies(validators: &[ValidatorRecord]) /// Returns a vector or ShardAndComitte vectors representing the shards and committiees for /// each slot. /// References get_new_shuffling (ethereum 2.1 specification) -pub fn delegate_validators( +pub fn shard_and_committees_for_cycle( seed: &[u8], validators: &[ValidatorRecord], crosslinking_shard_start: u16, @@ -39,7 +30,7 @@ pub fn delegate_validators( -> Result { let shuffled_validator_indices = { - let mut validator_indices = active_validator_indicies(validators); + let mut validator_indices = active_validator_indices(validators); match shuffle(seed, validator_indices) { Ok(shuffled) => shuffled, _ => return Err(TransitionError::InvalidInput(