#tetcoin #framework #blockchain #crypto

不使用std noble-elections-phragmen

FABRIC 基于seq-Phragmén选举方法的noble

显示此包…

1 个稳定版本

3.0.0 2021年4月4日

#10 in #tetcore

31 每月下载次数
8 个包中使用(通过 node-runtime

Apache-2.0

1.5MB
30K SLoC

Phragmén 选举模块。

基于顺序Phragmén的选举模块。

任期和轮次

选举在 轮次 中进行:每 N 块,所有前任成员退休,并选举出一组新成员(这些新成员可能与前一组有交集,也可能没有交集)。每一轮持续一定数量的块,由 TermDuration 存储项定义。在此上下文中,“任期”和“轮次”可以互换使用。

TermDuration 在一轮中可能会改变。这可以缩短或延长轮次的时间。下一轮选举的块号从未存储,而是始终在运行时检查。根据当前块号和 TermDuration,当满足条件 BlockNumber % TermDuration == 0 时,将始终触发新的选举轮次。

投票

选民可以通过提供账户ID列表来为任何一组候选人投票。无效的投票(为非候选人投票)在选举期间将被忽略。然而,选民 可能 为未来的候选人投票。选民在投票时保留保证金。每个投票定义一个 value。这笔金额从选民的账户中被锁定,表明投票的权重。选民可以在任何时候通过再次调用 vote() 来更新他们的投票。这保持保证金不变,但可以可选地更改锁定的 value。在一轮结束后,投票将被保留并可能仍然适用于后续的轮次。选民在完成投票后应负责调用 remove_voter,以取回保证金并解除锁定。

选民还会报告其他选民失效以赚取他们的债券。一旦选民所投的所有候选人都不再是有效候选人或成员,该选民就视为失效。在报告时,如果目标选民实际上已经失效,报告者将获得目标选民的投票债券作为奖励。目标选民将失去其债券并被移除。如果目标选民没有失效,报告者将被削减并移除。为了防止被报告,选民应立即在失效状态下手动提交 remove_voter()

候选人和成员

候选人提交候选资格时也会保留债券。候选人无法撤回他们的候选资格。候选人可能处于以下情况之一:

  • 胜者:胜者保留为 成员。他们必须仍然保留债券,并自动被视为下一轮选举的候选人。
  • 亚军:亚军是胜者之后的最佳候选人。保留亚军的数量是可配置的。亚军将按顺序使用,作为候选人在以下情况下的替代品:被 [remove_member] 踢出,或者当现任成员放弃候选资格时。亚军将自动被视为下一轮选举的候选人。
  • 败者:任何不是胜者的候选人都是败者。败者可能是一个 离任成员或亚军,这意味着他们是一个未能保住位置的活跃成员。离任者将始终失去他们的债券。
放弃候选资格。

所有候选人,无论当选与否,都可以放弃候选资格。调用 Module::renounce_candidacy 将始终导致候选资格债券被退还。

注意,由于成员是下一轮的默认候选人,并且投票在存储中持续存在,因此在没有进一步输入的情况下,选举系统是完全稳定的。这意味着如果系统有一组特定的候选人 C 和选民 V,这些候选人 C 和选民 V 导致一组成员 M 当选,只要 VC 不撤回他们的候选资格和投票,M 将在每一轮结束时继续当选。

模块信息

许可:Apache-2.0

依赖关系

~3–12MB
~136K SLoC