参与证明
参与证明(PoP)是 ZooBC 就其区块达成一致的方式。区块由链上节点注册表中的节点产出,这些节点根据前一个区块的种子抽签选出,每个席位的机会都相同。每个节点都按网络所需的工作来衡量,即把区块和交易转发给协议为它指派的对等节点,而这一衡量结果决定它在新币中所占的份额。区块之所以有效,是因为它由正确的密钥签名,而每个节点都会自行检查这一点。
四个设计目标
- 均等的出块权力。 余额、质押、硬件和分数都不会改变席位的机会。
- 开放但有节奏的成员资格。 任何人都可以通过锁定质押来排队等候席位;协议每个周期准入一个新成员。
- 可衡量、有回报的参与。 转发由接收方对等节点签署的回执来证明,而回执决定每个节点的收入。
- 没有浪费的工作。 安全性来自签名、哈希和可验证随机函数,而不是来自谜题。
参与证明与 PoW、PoS 的比较 把这些目标与工作量证明、权益证明及其委托式和联邦式变体进行了比较。
一个区块的逐步过程
- 抽签。 前一个区块的种子初始化一个随机生成器,每个节点都以同样的方式运行它。它为第 1 轮指定一个出块者,为第 2 轮指定另一个,依此类推(抽签)。
- 轮次。 第 1 轮的出块者力求在前一个区块之后 15 秒为其区块盖上时间戳。如果它保持沉默,第 2 轮的出块者会在 15 秒后接手(轮次、时间与窗口)。只有前十个轮次可以携带交易,而前一个区块的出块者会被降级(优先轮次、空区块与前一个出块者)。
- 区块。 出块者用其节点密钥签署区块,并用可验证随机函数证明新的种子,因此它无法选择这个种子(区块种子(VRF))。
- 检查。 每个节点都会检查:出块者是否在其时间戳所落入的轮次或前一个轮次被抽中,以及签名、种子证明、每一笔交易和每一份回执。空区块是有效的。
- 工作。 节点把区块和交易转发给其优先对等节点,并收集签名的回执(回执与网络拓扑)。节点在自己区块中出示的回执会改变其参与分数,而参与分数决定 coinbase 抽奖 中的权重。
- 缺席的代价。 跳过一个轮次会使节点处于“缺席”状态:没有收入,分数下降。连续错过四次会使它被暂停,分数降到零会使它被除名(错过轮次、暂停与除名)。
权力与收入分开
出块者抽签忽略分数,抽奖忽略质押。分数高的节点赚得更多,但它产出的区块不会更多,选择的种子也不会更多:每个席位的权力都相同,而收入跟随每个节点完成的工作。更多权力意味着更多席位,而席位只能通过队列获得,一次准入一个(准入节奏)。
分支相互竞争时
节点跟随累计难度最大的分支,其中准时的区块比迟到的区块权重更高;完全平局时由链顶哈希较小者胜出(分叉选择与累计难度)。任何节点的回滚都不超过 720 个区块(3 小时),也不会低于在脊链上联署的最后一个检查点(最终性与回滚)。在同一个父区块上签署两个区块的出块者可以被举报并记罚(双签(equivocation))。
关键数字
| 项目 | 数值(mainnet) |
|---|---|
| 出块间隔,以及一个轮次的长度 | 15 秒 |
| 每条链的创世席位 | 11 个 |
| 可以携带交易的轮次 | 第 1 到第 10 轮 |
| 起始参与分数 | 20% |
| 被暂停前连续错过的轮次数 | 4 |
| 每个节点的优先对等节点数,重新打乱的间隔 | 12 个,每 40 个区块 |
| 回滚上限 | 720 个区块(3 小时) |
另见
本主题下的文章
- 优先轮次、空区块与前一个出块者
为什么只有前十个轮次可以携带交易,为什么空区块仍然是完整的区块,以及为什么前一个区块的出块者会被降级,而从不被排除。 - 分叉选择与累计难度
ZooBC 节点如何在相互竞争的分支之间做出选择:累计难度最重者胜出,准时的区块比迟到的区块权重更高,完全平局时链顶哈希较小者胜出。 - 区块种子(VRF)
每个区块中 64 字节的种子驱动着链上的各种随机选择。它是可验证随机函数的输出,因此其出块者无法选择它,而任何人都可以校验它。 - 参与分数
衡量节点工作完成得如何的 0 到 100% 的分数:它如何上升和下降,它决定什么(抽奖收入、除名),以及它从不影响什么(出块)。 - 参与证明与 PoW、PoS 的比较
ZooBC 的参与证明与工作量证明、权益证明以及委托式和联邦式设计有何不同:谁来出块,如何获得权力,以及区块的安全性建立在什么之上。 - 双签(equivocation)
当出块者在同一个父区块上签署两个不同的区块时会发生什么:诚实节点如何避免这种情况,任何已注册节点如何用 EquivocationReport 证明它,以及它的代价。 - 回执与网络拓扑
ZooBC 如何证明一个节点转发了区块和交易:每 40 个区块抽定一次的优先对等节点、232 字节的签名回执,以及每个验证者进行的检查。 - 抽签:谁产出下一个区块
每个节点如何根据前一区块的种子,为下一个区块算出同一份有序的出块者名单,以及为什么每个活跃席位的机会都相同。 - 轮次、时间与窗口
ZooBC 如何把每个区块之后的时间切分为 15 秒的轮次,时间戳落在哪一轮,以及为什么任何单个缺席的出块者都无法让链停下。 - 错过轮次、暂停与除名
跳过轮次的节点会遭遇什么:错过轮次、使其收入停止并分数下降的“缺席”状态、错过四次后的暂停,以及分数归零时的除名。