被罚的验证者别再排到出块:EIP-8045与大规模惩罚后的空槽 图 1
被罚的验证者别再排到出块:EIP-8045与大规模惩罚后的空槽 · 图 1

一个没人认领的合法空位

信标链每个槽位都要点名一位提议者出块,点名范围是全体活跃验证者。这里藏着一个别扭的角落:被惩罚的验证者在规则上仍留在活跃集合里一段时期——他们的质押被逐步强制退出,但退出是分批的、要排队。在这个窗口里,抽签仍可能点到他们的名字。被点到的验证者就算出块,状态转换函数里的检查也会判定该区块无效,因为规则明文要求提议者未被惩罚。结果就是槽位被占住又无人能合法使用,网络上出现一串合法的空槽。个别验证者被惩罚时无关痛痒,大规模惩罚事件则是另一回事:一次事故波及数万验证者时,排班表里混进大量不可能出块的点名额,链的活跃度肉眼可见地下滑,若恰逢网络动荡,错过槽还会拖慢整个恢复过程。

改法:排班时先把这些人筛掉

EIP-8045 的方案朴素得像改一行过滤条件:生成每轮提议者名单时,候选池从全体活跃验证者改为活跃且未被惩罚的验证者。规范文本给出的实现就是把带 slashed 标记的索引排除在搅乱计算的输入之外。文本也讨论了另一条实现路线——照常从全体验证者里点名,点到被惩罚者再补点——两种做法在概率上都等价于从合格集合里按权重抽签,而前置筛选的实现更简单,也保证排班表的完整性不受惩罚事件影响。

前提条件与公平性追问

这份提案不是孤立存在的,规格里写明它依赖 EIP-7917。理解这层依赖要看一段历史:早期以太坊的提议者抽签结果会被链上发生的惩罚事件扰动——任何一次惩罚入账,未来的点名序列都会重排,连已经公布一段的窗口都可能变。为了稳定性,旧设计宁可容忍被惩罚者留在候选池。EIP-7917 把未来若干轮的排班提前锁进信标状态之后,惩罚事件不再能改写已定的名单,前置筛选的最后一块顾虑被搬开。至于公平性,提案的安全考量部分回答得很干脆:对没有被惩罚的验证者,抽签的随机性与按权重分布完全不变,改动只是把不合格的人请出候选池,他们本来就不被允许出块。测试方向也因此明确:验证被惩罚者不再被点名、排班表在惩罚事件下保持完整、已公布的名单不被事后改写。

状态与边界

按官方仓库,这份 EIP 标注为 Review 阶段,规范文本署名 Francesco D’Amato 与 Barnabas Busa 两位作者,依赖关系里包含提前排班机制。Review 在 EIP 流程里表示文本进入细化审议,不等于已排进升级。它也不改变惩罚本身的判定条件、罚金数额与退出排队速度,只是让排班表不再把槽位浪费给不可能合法出块的人。

风险提示:本文涉及质押机制的技术介绍,不构成投资建议,不构成对任何质押产品收益或安全性的评价。验证者规则以官方规范为准。

排班表的提前量

理解这项改动,得知道排班表是提前写好的。按所依赖的 EIP-7917,未来一段轮次的提议者名单会被预先计算并保存在信标状态里,任何人可以查询下一轮的出块者。旧时代里这件事有个棘手的副作用:惩罚是链上事件,一旦入账,抽签输入变化会让后续所有点名人选重排,公布的名单形同虚设,因此规范宁可让被罚者继续留在池子里换稳定。提前排班把这个两难拆掉——名单锁定后发生的惩罚改不了已定的表,把被罚者从池子里筛掉只影响未来的新表,不再制造重排。测试条款据此列出三件要盯的事:被罚者不再被点中、发生惩罚后排班表依旧完整、锁定窗口内的名单不被事后改动。对质押用户,它属于出事之后的止损设计,不是惩罚的替代品。