mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-30 04:41:03 +00:00
Moving NposSolution to frame (#11031)
* Move `sp-npos-elections-solution-type` to `frame-election-provider-support` First stab at it, will need to amend some more stuff * Fixing tests * Fixing tests * Fixing cargo.toml for std configuration * fmt * Committing suggested changes renaming, and re exporting macro. * Removing unneeded imports * Move `NposSolution` to frame * Removing `npos_election` dependencies Implementing _fpes better * some feedback for moving NPoSSolution to frame * fmt * more formatting * Fixed some imports and fmt * Fixing docs Co-authored-by: kianenigma <kian@parity.io>
This commit is contained in:
@@ -17,7 +17,7 @@
|
||||
|
||||
//! Structs and helpers for distributing a voter's stake among various winners.
|
||||
|
||||
use crate::{Error, ExtendedBalance, IdentifierT, PerThing128, __OrInvalidIndex};
|
||||
use crate::{ExtendedBalance, IdentifierT, PerThing128};
|
||||
#[cfg(feature = "std")]
|
||||
use codec::{Decode, Encode};
|
||||
use sp_arithmetic::{
|
||||
@@ -166,44 +166,3 @@ impl<AccountId> StakedAssignment<AccountId> {
|
||||
self.distribution.iter().fold(Zero::zero(), |a, b| a.saturating_add(b.1))
|
||||
}
|
||||
}
|
||||
/// The [`IndexAssignment`] type is an intermediate between the assignments list
|
||||
/// ([`&[Assignment<T>]`][Assignment]) and `SolutionOf<T>`.
|
||||
///
|
||||
/// The voter and target identifiers have already been replaced with appropriate indices,
|
||||
/// making it fast to repeatedly encode into a `SolutionOf<T>`. This property turns out
|
||||
/// to be important when trimming for solution length.
|
||||
#[derive(RuntimeDebug, Clone, Default)]
|
||||
#[cfg_attr(feature = "std", derive(PartialEq, Eq, Encode, Decode))]
|
||||
pub struct IndexAssignment<VoterIndex, TargetIndex, P: PerThing> {
|
||||
/// Index of the voter among the voters list.
|
||||
pub who: VoterIndex,
|
||||
/// The distribution of the voter's stake among winning targets.
|
||||
///
|
||||
/// Targets are identified by their index in the canonical list.
|
||||
pub distribution: Vec<(TargetIndex, P)>,
|
||||
}
|
||||
|
||||
impl<VoterIndex, TargetIndex, P: PerThing> IndexAssignment<VoterIndex, TargetIndex, P> {
|
||||
pub fn new<AccountId: IdentifierT>(
|
||||
assignment: &Assignment<AccountId, P>,
|
||||
voter_index: impl Fn(&AccountId) -> Option<VoterIndex>,
|
||||
target_index: impl Fn(&AccountId) -> Option<TargetIndex>,
|
||||
) -> Result<Self, Error> {
|
||||
Ok(Self {
|
||||
who: voter_index(&assignment.who).or_invalid_index()?,
|
||||
distribution: assignment
|
||||
.distribution
|
||||
.iter()
|
||||
.map(|(target, proportion)| Some((target_index(target)?, proportion.clone())))
|
||||
.collect::<Option<Vec<_>>>()
|
||||
.or_invalid_index()?,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
/// A type alias for [`IndexAssignment`] made from [`crate::NposSolution`].
|
||||
pub type IndexAssignmentOf<C> = IndexAssignment<
|
||||
<C as crate::NposSolution>::VoterIndex,
|
||||
<C as crate::NposSolution>::TargetIndex,
|
||||
<C as crate::NposSolution>::Accuracy,
|
||||
>;
|
||||
|
||||
Reference in New Issue
Block a user