Decouple Stkaing and Election - Part1: Support traits (#7908)

* Base features and traits.

* Fix the build

* Remove unused boxing

* Self review cleanup

* Fix build
This commit is contained in:
Kian Paimani
2021-01-18 10:24:12 +00:00
committed by GitHub
parent c58a2d9a74
commit ced107b355
23 changed files with 925 additions and 341 deletions
@@ -22,8 +22,8 @@ mod common;
use common::*;
use honggfuzz::fuzz;
use sp_npos_elections::{
assignment_ratio_to_staked_normalized, build_support_map, to_without_backing, VoteWeight,
evaluate_support, is_score_better, seq_phragmen,
assignment_ratio_to_staked_normalized, is_score_better, seq_phragmen, to_supports,
to_without_backing, EvaluateSupport, VoteWeight,
};
use sp_runtime::Perbill;
use rand::{self, SeedableRng};
@@ -66,11 +66,14 @@ fn main() {
};
let unbalanced_score = {
let staked = assignment_ratio_to_staked_normalized(unbalanced.assignments.clone(), &stake_of).unwrap();
let staked = assignment_ratio_to_staked_normalized(
unbalanced.assignments.clone(),
&stake_of,
)
.unwrap();
let winners = to_without_backing(unbalanced.winners.clone());
let support = build_support_map(winners.as_ref(), staked.as_ref()).unwrap();
let score = to_supports(winners.as_ref(), staked.as_ref()).unwrap().evaluate();
let score = evaluate_support(&support);
if score[0] == 0 {
// such cases cannot be improved by balancing.
return;
@@ -87,11 +90,13 @@ fn main() {
).unwrap();
let balanced_score = {
let staked = assignment_ratio_to_staked_normalized(balanced.assignments.clone(), &stake_of).unwrap();
let staked = assignment_ratio_to_staked_normalized(
balanced.assignments.clone(),
&stake_of,
).unwrap();
let winners = to_without_backing(balanced.winners);
let support = build_support_map(winners.as_ref(), staked.as_ref()).unwrap();
to_supports(winners.as_ref(), staked.as_ref()).unwrap().evaluate()
evaluate_support(&support)
};
let enhance = is_score_better(balanced_score, unbalanced_score, Perbill::zero());
@@ -22,8 +22,8 @@ mod common;
use common::*;
use honggfuzz::fuzz;
use sp_npos_elections::{
assignment_ratio_to_staked_normalized, build_support_map, to_without_backing, VoteWeight,
evaluate_support, is_score_better, phragmms,
assignment_ratio_to_staked_normalized, is_score_better, phragmms, to_supports,
to_without_backing, EvaluateSupport, VoteWeight,
};
use sp_runtime::Perbill;
use rand::{self, SeedableRng};
@@ -66,11 +66,14 @@ fn main() {
};
let unbalanced_score = {
let staked = assignment_ratio_to_staked_normalized(unbalanced.assignments.clone(), &stake_of).unwrap();
let staked = assignment_ratio_to_staked_normalized(
unbalanced.assignments.clone(),
&stake_of,
)
.unwrap();
let winners = to_without_backing(unbalanced.winners.clone());
let support = build_support_map(winners.as_ref(), staked.as_ref()).unwrap();
let score = to_supports(&winners, &staked).unwrap().evaluate();
let score = evaluate_support(&support);
if score[0] == 0 {
// such cases cannot be improved by balancing.
return;
@@ -86,11 +89,13 @@ fn main() {
).unwrap();
let balanced_score = {
let staked = assignment_ratio_to_staked_normalized(balanced.assignments.clone(), &stake_of).unwrap();
let staked =
assignment_ratio_to_staked_normalized(balanced.assignments.clone(), &stake_of)
.unwrap();
let winners = to_without_backing(balanced.winners);
let support = build_support_map(winners.as_ref(), staked.as_ref()).unwrap();
evaluate_support(&support)
to_supports(winners.as_ref(), staked.as_ref())
.unwrap()
.evaluate()
};
let enhance = is_score_better(balanced_score, unbalanced_score, Perbill::zero());
@@ -34,8 +34,8 @@ use honggfuzz::fuzz;
mod common;
use common::to_range;
use sp_npos_elections::{StakedAssignment, ExtendedBalance, build_support_map, reduce};
use rand::{self, Rng, SeedableRng, RngCore};
use sp_npos_elections::{reduce, to_support_map, ExtendedBalance, StakedAssignment};
use rand::{self, Rng, RngCore, SeedableRng};
type Balance = u128;
type AccountId = u64;
@@ -109,9 +109,8 @@ fn assert_assignments_equal(
ass1: &Vec<StakedAssignment<AccountId>>,
ass2: &Vec<StakedAssignment<AccountId>>,
) {
let support_1 = build_support_map::<AccountId>(winners, ass1).unwrap();
let support_2 = build_support_map::<AccountId>(winners, ass2).unwrap();
let support_1 = to_support_map::<AccountId>(winners, ass1).unwrap();
let support_2 = to_support_map::<AccountId>(winners, ass2).unwrap();
for (who, support) in support_1.iter() {
assert_eq!(support.total, support_2.get(who).unwrap().total);