以太坊成长之痛:成功背后的技术挑战

本文深入分析以太坊区块链因规模扩张导致的技术挑战,包括数据库查询效率下降、燃气成本调整历史,以及通过EIP-1884和EIP-2929等解决方案优化网络性能和安全性的技术细节。

以太坊成长之痛:成功背后的技术挑战

作者:Hubert Ritzdorf,ChainSecurity 高级工程师

过去几年,以太坊获得了巨大的采用。这种采用表现为更多智能合约和更多地址的出现。虽然这无疑是一个巨大的成功,但它与导致反复出现问题的设计选择之一发生了冲突。我们将简要回顾这一设计以及我们如何走到今天这一步的简短历史。

以太坊的持久存储可以简单地看作一个数据库。除其他外,它存储所有地址及其 ETH 余额。其中一些地址恰好是智能合约。对于这些合约,存储还包含它们的代码和所有持久变量。

以太坊采用的增长转化为数据库的增长,如下表所示:

[按回车或点击查看完整尺寸图片] https://etherscan.io/chartsync/chaindefault(2021年5月18日)

随着这个数据库的增长,数据库查找开始变得越来越耗时。数据库查找在各种情况下都是必要的,特别是当一个智能合约调用另一个智能合约时(例如通过 CALL 操作码)。然后,EVM 需要加载被调用合约的信息。每当智能合约通过 SLOAD 操作码加载其持久变量之一时,也需要这些查找。

所有 EVM 操作都带有一定的燃气成本。这里讨论的相关操作码(例如 CALL 和 SLOAD)通常具有固定的燃气成本[1]。固定成本在简单性方面显然很好,但显然与前面描述的节点随时间推移而增长的执行成本相冲突。

历史上,这在 2016 年 10 月的 EIP-150 中首次调整,当时 CALL 的成本从 40 增加到 700,SLOAD 的成本从 50 增加到 200。这是对严重降低网络性能的不同攻击的回应。

2019 年,Martin Holst Swende 进行了一项分析,强调以太坊节点在 SLOAD 操作上花费的时间越来越多。因此,燃气成本和执行成本之间的平衡不再正确。因此,EIP-1884 将 SLOAD 的燃气成本从 200 提高到 800。

同年早些时候,Daniel Perez 和 Benjamin Livshits 发表了他们论文《Broken Metre: Attacking Resource Metering in EVM》的早期版本,概述了如何生成具有高执行时间的交易。当我们重现他们的结果时,我们意识到其中一些结果高度依赖于缓存和/或区块高度,这意味着在一个区块中执行缓慢的交易在另一个区块中可能很快。

因此,我们开始寻找一个更通用的攻击向量,这将使攻击更加现实。我们意识到,对于所有可用的客户端,不存在的账户查找成本相当高。因此,我们设计了一个执行以下操作的智能合约:

  1. 通过 GAS 操作码将"随机"地址推送到堆栈
  2. 测量该地址的余额
  3. 通过从堆栈中移除结果来忽略它

我们的合约将只是重复这三个步骤,直到燃气耗尽。考虑到巨大的地址空间,预计几乎没有一个地址会存在。因此,需要进行大量成本高昂的不存在账户查找。

正如我们提交给以太坊基金会的详细说明,这导致单个区块的执行时间在 75 到 90 秒之间,具体取决于使用的节点。EIP-1884 改善了情况,但仍然允许执行时间超过 30 秒。

讨论了该问题的不同解决方案,包括基于数据库结构的动态操作码定价。最终,选择了一个双重策略:

  • go-ethereum 实现了一个状态快照,允许以更高的存储消耗为代价进行恒定时间查找。
  • EIP-2929 增加了 SLOAD、CALL 和相关操作码的燃气成本,同时通过区分"热"和"冷"状态更紧密地反映执行成本。该 EIP 作为 2021 年 4 月柏林硬分叉的一部分生效。

这两个解决方案共同提供了非常强大的保护,同时也带来了一些额外的好处。

经验教训

对于一个活跃、快速发展的网络如以太坊,很难平衡燃气和执行成本。这种对网络效率和安全重要的平衡需要不时重新建立,这可能会给开发者和用户带来问题。

在相当长的一段时间里,状态增长一直是 DLT 系统关注的问题。在以太坊的情况下,它导致了燃气和执行成本之间的危险不平衡。我们相信其他系统目前正遭受类似问题,或者很快就会遭受。虽然少数系统密切关注并已采取措施限制状态增长,但其他系统可能被迫进行设计或工程更改。

最后,我们要感谢以太坊基金会,特别是 Martin Holst Swende 和 Péter Szilágyi,感谢他们极其引人入胜和信息丰富的互动,以及他们在管理局势方面的出色工作。

[1] CALL 的燃气成本实际上取决于不同的条件,但简单地调用另一个合约一直与固定成本相关联。

关于我们 ChainSecurity 的使命是在区块链生态系统中建立信任,使这项新兴技术能够在成熟组织、政府和区块链公司中发挥其潜力。

我们有能力在您路径的每一步指导和支持您——从探索如何使用 DLT 和智能合约,到在您的智能合约启动前进行评估,再到在您的智能合约部署后对其进行监控。如果您想了解更多关于智能合约安全的信息,或者有兴趣与我们合作,请访问 www.chainsecurity.com

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计