原文标题:《How to Raise the Gas Limit, Part 2: History Growth》
撰文:Storm Slivkoff、Georgios Konstantopoulos
编译:Chris,Techub News
历史增长(History growth)是目前以太坊扩容的最大瓶颈。出乎意料的是,历史增长已经成为比状态增长更大的问题。几年之内,历史数据将超过许多以太坊节点的存储容量。
好消息是:
- 历史增长是一个比状态增长更容易解决的问题。
- 解决方案已在积极开发中。
- 解决历史增长将缓解状态增长问题。
在这篇文章中,我们将继续研究第 1 部分中的以太坊扩容问题,现在将注意力从状态增长转向历史增长。使用精细的数据集,我们的目标是从技术上理解以太坊的扩展瓶颈,以及帮助围绕以太坊 Gas 限制的最优解展开讨论。
什么是历史增长?
以太坊网络的历史包括自创世区块以来执行的所有区块和交易记录,这些数据从最初的区块一直积累到当前的区块。随着时间推移,这些区块和交易的累积形成了历史增长。
如图 1 所示,历史增长与各种协议指标和节点硬件条件之间存在关系。不同于状态增长,历史增长面临的硬件约束包括网络 IO 和存储空间。,因为新区块和交易需要在全网中传输,所以致使网络 IO 的压力十分大。同时,每个以太坊节点需要存储完整的历史记录副本,这对存储空间是一种挑战。如果历史增长的速度过快,可能会超出节点硬件的处理能力,导致节点无法与其他节点保持稳定的共识。更多关于状态增长和扩容挑战的讨论可以参考本系列文章的第一部分。
图 1:以太坊扩容瓶颈
直到最近,每个节点的大部分网络吞吐量都用于传输历史记录(例如新区块和交易)。随着坎昆升级 中引入 blob,这种情况发生了变化。blob 现在占据了节点网络活动的很大一部分。但是,blob 不被视为历史记录的一部分,因为 1) 它们只由节点存储 2 周,然后被丢弃,2) 它们不需要重复以太坊创世以来的数据。由于 (1),blob 不会显著增加每个以太坊节点的存储负担。我们将在本文的后面部分讨论 blob。
在本文中,我们将重点讨论历史增长,并讨论历史与状态之间的关系。由于状态增长和历史增长具有一些重叠的硬件约束,因此它们是相关的问题,解决一个问题可以帮助解决另一个问题。
历史增长有多快?
图 2 显示了自以太坊创世以来的历史增长率。每条垂直线代表一个月的增长。y 轴表示该月历史增长的千兆字节数。交易按其「目标地址」分类,并使用 RLP(https://ethereum.org/en/developers/docs/data-structures-and-encoding/rlp/)字节表示大小。无法轻易识别的合约被归类为「未知」。 「其他」类别包括基础设施和游戏等一系列小类别。
图 2:以太坊历史增长率随时间变化
关于以太坊历史和状态增长的几个关键观察点可以从上述图表中提炼出来:
1. 历史增长与状态增长的速度比较:最近记录的历史增长速度达到了每月 36.0 GiB 的峰值,而目前稳定在每月 19.3 GiB。相比之下,状态增长的峰值速度为每月 6.0 GiB,当前为每月 2.5 GiB。历史增长速度显著快于状态增长速度,大约是其 6 到 8 倍。
2. 历史增长率的加速与停滞:在坎昆升级 之前,历史增长率一直在加速,表现为超线性增长,这意味着整体规模的增长速度超过了二次方的增长。然而,在 Decun 之后,这种加速趋势突然停止,这标志着以太坊历史增长率的一次重大下降。
3. Rollup 对历史增长的影响:近期,历史增长的大部分源自 Rollup 技术。各个 L2(第二层)解决方案会将交易副本发布回主网,从而产生大量的历史记录。这使得 Rollup 在过去一年成为历史增长的主要驱动因素。然而,随着 Decun 的实施,L2 现在可以选择使用 blob 而非发布交易数据到历史记录中,这减少了 Rollup 对以太坊历史增长的贡献。
本文后续部分将进一步探讨历史与状态在增长和累积大小方面的比较,以及 Rollup 技术的详细分析。
以太坊历史增长最大的贡献者是谁?
不同合约类别生成的历史数量揭示了以太坊的使用模式如何随着时间的推移而演变。图 3 显示了各种合约类别的相对贡献。这是与图 2 相同的数据进行了标准化。

图 3:不同合约类别对历史增长的贡献
这些数据揭示了以太坊使用模式的四个不同时期:
- 早期(紫色):以太坊的最初几年几乎没有链上活动。这些早期合约中,大多数现在都很难识别,在图表中标记为「未知」。
- ERC-20 时代(绿色): ERC-20 标准于 2015 年底最终确定,但直到 2017 年和 2018 年才获得显著发展。ERC-20 合约在 2019 年成为最大的历史增长来源。
- DEX / DeFi 时代(棕色): DEX 和 DeFi 合约早在 2016 年就已出现在链上,并于 2017 年开始受到关注。但直到 2020 年 DeFi 夏季,它们才成为历史增长的最大类别。DeFi 和 DEX 合约在 2021 年和 2022 年的部分时间占据了历史增长的 50% 以上。
- Rollup 时代(灰色): 2023 年初,L2 Rollup 开始执行比主网更多的交易。在坎昆升级 之前的几个月里,它们生成了大约 2/3 的以太坊历史记录。
每个时代都代表着比之前更复杂的以太坊使用模式。随着时间的推移,复杂性可以看作是以太坊扩展的一种形式,它无法通过每秒交易量等简单指标来衡量。
在最近的数据月份(2024 年 4 月)中,Rollup 不再产生大部分历史记录。目前尚不清楚未来的历史记录是否源自 DEX 和 DeFi,或者是否会出现一些新的使用模式。
那 blob 又如何呢?
Dencun 硬分叉引入了 blob,显著改变了历史增长动态,它允许 Rollup 使用廉价的 blob 而不是历史记录来发布数据。图 4 放大了坎昆升级前后的历史增长率。该图表与图 2 类似,只是每条垂直线代表一天而不是一个月。

图 4:Dencun 对历史增长的影响
从该图表中我们可以得出几个关键结论:
- 自 Dencun 以来,rollup 的历史增长下降了约 2/3:大多数 rollup 已从 call data 转换为 blob,这大大减少了它们生成的历史记录量。但是,截至 2024 年 4 月,仍有一些 rollup 尚未从 call data 转换为 blob。
- 自 Dencun 以来,总历史增长下降了约 1/3: 坎昆升级仅降低了 rollup 的历史增长。其他合约类别的历史增长略有增加。即使在 Dencun 之后,历史增长仍然是状态增长的 8 倍(详情请参阅下一节)。
尽管 blob 已经降低了历史增长速度,但它们仍然是以太坊的一项新特性。目前尚不清楚在 blob 存在的情况下,历史增长速度会稳定在什么水平。
多快的历史增长是可接受的?
提案增加以太坊网络的 Gas 上限将直接影响历史增长率。因此,在考虑调整 Gas 上限的提案时,例如「Pump the Gas」方案,必须仔细考虑历史增长与节点硬件限制之间的平衡。
首先,评估可接受的历史增长率需要了解当前节点硬件在处理网络流量和存储需求方面的持续能力。网络连接硬件可能能长期维持不变,因为即使提高了 Gas 限制,历史增长率也不太可能立即回到 Dencun 事件前的高峰。然而,随着时间推移,存储历史数据的负担将持续增加。基于目前的存储策略,节点上的存储硬盘最终将无可避免地被历史数据填满。
图 5 展示了以太坊节点的存储负担随时间的变化,并基于 2024 年 4 月的数据预测了未来三年的存储增长趋势。根据未来的使用模式和 Gas 限制的可能调整,这一增长率可能会有所上升或下降。

图 5:历史记录、状态和全节点存储负担的大小
从该图中我们可以得出几个关键结论:
- 历史记录占用的存储空间大约是状态的 3 倍。这种差异还会随着时间的推移而增大,因为历史增长速度大约是状态的 8 倍。
- 1.8 TiB 是临界阈值,许多节点将被迫升级其存储硬盘。2TB 是常见的存储硬盘大小,仅提供 1.8TiB 的可用空间。请注意,TB(1 万亿字节)与 TiB(= 1024 ^ 4 字节)是不同的单位。对于许多节点运营商来说,「真正的」临界阈值甚至更低,因为合并后验证器必须与执行客户端一起运行共识客户端。
- 临界阈值将在 2 到 3 年内达到。提高任何数量的 Gas 限制都会相应加快这一时间的到来。达到这一阈值将给节点运营商带来不小的维护负担,并需要购买额外的硬件(例如 300 美元的 NVME 驱动器)。
与状态数据不同,历史数据是仅附加的,访问频率要低得多。因此,理论上可以将历史数据与状态数据分开存储在更便宜的存储介质上。这可以通过 Geth 等一些客户端来实现。
除了存储容量之外,网络 IO 是历史增长的另一个主要限制。与存储容量不同,网络 IO 限制不会在短期内给节点带来问题,但这些限制对于未来增加 Gas 限制将变得很重要。
要了解典型以太坊节点的网络容量可以支持多少历史增长,必须知道历史增长与各种网络健康指标之间的关系,例如重组率、时隙未命中、最终未命中、证明未命中、同步委员会未命中和区块提交延迟。这些指标的分析超出了本文的范围,但可以在先前对共识层健康状况的调查中找到更多信息。此外,以太坊基金会的 Xatu 项目一直在构建公共数据集,以加快此类分析。
如何解决历史增长问题?
历史增长问题相较于状态增长,可能更易于解决。一个潜在的解决方案是通过候选提案 EIP-4444,该提案能显著改变以太坊节点的存储需求。EIP-4444 建议将节点所需保存的以太坊历史数据从全部历史缩减至仅保存最近一年的数据。实施这一提案后,数据存储将不再是阻碍以太坊扩容的主要瓶颈,这也意味着将来增加 Gas 上限将不受当前的存储限制约束。
此外,从长远看,如果不采用 EIP-4444,历史数据的快速增长可能会迫使网络参与者定期升级其硬件以应对日益增长的存储需求。这对网络的长期可持续发展是不利的。
图 6 展示了在未来三年内,实施 EIP-4444 后,每个节点的存储负担预计会有怎样的变化。这一图表绘制了较浅线条,表明在 EIP-4444 生效后节点的存储压力将会减轻。这与图 4 所示的未实施 EIP-4444 的情况形成对比,可以清晰地看到两种情况下的存储负担差异。
图 6:EIP-4444 对以太坊节点存储负担的影响
从该图中可以看出一些关键结论:
- EIP-4444 将使当前的存储负担减半。存储负担将从 1.2 TiB 降至 633 GiB。
- EIP-4444 将稳定历史存储负担。假设历史增长率恒定,则历史数据将以生成的速率被丢弃。
- 在 EIP-4444 之后,节点存储负担需要很多年才能达到今天的水平。这是因为状态增长将是增加存储负担的唯一因素,而状态的增长速度比历史增长慢。
在实施 EIP-4444 后,历史增长仍将带来一定程度的存储负担,因为节点将存储一年的历史记录。但是,即使以太坊达到全球规模,这个负担也不难解决。一旦历史记录保存方法被证明是可靠的,EIP-4444 的一年到期时间可能会缩短到几个月、几周甚至更短。
如何保存以太坊的历史记录?
EIP-4444 提出了一个问题:如果历史记录不由以太坊节点自己保存,那么它应该如何保存呢?历史记录在以太坊的验证、核算和分析中起着核心作用,因此保存历史记录至关重要。幸运的是,历史记录保存是一个简单的问题,只需要 1/n 诚实的数据提供者。这与需要 1/3 到 2/3 的参与者诚实的状态共识问题形成鲜明对比。节点操作员可以通过 1) 重放创世区块以来的所有交易和 2) 检查这些交易是否重现与当前区块链端具有相同的状态根来验证历史数据集的真实性。
保存历史记录的方法有很多种。
- Torrents/P2P: Torrents 是最简单、最可靠的方法。以太坊节点可以定期打包部分历史记录并将其作为公共 Torrent 文件共享。例如,一个节点可能每 100,000 个区块创建一个新的历史 Torrent 文件。像 erigon 这样的节点客户端已经在某种程度上以非标准化的方式执行了此过程。为了标准化此过程,所有节点客户端都必须使用相同的数据格式、相同的参数和相同的 P2P 网络。节点将能够根据其存储和带宽能力选择是否参与此网络。Torrents 的优势在于使用已经得到大量数据工具支持的高 lindy 开放标准。
- Portal Network:Portal Network 是专为托管以太坊数据而设计的新网络。这是一种类似于 Torrent 的方法,同时还提供了一些额外的功能,使数据验证更加容易。Portal Network 的优势在于,这些额外的验证层为轻客户端提供了实用程序,可以有效地验证和查询共享数据集。
- 云主机: AWS 的 S3 或 Cloudflare 的 R2 等云存储服务为保存历史记录提供了一种廉价且高性能的选择。然而,这种方法带来了更多的法律风险和业务运营风险,因为不能保证这些云服务始终愿意并能够托管加密货币数据。
在以太坊网络中,除了技术挑战外,实施挑战还包括一些社会性的问题。这些挑战涉及到社区成员之间协调实施细节,以确保这些变更能被直接整合到各个节点客户端中。特别是,全节点执行全量同步(从创世区块开始而不是采用快照同步)可能需要从历史记录提供商处获取数据,而非直接从以太坊节点。这种技术更改无需通过硬分叉来实现,因此可以在以太坊的下一次硬分叉 Pectra 之前进行。
此外,这些历史数据保存方法也可以应用于 L2(第二层解决方案)保存其发布到主网的 blob 数据。与简单的历史数据保存相比,blob 数据保存面临更大的挑战:1) 数据总量更大;2) blob 数据对于重放主网历史来说不是必需的。尽管如此,对每个 L2 来说,为了重放其自身历史,保存 blob 数据仍然是必要的。因此,开发一种有效的 blob 数据保存方法对于整个以太坊生态系统来说是至关重要的。如果 L2 能够发展出强大的 blob 存储基础设施,它们同样可能会更容易地存储 L1(主网)的历史数据。
对比 EIP-4444 实施前后各种节点配置的存储需求将是非常有益的。图 7 展示了不同类型以太坊节点的存储负担。其中,状态数据涵盖账户和合约信息,历史数据包括区块和交易信息,而存档数据则包括了一组可选的数据索引。这些数据的字节数基于最新的 reth 快照,但是其他节点客户端的数据应该与此相近。

图 7:不同以太坊节点类型的存储负担
换句话说,
- 存档节点存储状态数据和历史数据以及存档数据。当有人希望能够轻松查询历史链状态时,可以使用存档节点。
- 全节点仅存储历史数据和状态数据。当今大多数节点都是全节点。全节点的存储负担大约是存档节点的一半。
- EIP-4444 之后的全节点仅存储状态数据和最近一年的历史数据。这将节点的存储负担从 1.2 TiB 减少到 633 GiB,并使历史数据的存储空间达到稳定状态值。
- 无状态节点,又称「轻节点」,不存储任何数据集,能够立即在链的末端进行验证。一旦 Verkle 尝试或其他状态承诺方案添加到以太坊,这种节点类型就成为可能。
最后,还有一些额外的 EIP 可以限制历史增长率,而不仅仅是适应当前增长率。这在短期内有助于保持在网络 IO 约束内,在长期内有助于保持在存储约束之内。尽管 EIP-4444 对于网络的长期可持续性仍然是必要的,但这些其他 EIP 将有助于以太坊在未来更有效地扩展:
- EIP-7623:重新定价 call data,使某些 call data 过多的交易更加昂贵。使这些使用模式更加昂贵将迫使其中一些从 call data 转换为 blob。这将降低历史增长率。
- EIP-4488:对每个区块中可包含的 call data 总量施加限制。这将对历史记录的增长速度施加更严格的限制。
这些 EIP 比 EIP-4444 更容易实现,因此它们可能作为 EIP-4444 投入生产之前的短期权宜之计。
结束语
本文的目的是通过数据来理解 1) 历史增长的工作原理和 2) 解决该问题的方法。本文中的许多数据难以通过传统的方式获取,因此我们希望公开这些数据为历史增长问题提供一些新见解。
历史增长作为以太坊扩容的瓶颈尚未得到足够的重视。即使不增加 Gas 上限,以太坊当前保存历史记录的惯例也会迫使许多节点在几年内升级硬件。幸运的是,这不是一个难以解决的问题。EIP-4444 中已经有一个明确的解决方案。我们认为应该加快实施此 EIP,以便为未来的 Gas 上限增加留出空间。


