diff --git a/frame/staking/src/lib.rs b/frame/staking/src/lib.rs
index bd4fb21cb5213..aca68bd706654 100644
--- a/frame/staking/src/lib.rs
+++ b/frame/staking/src/lib.rs
@@ -303,7 +303,7 @@ use frame_support::{
};
use pallet_session::historical;
use sp_runtime::{
- Perbill, PerU16, PerThing, RuntimeDebug, DispatchError,
+ Percent, Perbill, PerU16, PerThing, RuntimeDebug, DispatchError,
curve::PiecewiseLinear,
traits::{
Convert, Zero, StaticLookup, CheckedSub, Saturating, SaturatedConversion, AtLeast32Bit,
@@ -1794,6 +1794,34 @@ decl_module! {
ValidatorCount::put(new);
}
+ /// Increments the ideal number of validators.
+ ///
+ /// The dispatch origin must be Root.
+ ///
+ /// #
+ /// Base Weight: 1.717 µs
+ /// Read/Write: Validator Count
+ /// #
+ #[weight = 2 * WEIGHT_PER_MICROS + T::DbWeight::get().reads_writes(1, 1)]
+ fn increase_validator_count(origin, #[compact] additional: u32) {
+ ensure_root(origin)?;
+ ValidatorCount::mutate(|n| *n += additional);
+ }
+
+ /// Scale up the ideal number of validators by a factor.
+ ///
+ /// The dispatch origin must be Root.
+ ///
+ /// #
+ /// Base Weight: 1.717 µs
+ /// Read/Write: Validator Count
+ /// #
+ #[weight = 2 * WEIGHT_PER_MICROS + T::DbWeight::get().reads_writes(1, 1)]
+ fn scale_validator_count(origin, factor: Percent) {
+ ensure_root(origin)?;
+ ValidatorCount::mutate(|n| *n += factor * *n);
+ }
+
/// Force there to be no new eras indefinitely.
///
/// The dispatch origin must be Root.