#![cfg_attr(not(feature = "std"), no_std)]
#![allow(clippy::manual_inspect)]
pub use pallet::*;
#[cfg(test)]
mod mock;
#[cfg(test)]
mod tests;
#[polkadot_sdk::frame_support::pallet]
pub mod pallet {
use super::*;
use polkadot_sdk::pallet_balances;
use polkadot_sdk::{frame_support, frame_system};
use polkadot_sdk::{pallet_staking, sp_runtime};
use frame_support::pallet_prelude::*;
use frame_system::pallet_prelude::*;
use frame_system::{RawOrigin, WeightInfo as SystemWeights};
#[cfg(feature = "develop")]
use pallet_balances::WeightInfo as BalancesWeights;
use pallet_staking::{ConfigOp, WeightInfo as StakingWeights};
use sp_runtime::{Perbill, Percent};
#[cfg(feature = "develop")]
use sp_runtime::traits::StaticLookup;
type CurrencyBalanceOf<T> = <T as pallet_staking::Config>::CurrencyBalance;
#[pallet::pallet]
pub struct Pallet<T>(_);
#[pallet::config]
pub trait Config:
polkadot_sdk::frame_system::Config + pallet_balances::Config + pallet_staking::Config
{
type SystemAdmin: EnsureOrigin<Self::RuntimeOrigin>;
type StakingAdmin: EnsureOrigin<Self::RuntimeOrigin>;
#[cfg(feature = "develop")]
type BalancesAdmin: EnsureOrigin<Self::RuntimeOrigin>;
}
#[pallet::call]
impl<T: Config> Pallet<T> {
#[pallet::call_index(0)]
#[pallet::weight(<T as frame_system::Config>::SystemWeightInfo::authorize_upgrade())]
pub fn authorize_upgrade(origin: OriginFor<T>, code_hash: T::Hash) -> DispatchResult {
T::SystemAdmin::ensure_origin(origin)?;
frame_system::Pallet::<T>::authorize_upgrade(RawOrigin::Root.into(), code_hash)
}
#[pallet::call_index(1)]
#[pallet::weight(<T as pallet_staking::Config>::WeightInfo::force_new_era())]
pub fn force_new_era(origin: OriginFor<T>) -> DispatchResult {
T::StakingAdmin::ensure_origin(origin)?;
pallet_staking::Pallet::<T>::force_new_era(RawOrigin::Root.into())
}
#[pallet::call_index(2)]
#[pallet::weight(<T as pallet_staking::Config>::WeightInfo::set_validator_count())]
pub fn set_validator_count(
origin: OriginFor<T>,
#[pallet::compact] new: u32,
) -> DispatchResult {
T::StakingAdmin::ensure_origin(origin)?;
pallet_staking::Pallet::<T>::set_validator_count(RawOrigin::Root.into(), new)
}
#[allow(clippy::too_many_arguments)]
#[pallet::call_index(3)]
#[pallet::weight(
<T as pallet_staking::Config>::WeightInfo::set_staking_configs_all_set()
.max(<T as pallet_staking::Config>::WeightInfo::set_staking_configs_all_remove())
)]
pub fn set_staking_configs(
origin: OriginFor<T>,
min_nominator_bond: ConfigOp<CurrencyBalanceOf<T>>,
min_validator_bond: ConfigOp<CurrencyBalanceOf<T>>,
max_nominator_count: ConfigOp<u32>,
max_validator_count: ConfigOp<u32>,
chill_threshold: ConfigOp<Percent>,
min_commission: ConfigOp<Perbill>,
max_staked_rewards: ConfigOp<Percent>,
) -> DispatchResult {
T::StakingAdmin::ensure_origin(origin)?;
pallet_staking::Pallet::<T>::set_staking_configs(
RawOrigin::Root.into(),
min_nominator_bond,
min_validator_bond,
max_nominator_count,
max_validator_count,
chill_threshold,
min_commission,
max_staked_rewards,
)
}
#[cfg(feature = "develop")]
#[pallet::call_index(4)]
#[pallet::weight(
<T as pallet_balances::Config>::WeightInfo::force_set_balance_creating()
.max(<T as pallet_balances::Config>::WeightInfo::force_set_balance_killing())
)]
pub fn force_set_balance(
origin: OriginFor<T>,
who: <T::Lookup as StaticLookup>::Source,
#[pallet::compact] new_free: T::Balance,
) -> DispatchResult {
T::BalancesAdmin::ensure_origin(origin)?;
pallet_balances::Pallet::<T>::force_set_balance(RawOrigin::Root.into(), who, new_free)
}
}
}