#tetcoin #election #algorithm #score #solution #balancing #ensure

no-std tp-npos-elections

Tetcore NPoS 选举算法原语

显示软件包…

2 个稳定版本

2.0.2 2021 年 4 月 3 日
2.0.1 2021 年 4 月 2 日

#6#balancing

Download history 40/week @ 2024-04-10 51/week @ 2024-04-17 50/week @ 2024-04-24 39/week @ 2024-05-01 40/week @ 2024-05-08 36/week @ 2024-05-15 30/week @ 2024-05-22 38/week @ 2024-05-29 33/week @ 2024-06-05 33/week @ 2024-06-12 32/week @ 2024-06-19 33/week @ 2024-06-26 2/week @ 2024-07-03 34/week @ 2024-07-10 50/week @ 2024-07-17 20/week @ 2024-07-24

106 每月下载次数
用于 16 个软件包(直接使用 3 个)

Apache-2.0

550KB
12K SLoC

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

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

术语

此软件包使用与上下文无关的词汇,不要与质押混淆。这是因为此软件包的选举算法虽然是为质押设计的,但也可用于其他上下文。

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字段是选民主导的,即它是从选民的角度出发的。表示相反的结构的名称为Support。这个结构通常以类似映射的方式访问,即以选民为键,因此它被存储为名为SupportMap的映射。

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

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

许可证:Apache-2.0

依赖项

~3–11MB
~122K SLoC