44 个版本 (重大破坏)

34.0.0 2024 年 7 月 18 日
33.0.0 2024 年 6 月 21 日
32.0.0 2024 年 5 月 23 日
31.0.0 2024 年 4 月 30 日
2.0.0-rc52020 年 7 月 24 日

#1386 in 神奇豆子

Download history 2390/week @ 2024-04-26 2019/week @ 2024-05-03 1677/week @ 2024-05-10 1914/week @ 2024-05-17 2382/week @ 2024-05-24 1992/week @ 2024-05-31 2025/week @ 2024-06-07 1399/week @ 2024-06-14 2743/week @ 2024-06-21 1458/week @ 2024-06-28 1040/week @ 2024-07-05 2714/week @ 2024-07-12 1608/week @ 2024-07-19 1688/week @ 2024-07-26 1780/week @ 2024-08-02 1610/week @ 2024-08-09

7,103 每月下载量
104 个 crate 中使用(14 直接)

Apache-2.0

1MB
21K SLoC

sp-npos-elections

一组用于 Substrate 运行时的选举算法,通常在质押子系统中使用。显著的实现包括

  • seq_phragmen:实现了 Phragmén 顺序方法。一种无等级、相对较快的选举方法,确保了 PJR,但并不提供最大最小问题的常数因子近似。
  • phragmms:实现了受Phragmén启发的混合方法,执行速度更快,但它可以实现对最大最小问题的常数因子近似,类似于MMS算法。
  • balance_solution:实现了星形平衡算法。这个迭代过程可以将解决方案推向更加平衡,从而提高其分数。

术语

此crate使用与上下文无关的单词,不要与抵押混淆。这是因为该crate的选举算法虽然为抵押而设计,但也可以用于其他上下文。

Voter:对多个Targets投出一些选票的实体。在抵押的上下文中,这与Nominator相同。Target:有资格被投票的实体。在抵押的上下文中,这与Validator相同。Edge:从VoterTarget的映射。

选举算法的目的是提供ElectionResult。由以下组成的数据

  • winners:获胜者的标识符的扁平列表,通常按某种有意义的顺序排列。它们与它们的总支持股份一起压缩。
  • assignment:将每个投票者映射到他们的仅获胜者目标,与表示对该特定目标所提供支持的比率一起压缩。
// the winners.
let winners = vec![(1, 100), (2, 50)];
let assignments = vec![
    // A voter, giving equal backing to both 1 and 2.
    Assignment {
		who: 10,
		distribution: vec![(1, Perbill::from_percent(50)), (2, Perbill::from_percent(50))],
	},
    // A voter, Only backing 1.
    Assignment { who: 20, distribution: vec![(1, Perbill::from_percent(100))] },
];

// the combination of the two makes the election result.
let election_result = ElectionResult { winners, assignments };

选举结果的Assignment字段是投票者多数的,即它从投票者的角度来看。表示相反的结构的struct称为Support。这个struct通常以类似映射的方式访问,即以投票者为键,因此它存储为名为SupportMap的映射。

此外,支持是从绝对支持值构建的,而不是像上面示例中那样的比率。具有股份值而不是比率的类似于Assignment的struct称为StakedAssignment

更多信息请参阅: https://arxiv.org/abs/2004.12990

许可证:Apache-2.0

依赖关系

~16-29MB
~476K SLoC