mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-26 07:37:57 +00:00
Bound Election and Staking by MaxActiveValidators (#12436)
* bounding election provider with kian * multi phase implement bounded election provider * election provider blanket implementation * staking compiles * fix test for election provider support * fmt * fixing epmp tests, does not compile yet * fix epmp tests * fix staking tests * fmt * fix runtime tests * fmt * remove outdated wip tags * add enum error * sort and truncate supports * comment * error when unsupported number of election winners * compiling wip after kian's suggestions * fix TODOs * remove,fix tags * ensure validator count does not exceed maxwinners * clean up * some more clean up and todos * handle too many winners * rename parameter for mock * todo * add sort and truncate rule if there are too many winners * fmt * fail, not swallow emergency result bound not met * remove too many winners resolution as it can be guaranteed to be bounded * fix benchmark * give MaxWinners more contextual name * make ready solution generic over T * kian feedback * fix stuff * Kian's way of solvign this * comment fix * fix compile * remove use of BoundedExecution * fmt * comment out failing integrity test * cap validator count increment to max winners * dont panic * add test for bad data provider * Update frame/staking/src/pallet/impls.rs Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com> * fix namespace conflict and add test for onchain max winners less than desired targets * defensive unwrap * early convert to bounded vec * fix syntax * fmt * fix doc * fix rustdoc * fmt * fix maxwinner count for benchmarking * add instant election for noelection * fmt * fix compile * pr feedbacks * always error at validator count exceeding max winners * add useful error message * pr comments * import fix * add checked_desired_targets * fmt * fmt * fix rust doc Co-authored-by: parity-processbot <> Co-authored-by: kianenigma <kian@parity.io> Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com>
This commit is contained in:
@@ -570,7 +570,7 @@ impl pallet_staking::Config for Runtime {
|
||||
type MaxNominatorRewardedPerValidator = MaxNominatorRewardedPerValidator;
|
||||
type OffendingValidatorsThreshold = OffendingValidatorsThreshold;
|
||||
type ElectionProvider = ElectionProviderMultiPhase;
|
||||
type GenesisElectionProvider = onchain::UnboundedExecution<OnChainSeqPhragmen>;
|
||||
type GenesisElectionProvider = onchain::OnChainExecution<OnChainSeqPhragmen>;
|
||||
type VoterList = VoterList;
|
||||
// This a placeholder, to be introduced in the next PR as an instance of bags-list
|
||||
type TargetList = pallet_staking::UseValidatorsMap<Self>;
|
||||
@@ -628,7 +628,14 @@ frame_election_provider_support::generate_solution_type!(
|
||||
|
||||
parameter_types! {
|
||||
pub MaxNominations: u32 = <NposSolution16 as frame_election_provider_support::NposSolution>::LIMIT as u32;
|
||||
pub MaxElectingVoters: u32 = 10_000;
|
||||
pub MaxElectingVoters: u32 = 40_000;
|
||||
pub MaxElectableTargets: u16 = 10_000;
|
||||
// OnChain values are lower.
|
||||
pub MaxOnChainElectingVoters: u32 = 5000;
|
||||
pub MaxOnChainElectableTargets: u16 = 1250;
|
||||
// The maximum winners that can be elected by the Election pallet which is equivalent to the
|
||||
// maximum active validators the staking pallet can have.
|
||||
pub MaxActiveValidators: u32 = 1000;
|
||||
}
|
||||
|
||||
/// The numbers configured here could always be more than the the maximum limits of staking pallet
|
||||
@@ -679,11 +686,9 @@ impl onchain::Config for OnChainSeqPhragmen {
|
||||
>;
|
||||
type DataProvider = <Runtime as pallet_election_provider_multi_phase::Config>::DataProvider;
|
||||
type WeightInfo = frame_election_provider_support::weights::SubstrateWeight<Runtime>;
|
||||
}
|
||||
|
||||
impl onchain::BoundedConfig for OnChainSeqPhragmen {
|
||||
type VotersBound = MaxElectingVoters;
|
||||
type TargetsBound = ConstU32<2_000>;
|
||||
type MaxWinners = <Runtime as pallet_election_provider_multi_phase::Config>::MaxWinners;
|
||||
type VotersBound = MaxOnChainElectingVoters;
|
||||
type TargetsBound = MaxOnChainElectableTargets;
|
||||
}
|
||||
|
||||
impl pallet_election_provider_multi_phase::MinerConfig for Runtime {
|
||||
@@ -726,11 +731,12 @@ impl pallet_election_provider_multi_phase::Config for Runtime {
|
||||
type SlashHandler = (); // burn slashes
|
||||
type RewardHandler = (); // nothing to do upon rewards
|
||||
type DataProvider = Staking;
|
||||
type Fallback = onchain::BoundedExecution<OnChainSeqPhragmen>;
|
||||
type GovernanceFallback = onchain::BoundedExecution<OnChainSeqPhragmen>;
|
||||
type Fallback = onchain::OnChainExecution<OnChainSeqPhragmen>;
|
||||
type GovernanceFallback = onchain::OnChainExecution<OnChainSeqPhragmen>;
|
||||
type Solver = SequentialPhragmen<AccountId, SolutionAccuracyOf<Self>, OffchainRandomBalancing>;
|
||||
type ForceOrigin = EnsureRootOrHalfCouncil;
|
||||
type MaxElectableTargets = ConstU16<{ u16::MAX }>;
|
||||
type MaxElectableTargets = MaxElectableTargets;
|
||||
type MaxWinners = MaxActiveValidators;
|
||||
type MaxElectingVoters = MaxElectingVoters;
|
||||
type BenchmarkingConfig = ElectionProviderBenchmarkConfig;
|
||||
type WeightInfo = pallet_election_provider_multi_phase::weights::SubstrateWeight<Self>;
|
||||
|
||||
Reference in New Issue
Block a user