历史资料激增,是否预示以太坊将面临新的重大挑战?

作者:Foresight News来源:加密信息网讯2024-05-10

内容提要 以太坊面临历史增长瓶颈,EIP-4444可解决此问题并为Gas上限增加留出空间。历史增长是随时间推移新区块和交易的积累,给网路IO和节点储存带来压力。历史增长速度快于状态增长,且呈现超线性增长,但Dencun硬分叉后增长率大幅下降。Rollup是近期历史增长的主要贡献者,但Dencun后其影响减小。不同合约类别随时间推移对历史增长的贡献也在变化。

以太坊扩容正面临「历史增长」的瓶颈,而 EIP-4444 能解决此问题,并为 Gas 上限增加留出空间。本文源自 Paradigm 所著文章,由 Foresight News 整理、编译及撰稿。

 

历史增长(History growth)是目前以太坊扩容的最大瓶颈。出乎意料的是,历史增长已经成为比状态增长更大的问题。几年之内,历史资料将超过许多以太坊节点的储存容量。

好讯息是,历史增长是一个比状态增长更容易解决的问题,解决方案已在积极开发中,且解决历史增长将缓解状态增长问题。

在这篇文章中,我们将继续研究第 1 部分中的以太坊扩容问题,现在将注意力从状态增长转向历史增长。使用精细的资料集,我们的目标是从技术上理解以太坊的扩展套件瓶颈,以及帮助围绕以太坊 Gas 限制的最优解展开讨论。

什么是历史增长?

历史是以太坊在其整个生命周期内执行的所有区块和交易的集合,它是从创世区块到当前区块的所有资料。历史增长是随著时间的推移新区块和新交易的积累。

图 1 显示了历史增长与各种协议指标和以太坊节点硬体约束之间的关系。与状态增长相比,历史增长受到一组不同的硬体约束限制。

历史增长给网路 IO 带来压力,因为新的区块和交易必须在整个网路中传输。历史增长还会给节点的储存空间带来压力,因为每个以太坊节点都会储存完整的历史记录副本。如果历史增长速度足够快以致于超出这些硬体限制,则节点将不再能够与其对等节点达成稳定的共识。

直到最近,每个节点的大部分网路吞吐量都用于传输历史记录(例如新区块和交易)。随著 Dencun 硬分叉中引入 blob,这种情况发生了变化。blob 现在占据了节点网路活动的很大一部分。但是 blob 不被视为历史记录的一部分,因为它们只由节点储存 2 周,然后被丢弃,而且它们不需要重复以太坊创世以来的资料。因此,blob 不会显著增加每个以太坊节点的储存负担。我们将在本文的后面部分讨论 blob。

在本文中,我们将重点讨论历史增长,并讨论历史与状态之间的关系。由于状态增长和历史增长具有一些重叠的硬体约束,因此它们是相关的问题,解决一个问题可以帮助解决另一个问题。

历史增长有多快?

图 2 显示了自以太坊创世以来的历史增长率。每条垂直线代表一个月的增长。y 轴表示该月历史增长的千兆位元组数。交易按其「目标地址」分类,并使用 RLP。「其他」类别包括基础设施和游戏等一系列小类别。

上述图表中的几个关键要点:

  • 历史增长速度比状态增长快 6 到 8 倍:历史增长速度最近达到峰值 36.0 GiB/ 月,目前为 19.3 GiB/ 月。状态增长速度峰值约 6.0 GiB/ 月,目前为 2.5 GiB/ 月。本文后面将介绍历史与状态在增长和累计大小方面的比较。
  • 在 Decun 之前,历史增长率一直在加速:虽然状态多年来一直呈大致线性增长(参见第 1 部分),但历史却呈超线性增长。考虑到线性增长的增长率会导致整体规模呈二次方增长,因此超线性增长的增长率会导致整体规模超过二次方增长。这种加速在 Dencun 之后突然停止。这是以太坊首次经历历史增长率的大幅下降。
  • 近期历史增长的大部分来自 Rollup:每个 L2 都会将其交易副本释出回主网。这生成了大量历史记录,并导致 Rollup 成为过去一年历史增长的最重要贡献者。然而,Dencun 允许 L2 使用 blob 而不是历史记录释出其交易资料,因此 Rollup 不再生成大部分以太坊历史记录。我们将在本文后面更详细地介绍 Rollup。

以太坊历史增长最大的贡献者是谁?

不同合约类别生成的历史数量揭示了以太坊的使用模式如何随著时间的推移而演变。图 3 显示了各种合约类别的相对贡献。这是与图 2 相同的资料进行了标准化。

这些资料揭示了以太坊使用模式的四个不同时期:

  • 早期(紫色):以太坊的最初几年几乎没有链上活动。这些早期合约中,大多数现在都很难识别,在图表中标记为「未知」。
  • 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 开始执行比主网更多的交易。在 Dencun 之前的几个月里,它们生成了大约 2/3 的以太坊历史记录。

每个时代都代表著比之前更复杂的以太坊使用模式。随著时间的推移,复杂性可以看作是以太坊扩展套件的一种形式,它无法通过每秒交易量等简单指标来衡量。

在最近的资料月份(2024 年 4 月)中,Rollup 不再产生大部分历史记录。目前尚不清楚未来的历史记录是否源自 DEX 和 DeFi,或者是否会出现一些新的使用模式。

那 blob 又如何呢?

Dencun 硬分叉引入了 blob,显著改变了历史增长动态,它允许 Rollup 使用廉价的 blob 而不是历史记录来发布资料。图 4 放大了 Dencun 升级前后的历史增长率。该图表与图 2 类似,只是每条垂直线代表一天而不是一个月。

从该图表中我们可以得出几个关键结论:

  • 自 Dencun 以来,rollup 的历史增长下降了约 2/3:大多数 rollup 已从 call data 转换为 blob,这大大减少了它们生成的历史记录量。但是,截至 2024 年 4 月,仍有一些 rollup 尚未从 call data 转换为 blob。
  • 自 Dencun 以来,总历史增长下降了约 1/3:Dencun 仅降低了 rollup 的历史增长。其他合约类别的历史增长略有增加。即使在 Dencun 之后,历史增长仍然是状态增长的 8 倍(详情请参阅下一节)。

尽管 blob 已经降低了历史增长速度,但它们仍然是以太坊的一项新特性。目前尚不清楚在 blob 存在的情况下,历史增长速度会稳定在什么水平。

多快的历史增长是可接受的?

提高 Gas 上限将增加历史增长率。因此,提高 Gas 上限的提案(例如 Pump the Gas)必须考虑历史增长与每个节点硬体瓶颈之间的关系。

要确定可接受的历史增长率,首先要了解当前节点硬体在网路和储存方面能够维持多长时间。联网硬体可能可以无限期地维持现状,因为在增加 Gas 限制之前,历史增长率不太可能回到 Dencun 之前的峰值。然而,历史的储存负担会随著时间的推移不断增加。在当前的储存策略下,每个节点的储存硬碟最终都会被历史记录填满,这是不可避免的。

图 5 显示了以太坊节点随时间变化的储存负担,并预测了未来 3 年储存负担的增长情况。预测参照 2024 年 4 月的增长率。随著未来使用模式或 Gas 限制的变化,该增长率可能会上升或下降。

从该图中我们可以得出几个关键结论:

  • 历史记录占用的储存空间大约是状态的 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 将每个节点从储存整个以太坊历史资料更改为仅储存一年的历史资料。实施 EIP-4444 后,资料储存将不再是以太坊扩容的瓶颈,从长远来看 Gas 限制增加也不在被约束。EIP-4444 对于网路的长期可持续性是必要的,否则历史增长速度会很快,需要定期更新网路节点的硬体。

图 6 显示了 EIP-4444 在未来 3 年内对每个节点的储存负担的影响。这与图 4 相同,但增加了较浅的线条,表示 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 的参与者诚实的状态共识问题形成鲜明对比。节点操作员可以通过重放创世区块以来的所有交易,以及检查这些交易是否重现与当前区块链端具有相同的状态根来验证历史资料集的真实性。储存历史记录的方法有很多种:

  • 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 储存更困难,因为总资料量大得多。此外,这不太重要,因为 blob 对于重放主网历史不是必需的。但是,对于每个 L2 重放自己的历史来说,blob 储存仍然是必要的。因此,某种形式的 blob 储存对整个以太坊生态系统都很重要。此外,如果 L2 开发出强大的 blob 储存基础设施,它们也可能能够轻松储存 L1 历史资料。

直接比较 EIP-4444 之前和之后各种节点配置储存的资料集会很有帮助。图 7 显示了不同以太坊节点型别的储存负担。状态资料是帐户和合约,历史资料是区块和交易,存档资料是一组可选资料索引。此表中的位元组数基于最近的 reth 快照,但其他节点客户端的数位应该大致相当。

换句话说,

  • 存档节点储存状态资料和历史资料以及存档资料。当有人希望能够轻松查询历史链状态时,可以使用存档节点。
  • 全节点仅储存历史资料和状态资料。当今大多数节点都是全节点。全节点的储存负担大约是存档节点的一半。
  • 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 投入生产之前的短期权宜之计。

结语

本文的目的是通过资料来理解历史增长的工作原理解决该问题的方法。本文中的许多资料难以通过传统的方式获取,因此,我们希望公开这些资料为历史增长问题提供一些新见解。

历史增长作为以太坊扩容的瓶颈尚未得到足够的重视。即使不增加 Gas 上限,以太坊当前储存历史记录的惯例也会迫使许多节点在几年内升级硬体。幸运的是,这不是一个难以解决的问题。EIP-4444 中已经有一个明确的解决方案。我们认为应该加快实施此 EIP,以便为未来的 Gas 上限增加留出空间。