Crate pallet_bags_list
source ·Expand description
Bags-List Pallet
A semi-sorted list, where items hold an AccountId
based on some Score
. The
AccountId
(id
for short) might be synonym to a voter
or nominator
in some context, and
Score
signifies the chance of each id being included in the final
SortedListProvider::iter
.
It implements frame_election_provider_support::SortedListProvider
to provide a semi-sorted
list of accounts to another pallet. It needs some other pallet to give it some information about
the weights of accounts via frame_election_provider_support::ScoreProvider
.
This pallet is not configurable at genesis. Whoever uses it should call appropriate functions of
the SortedListProvider
(e.g. on_insert
, or unsafe_regenerate
) at their genesis.
Goals
The data structure exposed by this pallet aims to be optimized for:
- insertions and removals.
- iteration over the top* N items by score, where the precise ordering of items doesn’t particularly matter.
Details
- items are kept in bags, which are delineated by their range of score (See
Config::BagThresholds
). - for iteration, bags are chained together from highest to lowest and elements within the bag are iterated from head to tail.
- items within a bag are iterated in order of insertion. Thus removing an item and re-inserting it will worsen its position in list iteration; this reduces incentives for some types of spam that involve consistently removing and inserting for better position. Further, ordering granularity is thus dictated by range between each bag threshold.
- if an item’s score changes to a value no longer within the range of its current bag the item’s position will need to be updated by an external actor with rebag (update), or removal and insertion.
Re-exports
pub use weights::WeightInfo;
pub use pallet::*;
Modules
- The migrations of this pallet.
- The module that hosts all the FRAME types needed to add this pallet to a runtime.
- Autogenerated weights for pallet_bags_list
Macros
Structs
- A Bag is a doubly-linked list of ids, where each id is mapped to a
Node
. - The ONLY entry point of this module. All operations to the bags-list should happen through this interface. It is forbidden to access other module members directly.
- A Node is the fundamental element comprising the doubly-linked list described by
Bag
.
Enums
Functions
- Given a certain score, to which bag does it belong to?