pub trait ElectionDataProvider {
type AccountId;
type BlockNumber;
type MaxVotesPerVoter: Get<u32>;
// Required methods
fn electable_targets(
maybe_max_len: Option<usize>
) -> Result<Vec<Self::AccountId>>;
fn electing_voters(
maybe_max_len: Option<usize>
) -> Result<Vec<VoterOf<Self>>>;
fn desired_targets() -> Result<u32>;
fn next_election_prediction(now: Self::BlockNumber) -> Self::BlockNumber;
}
Expand description
Something that can provide the data to an ElectionProvider
.
Required Associated Types§
sourcetype BlockNumber
type BlockNumber
The block number type.
sourcetype MaxVotesPerVoter: Get<u32>
type MaxVotesPerVoter: Get<u32>
Maximum number of votes per voter that this data provider is providing.
Required Methods§
sourcefn electable_targets(
maybe_max_len: Option<usize>
) -> Result<Vec<Self::AccountId>>
fn electable_targets( maybe_max_len: Option<usize> ) -> Result<Vec<Self::AccountId>>
All possible targets for the election, i.e. the targets that could become elected, thus “electable”.
If maybe_max_len
is Some(v)
then the resulting vector MUST NOT be longer than v
items
long.
This should be implemented as a self-weighing function. The implementor should register its appropriate weight at the end of execution with the system pallet directly.
sourcefn electing_voters(maybe_max_len: Option<usize>) -> Result<Vec<VoterOf<Self>>>
fn electing_voters(maybe_max_len: Option<usize>) -> Result<Vec<VoterOf<Self>>>
All the voters that participate in the election, thus “electing”.
Note that if a notion of self-vote exists, it should be represented here.
If maybe_max_len
is Some(v)
then the resulting vector MUST NOT be longer than v
items
long.
This should be implemented as a self-weighing function. The implementor should register its appropriate weight at the end of execution with the system pallet directly.
sourcefn desired_targets() -> Result<u32>
fn desired_targets() -> Result<u32>
The number of targets to elect.
This should be implemented as a self-weighing function. The implementor should register its appropriate weight at the end of execution with the system pallet directly.
A sensible implementation should use the minimum between this value and
[Self::targets().len()
], since desiring a winner set larger than candidates is not
feasible.
This is documented further in issue: https://github.com/paritytech/substrate/issues/9478
sourcefn next_election_prediction(now: Self::BlockNumber) -> Self::BlockNumber
fn next_election_prediction(now: Self::BlockNumber) -> Self::BlockNumber
Provide a best effort prediction about when the next election is about to happen.
In essence, the implementor should predict with this function when it will trigger the
ElectionProvider::elect
.
This is only useful for stateful election providers.