一个字段的两辈子
以太坊合并之前,区块头里的难度字段承担工作量证明的核心记账:网络用总难度值衡量链的累积算力。2022 年 9 月 15 日合并完成后,出块权从矿工转到质押验证者,这个字段在共识上失去了存在意义。协议没有删掉它——删一个区块头字段代价太大——而是做了一场“换心手术”:字段的位置、宽度、参与哈希计算的方式一字不动,里面的内容整个换成了信标链的随机数混合值 RANDAO mix。
执行层客户端从转换块(合并的最后一个区块之后的第一块)起必须把该字段设为前一块对应的信标状态 RANDAO 混合值。原先读取难度值的 DIFFICULTY(0x44)操作码保留原地址、原 gas 成本,但返回的值改成了这个随机数,并按规范改名为 PREVRANDAO。

RANDAO 是怎么攒出来的
RANDAO 不是某个中心发的彩票机。信标链的每个出块 slot,被选中的验证者在自己提议的区块里提交一个承诺过的随机数;新slot的随机数混合值,是旧混合值与当前提议者提交的数值做异或滚动累积。承诺在先、公开在后:提议者提前暴露承诺,出块时才揭示原值。这条流水线的产物,就是每块递增、链上所有人可复算的 RANDAO mix。
为什么不能拿它当彩票
很多合约第一次读到 PREVRANDAO 时都动过同一个念头:这是链上免费随机源,可以做抽奖、空投、稀有度。危险在于信息结构:提议者先知道混合值,再决定自己提不提这个块。只要一个提议者能从“换一个随机数”中获利超过放弃提议的奖励,他就可以悄悄丢弃自己的slot,等下一个提议者给出更有利的值。slot 的替换成本在常态下很低,所以 PREVRANDAO 只适合“操纵收益低于成本”的场景,比如分片样式的选择器、与利益无关的抽签,绝不适用高价值单注抽奖。规范文档也反复提醒这一点。
与难度炸弹的另一条线
另一个常见混淆:难度炸弹(difficulty bomb)是工作量证明时代用来制造出块困难、倒逼迁移到权益证明的机制。合并本身完成时,这条时间线的任务已经终结;EIP-4399 处理的是字段改名与取值来源,不是炸弹的续命或解除。读旧文章时留意语境:难度字段变零、难度值恒定、PREVRANDAO 取代难度,讲的是同一件事的三个切面,但和难度炸弹不是同一回事。
怎么读它
对普通用户,区块浏览器上这个字段一般标作 Difficulty 或 PrevRandao,值是一个 256 位十六进制数。对开发者,任何合约要接入随机性,应优先选择预言机或专用随机协议;直接用 PREVRANDAO 必须论证“提议者无利可图”。它是协议留下的一个窗口,不是保险柜。
一次肉眼观察
打开任一主流区块浏览器的合并后区块详情,对比同一页面在 2022 年 9 月前的截图:同一个字段名,数值从“每块难度”变成了十六进制的长串,且每块都在变、从不重复、看不出算力量级的稳定趋势。这就是换心手术的外观特征。难度时代的数值与全网算力正相关、变化平滑;PREVRANDAO 则是密码学混合值,相邻区块之间没有可解释的趋势。用肉眼分辨两条时代的链,读这一格就够了。
快速问答
问:PREVRANDAO 和 Beacon 链上的 RANDAO 是同一个值吗? 答:是同一个体系:区块头携带的是执行层对应到信标状态的最新混合值快照,两者按同一个累积序列对齐。
问:为什么保留 0x44 操作码不直接新增一个? 答:保留原地址让旧字节码不改写也能在新语义下继续运行,同时避免 EVM 操作码空间碎片化;gas 成本不变也维持了执行定价的连续性。
风险提示
本文解释协议字段与随机性机制,不构成任何链上博彩或开发建议。使用链上随机数的应用需自行评估提议者操纵风险。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。