本文详细介绍了以太坊从工作量证明转向权益证明后,开发者需关注的若干重要变化,包括区块时间缩短、随机性生成方法的变化以及多块矿工可提取价值(MEV)对安全性的影响。尤其是如何在新机制下重评安全逻辑,以应对潜在的攻击向量。
当以太坊从工作量证明(proof-of-work)转为权益证明(proof-of-stake)时,开发者需要注意应用层的一些变化。这些变化可能会影响在 ETH 1 下当前安全的协议在 ETH 2 下的安全性。
block.difficulty
作为伪随机源的合约向后兼容,因此开发者不需要进行更改。在本文中,我们将深入探讨这些变化以及它们可能引起的问题的潜在场景。我们将从最不重要到最重要的变化进行讨论,因为最后两个是相互关联的。
开发者需要考虑的最简单的变化是块时间的减少。 块时间↗ 指的是挖掘一个新块所需的时间。
平均块时间将从约 13 秒的相对变化变为精确的 12 秒,除非由于验证者离线或未及时提交区块而错过一个槽。
对开发者的建议:
如果你的智能合约使用平均工作量证明块时间,你可能需要考虑在计算中 incorporar 12 秒的权益证明块时间。
许多流行的 DeFi 应用程序使用依赖于平均块时间的公式。例如, Compound的公式↗ 用于计算利息付款,使用的 blocksPerYear值↗ 源于约 15 秒的块时间。合并后,该公式可以更新为使用 12 秒的块时间,更准确地计算利息支付。
block.difficulty
的随机性如果你的合约依赖于 block.difficulty
来构造伪随机性,以下是需要注意的另一个小变化。
开发者通常会使用 block.difficulty
返回的值作为其应用程序中伪随机性的来源,通过与其他值混合。
大多数开发者都知道,在链上无法生成真正的随机性,因为 EVM 是确定性的。然而,若保护的经济价值少于攻击者通过影响随机性获得的金额,有时伪随机数已经足够。
合并后,EVM 的 0x44 操作码(当前返回 DIFFICULTY)将被 PREVRANDAO 取代,PREVRANDAO 是由信标链在前一个区块中提供的随机性信标的输出。请注意,PREVRANDAO 不应作为真正随机性的来源。如果合约的安全性依赖于真正的随机数,那么应使用像 Chainlink\ VRF↗ 这样的 oracle 服务来读取链上的数据。
对开发者的建议:
此更新是向后兼容的,因此使用 DIFFICULTY 操作码进行伪随机性计算的合约在合并后仍将正常工作。
有一个不太可能的警告:如果你的合约要求 block.difficulty
返回的值在 64 位内可表示(即 < 2^64),那将是一个问题,因为 PREVRANDAO 将 返回一个在完整的 256 位字段内的值↗。
开发者需要注意的最重要变化是验证者(类似于 ETH 1 中的矿工)控制两个连续区块的可能性增加。
在 ETH 2 中, 验证者↗ 将接管交易排序的责任,反馈给矿工。验证者将同时提议和验证新出现的区块。根据 Flashbots↗ 的研究,可能会出现一个大型验证者池在一个纪元内产生两个连续的槽。从同一文章引用:“这可能通过将连续槽的数量集中在单个实体上来实现多区块 MEV 提取,并可能开启新的攻击路径。”
即使生产两个连续区块的概率较低,由于提议者槽在每个纪元开始时是分配和已知的,可能会逐渐演变出一个市场,贿赂提议者将某个交易包含或移除在区块中。
这是一个新兴的研究领域,因此安全建议仍在不断发展。让我们探讨一些场景,其中多区块 MEV(MMEV)可能会影响在 ETH 1 下本来安全的协议的安全性。
使用 MMEV 进行攻击的一种可能途径在 TWAP Oracle\ 攻击:容易做比说难?↗ 中有所描述。
一个控制两个连续区块的攻击者可以通过操纵 TWAP 价格几乎不花成本地获利:
在区块 1 中:
在区块 2 中:
Torgin Mackinga, TWAP Oracle 攻击:容易做比说难?↗ 的作者之一,指出↗ 在权益证明(POS)下,攻击者可以在知道他们控制下一个区块的情况下通过简单地使用 Flashbots 提交他们的第一笔交易来执行此攻击。
由于 MMEV 将创造有利可图的新价值提取场景,Flashbots 很可能会适应这些新机会。因此,这一攻击机会很可能会被纳入 Flashbot 寻找者的交易排序算法。
重申一下我们之前所覆盖的,ETH 2 正在用 PREVRANDAO 取代 0x44 操作码 DIFFICULTY。
PREVRANDAO 如何工作?
正如其名所示,PREVRANDAO 操作码返回前一个区块的 RANDAO 值。
来自 eth2book↗ 的数据显示,“RANDAO 只是一个聚合器,逐步从贡献者那里收集随机性。因此,随着每个区块,提议者将随机贡献混合到现有的 RANDAO 值中。”
信标链使用 RANDAO 生成合理的随机数,这对于提议者选择和每个纪元的委员会分配的安全性至关重要。如果你对具体情况感兴趣,我强烈建议阅读 eth2book 的 随机性章节↗,以获得非常易于理解的解释。
使用 PREVRANDAO 的 MMEV 机会
提议者可以在第一次诚实的 RANDAO 揭露发生之前,有限时间内影响 PREVRANDAO。提议者的影响力相对于他们通过诚实提议选择或贿赂能够控制的槽的数量。
例如,假设一个提议者被选中为两个连续区块的提议者。在他们的第一个区块之前,他们在一个依赖于 block.prevrandao 生成伪随机数的游戏合约中下注。由于提议者控制两个连续的槽,他们可以探测依赖于 block.prevrandao 的四种可能结果,并提议其中对他们最有利的一种。这可以意味着在槽 1 中不提议一个区块,或同时在槽 1 和槽 2 中提议,或这些的任何排列。
此外,由于提议者控制哪些交易被包含在区块中,他们可能会审查一个交易 “以强制其包含到下一个区块中,从而强制其使用提议者提前已知的 RANDAO 混合。”↗
对开发者的建议:
EIP-4399 提案↗ 建议开发者“使你的应用程序依赖于具有合理前瞻性的未来随机性”,通过使用公式 K + N + E,其中 K 是一个纪元的结束,N 是对纪元的前瞻,E 是纪元 N + 1 中的几个槽。
在实践中,开发者应在承诺(即,出价)与使用伪随机性(即,投掷骰子)之间实施时间延迟,以选择特定结果。
EIP 使用四个纪元的前瞻作为例子,大约是 25 分钟。目前尚不清楚使用较短前瞻时间的权衡是什么。
如果你是计划使用 PREVRANDAO 的开发者,那么EIP-4399 作者之一 Mikhail Kalinin 的这部分例子↗ 可能会很有帮助。
Zellic 专注于保护新兴技术。我们的安全研究人员在从财富 500 强到 DeFi 巨头的最有价值目标中发现了漏洞。
开发者、创始人和投资者信任我们的安全评估,以便快速、自信地交付,并且没有重大漏洞。凭借我们在现实世界的进攻性安全研究背景,我们发现其他人所遗漏的内容。
联系我们↗,以获得更高效的审计。真正的审计,而非流程审核。
- 原文链接: zellic.io/blog/eth2-proo...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!