一口笔记

常期望安定,还期望即兴。

0%

Solana / Anchor 学习笔记 - Solana 白皮书(二)

5. 权益证明共识机制

5.1 描述

这个机制是用来:

  1. 快速确认由 PoH 生成器生成的当前序列。
  2. 投票选出下一个 PoH 生成器。
  3. 惩罚不当行为的验证者。

这个算法依赖于所有参与节点在规定超时时间内最终接收到的消息。

5.2 术语

  • 押金(bonds): 验证者在验证交易时的承诺作为抵押的代币。
  • 惩罚机制(slashing): 为解决无利害关系问题提出的方案,当不同的分支被发布时,当前分支可以销毁验证者的押金。
  • 超级多数(super majority): 由押金加权之后,验证者的总票数达到三分之二。这意味着发起攻击的经济成本等同于代币市值的三分之一。

无利害关系问题(Nothing at Stake Problem): 在权益证明系统中,验证者不需要消耗物理资源(如电力),而是依赖于其押金(Stake)。因此,如果网络分叉,验证者可以选择在多个分支上投票,因为这样不会有额外成本。他们会试图最大化收益,而不关心网络的最终一致性。

5.3 质押

用户将代币转账到一个自己名下的质押账户,这笔押金在赎回之前需要保持不动。

质押账户有锁定期,锁定期结束才能赎回。

超级多数确认了质押交易之后,质押才有效。

5.4 投票

  1. PoH 生成器会在预定义好的周期内发布一个自身状态的签名。
  2. 每个质押的身份需要发布一份状态的签名,作为投票。
  3. 投票只有同意票,没有反对票。
  4. 如果在超时时间内,绝对多数达成了共识,这个分支就会被认为是合法的。

5.5 解质押

如果用户未能按时参与投票,质押的币会被标记为“过期”,旨在强制参与者保持活跃,否则将失去投票资格。

N 作为投票失效的次数阈值,会随着过期投票的数量增加而增长,N 的动态调整也可以为网络的自愈能力提供支持,减少对投票延迟的影响。

5.6 选举

  1. 检测到 PoH 生成器故障时,新 PoH 生成器选举就会发生。
  2. 拥有最高投票权重、更高的公钥地址的验证者会被选为新的 PoH 生成器。
  3. 需要超级多数确认,如果在完成确认前新的生成器故障,就重新选择下一个新的 PoH 生成器。
  4. 切换选票时,投票的验证者需要在一个更高的 PoH 序列计数器上投票,否则会触发惩罚。
  5. 会选择一个次级生成器,用于主生成器故障时快速切换。

5.7 选举触发条件

5.7.1 分叉的 Proof of History 生成器

  1. 只有当 PoH 生成器的标识被攻破时,才可能发生分叉。
  2. 分叉的检测依据是同一个 PoH 标识发布了两个不同的历史记录。

5.7.2 运行时异常

  1. Bug、硬件故障、人为错误可能导致生成器生成无效状态,并发布与本地验证者不一致的签名。
  2. 验证者将通过 Gossip 协议发布正确的签名,这一事件将触发新的选举。
  3. 接收无效状态的验证者将收到惩罚。

5.7.3 网络超时

5.8 惩罚

  1. 恶意投票:对两个不同的序列投票,受质押削减惩罚。
  2. 非恶意的竞选序列冲突,投票会被撤销,不会惩罚。
  3. 对 PoH 生成器的无效哈希进行投票,受质押削减惩罚。

5.9 次级选举

  1. 次级选举是在主序列上被提出的。
  2. 在超时时间内通过绝对多数投票,次级生成器就当选了。
  3. 主生成器通过在序列中插入指示交接的消息,来实现软交接。
  4. 如果主生成器发生故障,已当选的次生成器会被作为第一备选。

5.10 可用性

  1. CAP 中 Solana 选择 A 可用性。
  2. 最终一致性:在合理的人类时间范围内保持一定程度的一致性。
  3. 利用 PoH(Proof of History)机制提供了时间的客观测量,结合 PoS 投票记录,可以动态地取消不可用验证者的质押,调整网络的活性和一致性需求。
  4. 在合理的时间内,随着不可用验证者被逐步取消质押,网络可以逐步恢复到满足 2/3 共识的状态,从而达成一致性。