历史是以太坊在其生命周期中执行的所有区块和交易的集合。这是将链从创世块同步到链的当前尖端所需的数据。历史增长是随着时间的推移新区块和新交易的积累。
图 1显示了历史增长与各种协议指标和以太坊节点硬件限制的关系。历史增长受到与状态增长不同的一组硬件约束的限制。历史的增长给网络IO带来了压力,因为新的区块和交易必须在整个网络中传输。历史记录的增长也会给节点的存储空间带来压力,因为每个以太坊节点都存储历史记录的完整副本。如果历史增长得足够快以超过这些硬件限制,节点将不再能够与其对等方达成稳定的共识。请参阅本系列文章的第 1 部分,了解状态增长和其他扩展瓶颈的概述。
图 1:以太坊扩容瓶颈
直到最近,每个节点的大部分网络吞吐量都用于传输历史记录(例如新块和交易)。随着Dencun硬分叉中blob的引入,这种情况发生了变化。 Blob 现在占据了节点网络活动的很大一部分。然而,blob 不被视为历史的一部分,因为 1)它们在被丢弃之前仅由节点存储 2 周,2)它们不需要重放 Genesis 中的链。由于 (1),blob 不会显着增加每个以太坊节点的存储负担。我们将在本文的后面部分讨论 blob。
在这篇文章中,我们将关注历史的成长,也会触及历史与国家之间的关系。由于状态增长和历史增长共享一些重叠的硬件约束,因此它们是相关的问题,解决一个问题可以帮助解决另一个问题。
图 2显示了自以太坊创世以来随时间变化的历史增长率。每个垂直条代表一个月的增长。 Y 轴代表该月历史增长的 GB 数。交易按其“目标地址”进行分类,并使用其RLP字节表示来确定大小。无法轻易识别的合同被归类为“未知”。 “其他”类别包括基础设施和游戏等小类别的长尾。
从这张图表中可以得出一些关键结论:
每个合约类别生成的历史记录量揭示了以太坊使用模式如何随着时间的推移而演变。图 3显示了各种合同类别的相对贡献。这与图 2 的数据相同,标准化为 100%。
该数据揭示了以太坊使用模式的四个不同时代:
每个时代都代表着比之前更复杂的以太坊使用模式。随着时间的推移,复杂化可以被视为以太坊扩展的一种形式,它不能通过每秒交易量等简单指标来捕获。
在最近一个月的数据(即 2024 年 4 月)中,汇总不再生成大部分历史记录。目前还不清楚未来的历史是否会起源于 DEX 和 DeFi,或者是否会出现一些新的使用模式。
Dencun 硬分叉中 Blob 的引入显着改变了历史增长动态,允许 Rollups 使用廉价的 Blob 而不是历史来发布数据。图 4放大了 Dencun 升级日期前后的历史增长率。该图表与图 2 类似,不同之处在于每个竖条代表一天而不是一个月。
从该图中可以得出几个关键结论:
尽管 blob 减少了历史增长,但它们仍然是以太坊的新成员。目前尚不清楚在存在斑点的情况下历史增长将在何处稳定。
提高gas限制将提高历史增长率。因此,提高 Gas 限制的建议(例如Pump the Gas)必须考虑历史增长与每个节点的硬件瓶颈之间的关系。
为了找出可接受的历史增长率,首先检查现代节点网络和存储节点硬件可以维持当前现状多长时间是有帮助的。网络硬件可能会无限期地维持现状,因为在 Gas 限制增加之前,历史增长率不太可能回到 Dencun 之前的峰值。然而,历史记录的存储负担随着时间的推移不断增加。根据当前的存储策略,每个节点的存储驱动器最终都不可避免地会被历史填满。
图 5显示了以太坊节点随时间变化的存储负担,并且还预测了该存储负担在未来 3 年内可能会如何增长。使用 2024 年 4 月的增长率进行预测。随着未来使用模式或 Gas 限制的变化,该费率可能会上升或下降。
从该图中可以得出一些关键结论:
与状态数据不同,历史数据是仅附加的,并且访问的积极性要低得多。因此,理论上可以将历史数据与状态数据分开存储在更便宜的存储介质上。这可以通过像geth这样的一些客户端来完成。
除了存储容量之外,网络 IO 是历史增长的另一个主要硬件限制。与存储容量不同,网络 IO 限制在短期内不会给节点带来问题,但这些限制对于未来 Gas 限制的增加将变得很重要。
要了解典型以太坊节点的网络容量可以支持多少历史增长,有必要描述历史增长与各种网络健康指标之间的关系,例如重组率、时隙缺失、最终性缺失、证明缺失、同步委员会缺失、并阻止提交延迟。对这些指标的分析超出了本文的范围,但可以在之前对共识层健康状况的调查中找到更多信息[1] [2] [3] [4]。此外,以太坊基金会的@ethpandaops/xatu-overview">Xatu项目一直在构建公共数据集,以加快此类分析的速度。
历史增长是一个比国家增长更容易的问题。候选提案EIP-4444几乎完全解决了这个问题。这个 EIP 将每个节点从保留整个以太坊历史更改为仅保留一年的历史。实施 EIP-4444 后,即使从长远来看,气体限制大幅增加,数据存储也将不再是以太坊扩展的瓶颈。 EIP-4444 对于网络的长期可持续性是必要的,因为否则历史记录将增长得足够快,需要定期更新网络节点的硬件。
图 6显示了 EIP-4444 如何影响未来 3 年每个节点的存储负担。这与图 4 相同,添加的较细线代表 EIP-4444 后的存储负担。
从该图中可以得出一些关键结论:
实施 EIP-4444 后,历史记录增长仍会带来一定的存储负担,因为节点将存储一年的历史记录。然而,即使以太坊达到全球规模,这一负担也不难解决。一旦历史保存方法被证明是可靠的,EIP-4444 长达一年的有效期可能会缩短到几个月、几周甚至更短。
EIP-4444 提出了一个问题:如果不是由以太坊节点本身保存历史记录,那么应该如何保存历史记录。历史在以太坊的验证、核算和分析中发挥着核心作用,因此保存它至关重要。幸运的是,历史保存是一个简单的问题,只需要 1/n 诚实的数据提供者。这与需要 1/3 到 2/3 的数据参与者诚实的状态共识问题形成鲜明对比。节点操作员可以通过以下方式验证任何历史数据集的真实性:1)重放 Genesis 中的所有交易;2)检查这些交易是否重现与当前链尖端相同的状态根。
保存历史有多种方法。其中每一个可能都应该并行部署,以最大限度地提高保存的可能性。
剩下的实施挑战更多是社会性的而不是技术性的。以太坊社区需要围绕具体的实现细节进行协调,以便它们可以直接集成到每个节点客户端中。特别是,从 Genesis 执行完全同步(而不是快照同步)将需要从历史记录提供者而不是以太坊节点检索历史记录。这些变化在技术上不需要硬分叉,因此它们可以比以太坊的下一个硬分叉 Pectra 更早实施。
L2 也可以使用所有这些历史记录保存方法来保存它们发布到主网的 blob 数据。与历史保存相比,blob 保存 1) 更困难,因为总数据量更大;2) 不太重要,因为 blob 不是重播主网历史所必需的。然而,对于每个 L2 重播自己的历史,blob 保存仍然是必要的。因此,某种形式的 blob 保存对于整个以太坊生态系统来说非常重要。此外,如果 L2 开发强大的 blob 存储基础设施,他们还可以轻松存储 L1 历史数据。
直接比较 EIP-4444 前后各种节点配置存储的数据集是有帮助的。图 7显示了以太坊节点类型的存储负担。状态数据是账户和合约,历史数据是区块和交易,存档数据是一组可选的数据索引。该表中的字节计数基于最近的 reth 快照,但其他节点客户端的数字应该大致可比。
图 7:以太坊节点类型的存储负担
用语言来说,
最后,还有一些额外的生态产业园区将限制历史增长率,而不仅仅是适应当前增长率。这对于短期保持网络 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图形。
分享
目錄
历史是以太坊在其生命周期中执行的所有区块和交易的集合。这是将链从创世块同步到链的当前尖端所需的数据。历史增长是随着时间的推移新区块和新交易的积累。
图 1显示了历史增长与各种协议指标和以太坊节点硬件限制的关系。历史增长受到与状态增长不同的一组硬件约束的限制。历史的增长给网络IO带来了压力,因为新的区块和交易必须在整个网络中传输。历史记录的增长也会给节点的存储空间带来压力,因为每个以太坊节点都存储历史记录的完整副本。如果历史增长得足够快以超过这些硬件限制,节点将不再能够与其对等方达成稳定的共识。请参阅本系列文章的第 1 部分,了解状态增长和其他扩展瓶颈的概述。
图 1:以太坊扩容瓶颈
直到最近,每个节点的大部分网络吞吐量都用于传输历史记录(例如新块和交易)。随着Dencun硬分叉中blob的引入,这种情况发生了变化。 Blob 现在占据了节点网络活动的很大一部分。然而,blob 不被视为历史的一部分,因为 1)它们在被丢弃之前仅由节点存储 2 周,2)它们不需要重放 Genesis 中的链。由于 (1),blob 不会显着增加每个以太坊节点的存储负担。我们将在本文的后面部分讨论 blob。
在这篇文章中,我们将关注历史的成长,也会触及历史与国家之间的关系。由于状态增长和历史增长共享一些重叠的硬件约束,因此它们是相关的问题,解决一个问题可以帮助解决另一个问题。
图 2显示了自以太坊创世以来随时间变化的历史增长率。每个垂直条代表一个月的增长。 Y 轴代表该月历史增长的 GB 数。交易按其“目标地址”进行分类,并使用其RLP字节表示来确定大小。无法轻易识别的合同被归类为“未知”。 “其他”类别包括基础设施和游戏等小类别的长尾。
从这张图表中可以得出一些关键结论:
每个合约类别生成的历史记录量揭示了以太坊使用模式如何随着时间的推移而演变。图 3显示了各种合同类别的相对贡献。这与图 2 的数据相同,标准化为 100%。
该数据揭示了以太坊使用模式的四个不同时代:
每个时代都代表着比之前更复杂的以太坊使用模式。随着时间的推移,复杂化可以被视为以太坊扩展的一种形式,它不能通过每秒交易量等简单指标来捕获。
在最近一个月的数据(即 2024 年 4 月)中,汇总不再生成大部分历史记录。目前还不清楚未来的历史是否会起源于 DEX 和 DeFi,或者是否会出现一些新的使用模式。
Dencun 硬分叉中 Blob 的引入显着改变了历史增长动态,允许 Rollups 使用廉价的 Blob 而不是历史来发布数据。图 4放大了 Dencun 升级日期前后的历史增长率。该图表与图 2 类似,不同之处在于每个竖条代表一天而不是一个月。
从该图中可以得出几个关键结论:
尽管 blob 减少了历史增长,但它们仍然是以太坊的新成员。目前尚不清楚在存在斑点的情况下历史增长将在何处稳定。
提高gas限制将提高历史增长率。因此,提高 Gas 限制的建议(例如Pump the Gas)必须考虑历史增长与每个节点的硬件瓶颈之间的关系。
为了找出可接受的历史增长率,首先检查现代节点网络和存储节点硬件可以维持当前现状多长时间是有帮助的。网络硬件可能会无限期地维持现状,因为在 Gas 限制增加之前,历史增长率不太可能回到 Dencun 之前的峰值。然而,历史记录的存储负担随着时间的推移不断增加。根据当前的存储策略,每个节点的存储驱动器最终都不可避免地会被历史填满。
图 5显示了以太坊节点随时间变化的存储负担,并且还预测了该存储负担在未来 3 年内可能会如何增长。使用 2024 年 4 月的增长率进行预测。随着未来使用模式或 Gas 限制的变化,该费率可能会上升或下降。
从该图中可以得出一些关键结论:
与状态数据不同,历史数据是仅附加的,并且访问的积极性要低得多。因此,理论上可以将历史数据与状态数据分开存储在更便宜的存储介质上。这可以通过像geth这样的一些客户端来完成。
除了存储容量之外,网络 IO 是历史增长的另一个主要硬件限制。与存储容量不同,网络 IO 限制在短期内不会给节点带来问题,但这些限制对于未来 Gas 限制的增加将变得很重要。
要了解典型以太坊节点的网络容量可以支持多少历史增长,有必要描述历史增长与各种网络健康指标之间的关系,例如重组率、时隙缺失、最终性缺失、证明缺失、同步委员会缺失、并阻止提交延迟。对这些指标的分析超出了本文的范围,但可以在之前对共识层健康状况的调查中找到更多信息[1] [2] [3] [4]。此外,以太坊基金会的@ethpandaops/xatu-overview">Xatu项目一直在构建公共数据集,以加快此类分析的速度。
历史增长是一个比国家增长更容易的问题。候选提案EIP-4444几乎完全解决了这个问题。这个 EIP 将每个节点从保留整个以太坊历史更改为仅保留一年的历史。实施 EIP-4444 后,即使从长远来看,气体限制大幅增加,数据存储也将不再是以太坊扩展的瓶颈。 EIP-4444 对于网络的长期可持续性是必要的,因为否则历史记录将增长得足够快,需要定期更新网络节点的硬件。
图 6显示了 EIP-4444 如何影响未来 3 年每个节点的存储负担。这与图 4 相同,添加的较细线代表 EIP-4444 后的存储负担。
从该图中可以得出一些关键结论:
实施 EIP-4444 后,历史记录增长仍会带来一定的存储负担,因为节点将存储一年的历史记录。然而,即使以太坊达到全球规模,这一负担也不难解决。一旦历史保存方法被证明是可靠的,EIP-4444 长达一年的有效期可能会缩短到几个月、几周甚至更短。
EIP-4444 提出了一个问题:如果不是由以太坊节点本身保存历史记录,那么应该如何保存历史记录。历史在以太坊的验证、核算和分析中发挥着核心作用,因此保存它至关重要。幸运的是,历史保存是一个简单的问题,只需要 1/n 诚实的数据提供者。这与需要 1/3 到 2/3 的数据参与者诚实的状态共识问题形成鲜明对比。节点操作员可以通过以下方式验证任何历史数据集的真实性:1)重放 Genesis 中的所有交易;2)检查这些交易是否重现与当前链尖端相同的状态根。
保存历史有多种方法。其中每一个可能都应该并行部署,以最大限度地提高保存的可能性。
剩下的实施挑战更多是社会性的而不是技术性的。以太坊社区需要围绕具体的实现细节进行协调,以便它们可以直接集成到每个节点客户端中。特别是,从 Genesis 执行完全同步(而不是快照同步)将需要从历史记录提供者而不是以太坊节点检索历史记录。这些变化在技术上不需要硬分叉,因此它们可以比以太坊的下一个硬分叉 Pectra 更早实施。
L2 也可以使用所有这些历史记录保存方法来保存它们发布到主网的 blob 数据。与历史保存相比,blob 保存 1) 更困难,因为总数据量更大;2) 不太重要,因为 blob 不是重播主网历史所必需的。然而,对于每个 L2 重播自己的历史,blob 保存仍然是必要的。因此,某种形式的 blob 保存对于整个以太坊生态系统来说非常重要。此外,如果 L2 开发强大的 blob 存储基础设施,他们还可以轻松存储 L1 历史数据。
直接比较 EIP-4444 前后各种节点配置存储的数据集是有帮助的。图 7显示了以太坊节点类型的存储负担。状态数据是账户和合约,历史数据是区块和交易,存档数据是一组可选的数据索引。该表中的字节计数基于最近的 reth 快照,但其他节点客户端的数字应该大致可比。
图 7:以太坊节点类型的存储负担
用语言来说,
最后,还有一些额外的生态产业园区将限制历史增长率,而不仅仅是适应当前增长率。这对于短期保持网络 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图形。