diff --git a/substrate/srml/staking/src/lib.rs b/substrate/srml/staking/src/lib.rs index cd5abdc6af..50b67332ac 100644 --- a/substrate/srml/staking/src/lib.rs +++ b/substrate/srml/staking/src/lib.rs @@ -48,6 +48,7 @@ extern crate srml_system as system; extern crate srml_timestamp as timestamp; use rstd::prelude::*; +use rstd::cmp; use runtime_support::{Parameter, StorageValue, StorageMap}; use runtime_support::dispatch::Result; use session::OnSessionChange; @@ -484,9 +485,10 @@ impl Module { intentions.sort_unstable_by(|&(ref b1, _), &(ref b2, _)| b2.cmp(&b1)); + let desired_validator_count = >::get() as usize; >::put( if !intentions.is_empty() { - let n = >::get() as usize; + let n = cmp::min(desired_validator_count, intentions.len()); (intentions[0].0, intentions[n - 1].0) } else { (Zero::zero(), Zero::zero()) @@ -494,7 +496,7 @@ impl Module { ); let vals = &intentions.into_iter() .map(|(_, v)| v) - .take(>::get() as usize) + .take(desired_validator_count) .collect::>(); for v in >::validators().iter() { >::remove(v);