[Feature] Part 1: add TargetList for validator ranking (#12034)

* [Feature] Part 1: add TargetList for validator ranking

* remove redundant todo

* remove typo

* cleanup

* implement score

* more fixes

* fix thresholds

* fmt

* Remove the stuff that has to come in the next PR, some fixes

* extended balance import

* Change all the references from VoteWeight to Self::Score

* Add a migration for VoterBagsList

* fix score

* add targetList to nomination-pools tests

* fix bench

* address review comments

* change get_npos_targets

* address more comments

* remove thresholds for the time being

* fix instance reference

* VoterBagsListInstance

* reus

* remove params that are not used yet

* Introduced pre/post upgrade try-runtime checks

* fix

* fixes

* fix migration

* fix migration

* fix post_upgrade

* change

* Fix

* eloquent PhantomData

* fix PD

* more fixes

* Update frame/staking/src/pallet/impls.rs

Co-authored-by: Squirrel <gilescope@gmail.com>

* is_nominator now works

* fix test-staking

* build fixes

* fix remote-tests

* Apply suggestions from code review

Co-authored-by: parity-processbot <>
Co-authored-by: kianenigma <kian@parity.io>
Co-authored-by: Squirrel <gilescope@gmail.com>
Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com>
This commit is contained in:
Roman Useinov
2022-09-18 11:28:16 +02:00
committed by GitHub
parent c0e007b50f
commit 1b24f562e6
20 changed files with 307 additions and 47 deletions
+28
View File
@@ -184,8 +184,36 @@ pub mod pallet {
///
/// The changes to nominators are reported to this. Moreover, each validator's self-vote is
/// also reported as one independent vote.
///
/// To keep the load off the chain as much as possible, changes made to the staked amount
/// via rewards and slashes are not reported and thus need to be manually fixed by the
/// staker. In case of `bags-list`, this always means using `rebag` and `putInFrontOf`.
///
/// Invariant: what comes out of this list will always be a nominator.
type VoterList: SortedListProvider<Self::AccountId, Score = VoteWeight>;
/// WIP: This is a noop as of now, the actual business logic that's described below is going
/// to be introduced in a follow-up PR.
///
/// Something that provides a best-effort sorted list of targets aka electable validators,
/// used for NPoS election.
///
/// The changes to the approval stake of each validator are reported to this. This means any
/// change to:
/// 1. The stake of any validator or nominator.
/// 2. The targets of any nominator
/// 3. The role of any staker (e.g. validator -> chilled, nominator -> validator, etc)
///
/// Unlike `VoterList`, the values in this list are always kept up to date with reward and
/// slash as well, and thus represent the accurate approval stake of all account being
/// nominated by nominators.
///
/// Note that while at the time of nomination, all targets are checked to be real
/// validators, they can chill at any point, and their approval stakes will still be
/// recorded. This implies that what comes out of iterating this list MIGHT NOT BE AN ACTIVE
/// VALIDATOR.
type TargetList: SortedListProvider<Self::AccountId, Score = BalanceOf<Self>>;
/// The maximum number of `unlocking` chunks a [`StakingLedger`] can have. Effectively
/// determines how many unique eras a staker may be unbonding in.
#[pallet::constant]