5. 权益证明共识机制
5.1 描述
这个机制是用来:
- 快速确认由 PoH 生成器生成的当前序列。
- 投票选出下一个 PoH 生成器。
- 惩罚不当行为的验证者。
这个算法依赖于所有参与节点在规定超时时间内最终接收到的消息。
5.2 术语
- 押金(bonds): 验证者在验证交易时的承诺作为抵押的代币。
- 惩罚机制(slashing): 为解决无利害关系问题提出的方案,当不同的分支被发布时,当前分支可以销毁验证者的押金。
- 超级多数(super majority): 由押金加权之后,验证者的总票数达到三分之二。这意味着发起攻击的经济成本等同于代币市值的三分之一。
无利害关系问题(Nothing at Stake Problem): 在权益证明系统中,验证者不需要消耗物理资源(如电力),而是依赖于其押金(Stake)。因此,如果网络分叉,验证者可以选择在多个分支上投票,因为这样不会有额外成本。他们会试图最大化收益,而不关心网络的最终一致性。
5.3 质押
用户将代币转账到一个自己名下的质押账户,这笔押金在赎回之前需要保持不动。
质押账户有锁定期,锁定期结束才能赎回。
超级多数确认了质押交易之后,质押才有效。
5.4 投票
- PoH 生成器会在预定义好的周期内发布一个自身状态的签名。
- 每个质押的身份需要发布一份状态的签名,作为投票。
- 投票只有同意票,没有反对票。
- 如果在超时时间内,绝对多数达成了共识,这个分支就会被认为是合法的。
5.5 解质押
如果用户未能按时参与投票,质押的币会被标记为“过期”,旨在强制参与者保持活跃,否则将失去投票资格。
N 作为投票失效的次数阈值,会随着过期投票的数量增加而增长,N 的动态调整也可以为网络的自愈能力提供支持,减少对投票延迟的影响。
5.6 选举
- 检测到 PoH 生成器故障时,新 PoH 生成器选举就会发生。
- 拥有最高投票权重、更高的公钥地址的验证者会被选为新的 PoH 生成器。
- 需要超级多数确认,如果在完成确认前新的生成器故障,就重新选择下一个新的 PoH 生成器。
- 切换选票时,投票的验证者需要在一个更高的 PoH 序列计数器上投票,否则会触发惩罚。
- 会选择一个次级生成器,用于主生成器故障时快速切换。
5.7 选举触发条件
5.7.1 分叉的 Proof of History 生成器
- 只有当 PoH 生成器的标识被攻破时,才可能发生分叉。
- 分叉的检测依据是同一个 PoH 标识发布了两个不同的历史记录。
5.7.2 运行时异常
- Bug、硬件故障、人为错误可能导致生成器生成无效状态,并发布与本地验证者不一致的签名。
- 验证者将通过 Gossip 协议发布正确的签名,这一事件将触发新的选举。
- 接收无效状态的验证者将收到惩罚。
5.7.3 网络超时
5.8 惩罚
- 恶意投票:对两个不同的序列投票,受质押削减惩罚。
- 非恶意的竞选序列冲突,投票会被撤销,不会惩罚。
- 对 PoH 生成器的无效哈希进行投票,受质押削减惩罚。
5.9 次级选举
- 次级选举是在主序列上被提出的。
- 在超时时间内通过绝对多数投票,次级生成器就当选了。
- 主生成器通过在序列中插入指示交接的消息,来实现软交接。
- 如果主生成器发生故障,已当选的次生成器会被作为第一备选。
5.10 可用性
- CAP 中 Solana 选择 A 可用性。
- 最终一致性:在合理的人类时间范围内保持一定程度的一致性。
- 利用 PoH(Proof of History)机制提供了时间的客观测量,结合 PoS 投票记录,可以动态地取消不可用验证者的质押,调整网络的活性和一致性需求。
- 在合理的时间内,随着不可用验证者被逐步取消质押,网络可以逐步恢复到满足 2/3 共识的状态,从而达成一致性。