显示软件包…
2 个稳定版本
2.0.2 | 2021 年 4 月 3 日 |
---|---|
2.0.1 | 2021 年 4 月 2 日 |
#6 在 #balancing
106 每月下载次数
用于 16 个软件包(直接使用 3 个)
550KB
12K SLoC
一套用于与 tetcore 运行时一起使用的选举算法,通常在质押子系统中使用。显著的实现包括
seq_phragmen
:实现了 Phragmén 顺序方法。一种无等级、相对较快的选举方法,确保了 PJR,但不提供最大最小问题的常数因子近似。phragmms
:实现了一种受 Phragmén 启发的混合方法,执行速度更快,但可以实现最大最小问题的常数因子近似,类似于 MMS 算法。balance_solution
:实现了星平衡算法。这个迭代过程可以将解决方案推向更balances
,这反过来可以提高其分数。
术语
此软件包使用与上下文无关的词汇,不要与质押混淆。这是因为此软件包的选举算法虽然是为质押设计的,但也可用于其他上下文。
Voter
:对多个 Targets
投票的实体。在质押的上下文中,这与 Nominator
相同。Target
:有资格被投票的实体。在质押的上下文中,这与 Validator
相同。Edge
:从 Voter
到 Target
的映射。
选举算法的目标是提供一个 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