Trait pallet_bags_list::pallet::Config[][src]

pub trait Config: Config {
    type Event: From<Event<Self>> + IsType<<Self as Config>::Event>;
    type WeightInfo: WeightInfo;
    type VoteWeightProvider: VoteWeightProvider<Self::AccountId>;
    type BagThresholds: Get<&'static [VoteWeight]>;
}
Expand description

Configuration trait of this pallet.

Implement this type for a runtime in order to customize this pallet.

Associated Types

The overarching event type.

Weight information for extrinsics in this pallet.

Something that provides the weights of ids.

The list of thresholds separating the various bags.

Ids are separated into unsorted bags according to their vote weight. This specifies the thresholds separating the bags. An id’s bag is the largest bag for which the id’s weight is less than or equal to its upper threshold.

When ids are iterated, higher bags are iterated completely before lower bags. This means that iteration is semi-sorted: ids of higher weight tend to come before ids of lower weight, but peer ids within a particular bag are sorted in insertion order.

Expressing the constant

This constant must be sorted in strictly increasing order. Duplicate items are not permitted.

There is an implied upper limit of VoteWeight::MAX; that value does not need to be specified within the bag. For any two threshold lists, if one ends with VoteWeight::MAX, the other one does not, and they are otherwise equal, the two lists will behave identically.

Calculation

It is recommended to generate the set of thresholds in a geometric series, such that there exists some constant ratio such that threshold[k + 1] == (threshold[k] * constant_ratio).max(threshold[k] + 1) for all k.

The helpers in the /utils/frame/generate-bags module can simplify this calculation.

Examples
  • If BagThresholds::get().is_empty(), then all ids are put into the same bag, and iteration is strictly in insertion order.
  • If BagThresholds::get().len() == 64, and the thresholds are determined according to the procedure given above, then the constant ratio is equal to 2.
  • If BagThresholds::get().len() == 200, and the thresholds are determined according to the procedure given above, then the constant ratio is approximately equal to 1.248.
  • If the threshold list begins [1, 2, 3, ...], then an id with weight 0 or 1 will fall into bag 0, an id with weight 2 will fall into bag 1, etc.
Migration

In the event that this list ever changes, a copy of the old bags list must be retained. With that List::migrate can be called, which will perform the appropriate migration.

Implementors