错过轮次、暂停与除名
节点注册表中的席位要靠完成工作来保住。一个被抽中出块却没有交出区块的节点会让链耽误 15 秒,并记一次错过轮次。每一个被跳过的轮次还会启动一个时钟:该节点在其下一个自己的区块之前处于缺席状态,什么也赚不到,并不断失去参与分数。连续错过四次会使它退出抽签(暂停),分数降到零则会使它失去席位(除名)。本页描述这条路径从 0.5.8 版本起的运作方式。
错过轮次
当一个区块产出时,每个在该高度较早轮次被抽中却没有出块的节点,都是被跳过的出块者,各记一次错过。产出该区块的节点则重置自己的错过计数器。
原因并不重要。离线的节点、太慢的节点,以及在线却扣住区块不发的节点,都被同等对待。被跳过的轮次就是被跳过的轮次。(扣住区块也是出块者试图影响种子的唯一途径;见 区块种子(VRF)。)
缺席:没有收入,分数下降
从任何一个被跳过的轮次起,直到其下一个自己的区块,节点都处于缺席状态。缺席期间:
- 它什么也赚不到:没有 coinbase 抽奖券,没有手续费份额,也没有长效池份额;
- 它的参与分数每个分数单位下降 5 分(满分 100 分),均匀分摊到该单位的各个区块上。
单位为 max(n, 2,880 个区块),其中 n 是可选节点的数量。节点少于 2,880 个时,单位为 2,880 个区块,即 12 小时。在更大的注册表上,单位随 n 增长,因为每个节点大约每 n 个区块才轮到一次。在 devnet 上,单位的下限是 120 个区块(30 分钟),因此整条路径在那里要快 24 倍。
节点签署的回执和 ping(见下文)都不能结束缺席状态,只有它自己的下一个区块才能。因此,错过一个轮次并很快产出下一个区块的节点,只会损失一点收入和一丝分数;一直不回来的节点则会持续损失。
暂停
连续第四次错过轮次时,节点会被暂停:
- 它退出出块者抽签,因此它的轮次不再让所有人白白浪费一轮;
- 它保留在注册表中的席位,但按缺席计算,因此什么也赚不到,分数持续下降;
- 它不再计入准入节奏的席位数和每一项三分之二计数,脊链的签名者名单除外(见 三分之二规则)。
短暂的空档永远不会使节点被暂停:如果它在最近 20 个区块内产出过自己的区块,第四次错过不会使它被暂停(但这次错过仍会被计入)。
要恢复,被暂停节点的软件会发送一个 ping:一份由节点自身密钥发出的在线证明,手续费为 0,每个 120 区块窗口内最多一次,且只有被暂停的节点发出时才有效。它是一笔 QueueAttendance 交易(类型 59),与排队节点用来表明自己在线的交易类型相同。ping 让节点以观察期身份重返抽签。它从不抹去错过记录,也不会停止分数的损失;只有当节点在接下来的某一个轮次产出区块时,损失才会停止。
除名
当节点的分数降到零时,它就会被除名。它的席位关闭,锁定质押的 90% 退还给所有者,10% 进入长效池(ZBC 从不销毁;见 ZBC 从不销毁)。除名永远不会让活跃节点少于三个;当这一下限生效时,由“最后可见”时间决定先保留谁。节点签署的回执出现在区块中,就标志着它被看到;这份回执除了这个“最后可见”标记之外,不改变任何东西。
每个节点都从 20% 起步,因此一个沉默的节点能撑多久,取决于它陷入沉默时的分数:
| 节点陷入沉默时的分数 | 少于 2,880 个节点 | 5,760 个节点 | 10,000 个节点 |
|---|---|---|---|
| 20%(起始分数) | 2 天 | 4 天 | 6.9 天 |
| 60% | 6 天 | 12 天 | 20.8 天 |
| 100% | 10 天 | 20 天 | 34.7 天 |
回升比下降慢三倍:节点少于 2,880 个时,一个产出全部区块并附带回执的节点从 0 升到 100% 需要 30 天,从 20% 升到 100% 需要 24 天。信任赢得慢,失去快。
相关规则
- 所有者若在节点处于缺席或暂停状态时将其移除,会损失 10% 的质押(见 退出注册表)。
- 新节点在成熟之前什么也赚不到:成熟需要准入后经过 4 个单位并产出一个自己的区块(见 成熟与收益)。
- 被证实的双签算作一次错过,并使该出块者在其下一个自己的区块之前处于缺席状态(见 双签(equivocation))。
- 这条路径上的每个数字(5 分、单位、起始分数)都是该链的创世参数。