Allow epoch cache with zero validators.

This commit is contained in:
Paul Hauner 2019-03-17 23:32:27 +11:00
parent 979353f136
commit 191761f356
No known key found for this signature in database
GPG Key ID: D362883A9218FCC6
4 changed files with 16 additions and 18 deletions

View File

@ -3,11 +3,8 @@ use hashing::hash;
use merkle_proof::verify_merkle_proof;
use ssz::ssz_encode;
use ssz_derive::Encode;
use std::collections::HashMap;
use types::*;
pub type PublicKeyValidatorIndexHashmap = HashMap<PublicKey, u64>;
/// Indicates if a `Deposit` is valid to be included in a block in the current epoch of the given
/// state.
///

View File

@ -14,7 +14,7 @@ pub fn process_validator_registry(state: &mut BeaconState, spec: &ChainSpec) ->
state.previous_shuffling_seed = state.current_shuffling_seed;
if should_update_validator_registry(state, spec)? {
state.update_validator_registry(spec);
state.update_validator_registry(spec)?;
state.current_shuffling_epoch = next_epoch;
state.current_shuffling_start_shard = (state.current_shuffling_start_shard
@ -37,7 +37,7 @@ pub fn process_validator_registry(state: &mut BeaconState, spec: &ChainSpec) ->
}
}
state.process_slashings(spec);
state.process_slashings(spec)?;
state.process_exit_queue(spec);
Ok(())

View File

@ -7,7 +7,6 @@ use swap_or_not_shuffle::shuffle_list;
#[derive(Debug, PartialEq)]
pub enum Error {
UnableToShuffle,
NoValidators { epoch: Epoch },
UnableToGenerateSeed,
}
@ -259,17 +258,19 @@ impl EpochCrosslinkCommitteesBuilder {
}
pub fn build(self, spec: &ChainSpec) -> Result<EpochCrosslinkCommittees, Error> {
if self.active_validator_indices.is_empty() {
return Err(Error::NoValidators { epoch: self.epoch });
}
let shuffled_active_validator_indices = shuffle_list(
self.active_validator_indices,
spec.shuffle_round_count,
&self.shuffling_seed[..],
true,
)
.ok_or_else(|| Error::UnableToShuffle)?;
// The shuffler fails on a empty list, so if there are no active validator indices, simply
// return an empty list.
let shuffled_active_validator_indices = if self.active_validator_indices.is_empty() {
vec![]
} else {
shuffle_list(
self.active_validator_indices,
spec.shuffle_round_count,
&self.shuffling_seed[..],
true,
)
.ok_or_else(|| Error::UnableToShuffle)?
};
let mut committees: Vec<Vec<usize>> = shuffled_active_validator_indices
.honey_badger_split(self.committees_per_epoch as usize)

View File

@ -134,7 +134,7 @@ impl TestingBeaconStateBuilder {
state.validator_registry = validators;
state.validator_balances = balances;
debug!("BeaconState built.");
debug!("BeaconState initialized.");
Self { state, keypairs }
}