本文探讨了以太坊的历史增长问题,这一问题已成为其扩展的最大瓶颈。文章详细分析了历史数据的增长速度、产生的主要原因,并提出了解决方案,特别是EIP-4444的实施,这将显著减少以太坊节点的存储负担,促进网络的可持续发展。
历史增长当前是以太坊扩容的最大瓶颈。 有些意外的是,历史增长已经成为一个比状态增长更大的问题。在未来几年内,历史数据将超出许多以太坊节点的存储能力。
好消息是:
在这篇文章中,我们将继续从第一部分研究以太坊的扩容问题,现在将注意力从状态增长转向历史增长。利用高分辨率数据集,我们的目标是 1)建立对以太坊扩容瓶颈的技术理解,2)帮助框定关于什么是最优以太坊 gas 限制的讨论。
这篇文章是关于以太坊扩容的系列博客的第二部分。 第一部分 关于状态增长,第二部分关于历史增长,第三部分关于状态访问,第四部分则关于 gas 限制。
历史 是以太坊在其生命周期中执行的所有区块和交易的集合。这是同步从创世区块到当前链顶所需的数据。历史增长 是随着时间推移而累积的新区块和新交易。
图 1 显示了历史增长与各种协议指标和以太坊节点硬件限制的关系。历史增长受到与状态增长不同的一套硬件限制的限制。历史增长对网络 IO施加压力,因为新的区块和交易必须在整个网络中传输。历史增长也对节点的存储空间施加压力,因为每个以太坊节点存储历史的完整副本。如果历史增长足够快以超出这些硬件限制,节点将无法再与其对等方达成稳定的共识。有关状态增长和其他扩容瓶颈的概述,请参见本文系列的第一部分。
图 1. 以太坊扩容瓶颈
直到最近,每个节点的大部分网络吞吐量用于传输历史(例如新的区块和交易)。随着在Dencun硬分叉中引入 blobs,这种情况发生了变化。blobs 现在占据了节点网络活动的很大一部分。然而,blobs 不被视为历史的一部分,因为 1)它们在节点上仅存储 2 周后即被丢弃,2)它们在从创世区块回放链时并不需要。由于(1),blobs 不会显著增加每个以太坊节点的存储负担。我们将在本文的后面的部分讨论 blobs。
在这篇文章中,我们将重点放在历史增长上,并也触及历史与状态之间的关系。由于状态增长和历史增长共享一些重叠的硬件限制,它们是相关的问题,并且解决一个问题可以帮助解决另一个问题。
图 2 显示了自以太坊创世以来的历史增长速率。每个垂直条代表一个月的增长。y 轴表示该月历史增长的千兆字节数。交易按其“收件地址”分类,并使用其RLP字节表示大小。无法轻易识别的合约被分类为“未知”。“其他”类别包括基础设施和游戏等一系列小类别。
从这个图表可以得到一些关键的结论:
每个合约类别生成的历史量揭示了以太坊使用模式随时间演变的情况。图 3 显示了不同合约类别的相对贡献。这是与图 2 相同的数据,归一化为 100%。
这些数据揭示了以太坊使用模式的四个不同时代:
每个时代代表了比之前更复杂的以太坊使用模式。随着时间的推移,复杂化可以被视为一种未通过简单的如每秒交易数等指标捕捉到的以太坊扩容形式。
在最近一个月的数据中,2024 年 4 月,滚动层不再生成大部分历史。目前尚不清楚未来的历史是起源于 DEX 和 DeFi,还是将出现某种新的使用模式。
在 Dencun 硬分叉中引入 blobs 显著改变了历史增长的动态,使得滚动层能够使用廉价的 blobs 发布其数据,而不是历史。图 4 放大了 Dencun 升级日期附近的历史增长率。该图类似于图 2,不同之处在于每个垂直条表示一天而不是一个月。
从这张图中可以得出几个关键结论:
尽管 blobs 减少了历史增长,但它们仍然是以太坊的新添加内容。历史增长在涓滴中会在哪里稳定尚不确定。
提高 gas 限制将增加历史增长速率。提出提高 gas 限制的建议(例如Pump the Gas)因此必须考虑历史增长与每个节点的硬件瓶颈之间的关系。
要确定可以接受的历史增长率,从现代节点硬件能够维持当前现状的时间入手是有帮助的,包括网络和存储。网络硬件可能会无休止地维持现状,因为历史增长速率不太可能在 gas 限制增加之前恢复到 Dencun 之前的峰值。然而,历史的存储负担会随着时间的推移不断增加。在当前存储政策下,每个节点的存储驱动器最终不可避免地会被历史填满。
图 5 显示了以太坊节点的存储负担随时间的变化,并预测了在未来 3 年内这一存储负担可能会增长。预测是基于 2024 年 4 月的增长率。在使用模式或 gas 限制的未来变化中这个增长率可能会上升或下降。
从这一图形中可以得出一些关键结论:
与状态数据不同,历史数据是只追加的,访问频率也较低。因此,理论上可以将历史数据存储在与状态数据分开的更便宜的存储介质中。这可以通过一些客户端来完成,比如geth。
除了存储容量,网络 IO 是历史增长的另一个主要硬件限制。与存储容量不同,网络 IO 限制在短期内不会对节点造成问题,但在未来提高 gas 限制时,这些限制将会变得重要。
要了解典型以太坊节点的网络容量能够支持多少历史增长,需要描述历史增长与多种网络健康指标之间的关系,如重组率、插槽缺失、最终性缺失、证明缺失、同步委员会缺失和区块提交延迟。这些指标的分析超出了本文章的范围,但可以在先前对共识层健康的调查中找到更多信息 [1] [2] [3] [4]. 此外,以太坊基金会的Xatu项目正在建立公共数据集,以加速这些类型的分析。
历史增长是一个比状态增长更容易的问题。它几乎完全通过候选提案EIP-4444来解决。该EIP要求每个节点从保留整个以太坊历史变更为仅保留一年的历史。在实施 EIP-4444 后,数据存储将不再是以太坊扩容的瓶颈,即使在长期内伴随大幅 gas 限制增加。 EIP-4444 对于网络的长期可持续性是必要的,否则历史将增长得足够快,以需要以太坊网络节点中定期的硬件更新。
图 6 显示了 EIP-4444 在未来 3 年如何影响每个节点的存储负担。该图与图 4 相同,增加的较浅的线条表示 EIP-4444 后的存储负担。
从这个图中可以得出一些关键结论:
在实施 EIP-4444 后,历史增长仍然会施加一定的存储负担,因为节点会存储一年的历史。然而,即使以太坊达到全球规模,这种负担也不会难以解决。EIP-4444 的一年到期时间一旦显示出可靠性,可能会缩短到几个月、几周甚至更短时间。
EIP-4444 提出了一个问题,即如果不通过以太坊节点本身来保存历史,该如何保存。历史在以太坊的验证、记账和分析中扮演着核心角色,因此保护它至关重要。幸运的是,历史保存是一个简单的问题,仅需要 1/n 的诚实数据提供者即可。这与状态共识问题形成对比,后者需要 1/3 到 2/3 的数据参与者诚实。节点操作员可以通过 1)从创世块回放其所有交易和 2)检查这些交易是否重现同一状态根与当前链顶一致,来验证任何历史数据集的真实性。
有多种方法可以保存历史。每种方法都应该并行部署,以最大限度地提高保存的可能性。
剩余的实施挑战更多的是社会性问题而非技术问题。以太坊社区需要在特定的实施细节上协调,以便可以直接集成到每个节点客户端中。尤其是,从创世块进行完全同步(而非快速同步)将需要从历史提供者而非以太坊节点处检索历史。这些变化在技术上不需要硬分叉,因此它们可能会早于以太坊下一个硬分叉 Pectra 实施。
所有这些历史保存方法也可以被 L2 使用,以保存它们发布到主网的 blob 数据。与历史保存相比,blob 保存 1)因总数据量更大而变得更难,2)不那么重要,因为 blobs 在回放主网历史时并不是必需的。然而,为了让每个 L2 能够回放自己的历史,blob 保存仍然是必要的。因此,某种形式的 blob 保存对整个以太坊生态系统是重要的。此外,如果 L2 开发强大的 blob 存储基础设施,它们也可能能够轻松存储 L1 历史数据。
在实施 EIP-4444 之前和之后,直接比较不同节点配置存储的数据集是很有帮助的。图 7 显示了以太坊节点类型的存储负担。状态数据 是账户和合约,历史数据 是区块和交易,存档数据 是一组可选数据索引。此表中的字节计数基于最近的 reth 快照,但其他节点客户端的数据应大致相当。
图 7:不同以太坊节点类型的存储负担
用文字表达如下:
最后,还有一些额外的 EIP 将限制历史增长速率,而不仅仅是适应当前的增长率。这对短期内控制网络 IO 限制以及长期内控制存储限制都将是有利的。虽然 EIP-4444 仍然是网络长期可持续性所必需的,但这些其他 EIP 将有助于以太坊在未来更高效地扩容:
这些 EIP 的实施难度低于 EIP-4444,因此可能会作为 EIP-4444 准备上线之前的短期权宜之计。
本文的目标是开发对 1)历史增长如何运作和 2)可以采取什么措施来解决这一问题的数据驱动理解。本文中的很多数据通常难以访问,因此我们希望提供可用数据能为历史增长问题提供新的见解。
历史增长没有受到足够的关注,作为以太坊扩容的瓶颈。即使不提高 gas 限制,以太坊当前保存历史的惯例也将迫使许多节点在几年内升级其硬件。幸运的是,这并不是一个难以解决的问题。EIP-4444 提供了一个清晰的解决方案。我们相信,这一 EIP 的实施应加快,以为未来的 gas 限制增加腾出空间。
如果你对以太坊扩容中的研究感到兴奋,可以联系storm@paradigm.xyz和georgios@paradigm.xyz。我们非常希望听到你们对这个问题的看法,并争取合作。用于本文的数据和代码可以在 Github 这里找到。
感谢 Thomas Thiery、Tim Beiko、Toni Wahrstaetter、 Oliver Nordbjerg 和 Roman Krasiuk 的评审和反馈。感谢 Achal Srinivasan 为 图 1 和 图 7 提供图形。
图 2:以太坊历史增长速率随时间的变化
双击图例以过滤
图 3:对历史增长的贡献
双击图例以过滤
图 4:Dencun 对历史增长的影响
双击图例以过滤
图 5:历史、状态和完整节点存储负担的大小
图 6:EIP-4444 对以太坊节点存储负担的影响
- 原文链接: paradigm.xyz/2024/05/how...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!