如何提高gas limit,第二部分:历史增长

  • Paradigm
  • 发布于 2024-05-08 22:41
  • 阅读 54

本文探讨了以太坊的历史增长问题,这一问题已成为其扩展的最大瓶颈。文章详细分析了历史数据的增长速度、产生的主要原因,并提出了解决方案,特别是EIP-4444的实施,这将显著减少以太坊节点的存储负担,促进网络的可持续发展。

大纲

历史增长当前是以太坊扩容的最大瓶颈。 有些意外的是,历史增长已经成为一个比状态增长更大的问题。在未来几年内,历史数据将超出许多以太坊节点的存储能力。

好消息是:

  1. 历史增长是一个比状态增长更容易解决的问题。
  2. 解决方案正在积极开发中。
  3. 解决历史增长将缓解状态增长问题。

在这篇文章中,我们将继续从第一部分研究以太坊的扩容问题,现在将注意力从状态增长转向历史增长。利用高分辨率数据集,我们的目标是 1)建立对以太坊扩容瓶颈的技术理解,2)帮助框定关于什么是最优以太坊 gas 限制的讨论。

这篇文章是关于以太坊扩容的系列博客的第二部分。 第一部分 关于状态增长,第二部分关于历史增长,第三部分关于状态访问,第四部分则关于 gas 限制。

什么是历史增长?

历史 是以太坊在其生命周期中执行的所有区块和交易的集合。这是同步从创世区块到当前链顶所需的数据。历史增长 是随着时间推移而累积的新区块和新交易。

图 1 显示了历史增长与各种协议指标和以太坊节点硬件限制的关系。历史增长受到与状态增长不同的一套硬件限制的限制。历史增长对网络 IO施加压力,因为新的区块和交易必须在整个网络中传输。历史增长也对节点的存储空间施加压力,因为每个以太坊节点存储历史的完整副本。如果历史增长足够快以超出这些硬件限制,节点将无法再与其对等方达成稳定的共识。有关状态增长和其他扩容瓶颈的概述,请参见本文系列的第一部分

图 1. 以太坊扩容瓶颈

直到最近,每个节点的大部分网络吞吐量用于传输历史(例如新的区块和交易)。随着在Dencun硬分叉中引入 blobs,这种情况发生了变化。blobs 现在占据了节点网络活动的很大一部分。然而,blobs 不被视为历史的一部分,因为 1)它们在节点上仅存储 2 周后即被丢弃,2)它们在从创世区块回放链时并不需要。由于(1),blobs 不会显著增加每个以太坊节点的存储负担。我们将在本文的后面的部分讨论 blobs。

在这篇文章中,我们将重点放在历史增长上,并也触及历史与状态之间的关系。由于状态增长和历史增长共享一些重叠的硬件限制,它们是相关的问题,并且解决一个问题可以帮助解决另一个问题。

历史增长的速度有多快?

图 2 显示了自以太坊创世以来的历史增长速率。每个垂直条代表一个月的增长。y 轴表示该月历史增长的千兆字节数。交易按其“收件地址”分类,并使用其RLP字节表示大小。无法轻易识别的合约被分类为“未知”。“其他”类别包括基础设施和游戏等一系列小类别。

从这个图表可以得到一些关键的结论:

  • 历史的增长速度约为状态的 6 倍到 8 倍: 最近历史增长峰值达到 36.0 GiB/月,目前为 19.3 GiB/月。状态的增长峰值约为 6.0 GiB/月,目前为 2.5 GiB/月。在这篇文章后面可以找到历史与状态的增长和累积大小的比较。
  • 直到 Dencun 历史增长率迅速加速: 虽然状态在许多年中大致呈线性增长(见第一部分),历史却呈现出超线性增长。考虑到线性增长率导致整体大小的二次增长,因此超线性增长率导致整体大小超过二次增长。这种加速在 Dencun 后戛然而止。这是以太坊首次经历历史增长率的大幅下降。
  • 最近历史增长的主要来源是滚动层(rollups): 每个 L2 都将其交易副本发布回主网。这产生了大量历史,并使得滚动层成为过去一年历史的最重要贡献者。然而,Dencun 使得 L2 能够使用 blobs 发布其交易数据,而不是历史,因此滚动层不再生成以太坊历史的大部分。我们稍后将更详细地讨论滚动层。

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

每个合约类别生成的历史量揭示了以太坊使用模式随时间演变的情况。图 3 显示了不同合约类别的相对贡献。这是与图 2 相同的数据,归一化为 100%。

这些数据揭示了以太坊使用模式的四个不同时代:

  1. 早期时代(紫色): 在以太坊的前几年,链上活动很少。在这些早期合约中,大多数现在很难识别,并在图表中标记为未知。
  2. ERC-20 时代(绿色): ERC20 标准 在 2015 年底被最终确定,但直到 2017 年和 2018 年才获得显著的关注。ERC-20 合约在 2019 年成了最大的历史类别。
  3. DEX / DeFi 时代(棕色): DEX 和 DeFi 合约早在 2016 年就在链上出现,并在 2017 年开始获得吸引力。但直到DeFi夏季在 2020 年,它们才成为最大的历史类别。DeFi 和 DEX 合约在 2021 年和 2022 年的部分时间达到了超过 50% 的历史增长峰值。
  4. 滚动层时代(灰色): 在 2023 年初,L2 滚动层开始持续执行比主网更多的交易。这与它们的合约生成大量历史相吻合,在 Dencun 之前的几个月中,它们生成了大约 2/3 的以太坊历史。

每个时代代表了比之前更复杂的以太坊使用模式。随着时间的推移,复杂化可以被视为一种未通过简单的如每秒交易数等指标捕捉到的以太坊扩容形式。

在最近一个月的数据中,2024 年 4 月,滚动层不再生成大部分历史。目前尚不清楚未来的历史是起源于 DEX 和 DeFi,还是将出现某种新的使用模式。

那么 blobs 呢?

在 Dencun 硬分叉中引入 blobs 显著改变了历史增长的动态,使得滚动层能够使用廉价的 blobs 发布其数据,而不是历史。图 4 放大了 Dencun 升级日期附近的历史增长率。该图类似于图 2,不同之处在于每个垂直条表示一天而不是一个月。

从这张图中可以得出几个关键结论:

  • 自 Dencun 以来,来自滚动层的历史增长下降了约 2/3: 大多数滚动层已经从调用数据转变为 blobs,这大大减少了它们生成的历史量。然而,截至 2024 年 4 月,仍然存在一些滚动层没有从调用数据切换到 blobs。
  • 自 Dencun 以来,总的历史增长下降了约 1/3: Dencun 仅减少了滚动层的历史增长。其他合约类别的历史增长略有上升。即便在 Dencun 之后,历史增长仍然比状态增长大 8 倍(详细信息见下一部分)。

尽管 blobs 减少了历史增长,但它们仍然是以太坊的新添加内容。历史增长在涓滴中会在哪里稳定尚不确定。

多少历史增长是可以接受的?

提高 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次方字节)是不同的单位。在许多节点运营商的情况下,“真实”的临界阈值甚至更低,因为 Merge 后的验证者必须同时运行共识客户端和执行客户端。
  • 临界阈值将在 2 到 3 年内达到。 提高 gas 限制的任何数量都会按比例加速这个时间表。达到这个阈值将为节点运营商带来非知觉的维护负担,并需要购买额外的硬件(例如$300 NVME 驱动器)。

与状态数据不同,历史数据是只追加的,访问频率也较低。因此,理论上可以将历史数据存储在与状态数据分开的更便宜的存储介质中。这可以通过一些客户端来完成,比如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 将使当前存储负担减半。 存储负担将从 1.2 TiB 降至 633 GiB。
  • EIP-4444 将稳定历史存储负担。 假设历史增长率保持不变,历史将以与其生成相同的速度被丢弃。
  • 在实施 EIP-4444 后,需要许多年的时间才能让 post-4444 的存储负担达到今天的存储负担。 这是因为状态增长将是唯一增长存储负担的因素,并且状态增长的速度慢于历史。

在实施 EIP-4444 后,历史增长仍然会施加一定的存储负担,因为节点会存储一年的历史。然而,即使以太坊达到全球规模,这种负担也不会难以解决。EIP-4444 的一年到期时间一旦显示出可靠性,可能会缩短到几个月、几周甚至更短时间。

如何保存以太坊的历史?

EIP-4444 提出了一个问题,即如果不通过以太坊节点本身来保存历史,该如何保存。历史在以太坊的验证、记账和分析中扮演着核心角色,因此保护它至关重要。幸运的是,历史保存是一个简单的问题,仅需要 1/n 的诚实数据提供者即可。这与状态共识问题形成对比,后者需要 1/3 到 2/3 的数据参与者诚实。节点操作员可以通过 1)从创世块回放其所有交易和 2)检查这些交易是否重现同一状态根与当前链顶一致,来验证任何历史数据集的真实性。

有多种方法可以保存历史。每种方法都应该并行部署,以最大限度地提高保存的可能性。

  1. 种子文件 / P2P: 种子文件 是最简单、最强大的方法。以太坊节点可以定期打包历史的部分内容并以公共种子文件的形式共享。例如,节点每 100,000 个区块可能会创建一个新的历史种子文件。节点客户端如 erigon 已经以非标准化的方式在一定程度上执行此过程。为了标准化此过程,所有节点客户端必须使用相同的数据格式、相同的参数和相同的 P2P 网络。节点可以根据其存储和带宽能力选择是否参与此网络。种子文件的优点是使用已经被大规模数据工具生态系统支持的高泳道开源标准。
  2. 门户网络: 门户网络 是一个特别设计用于托管以太坊数据的新网络。这种方法与种子文件相似,同时还提供一些额外的功能来简化数据验证。门户网络的优势在于这些额外的验证层为轻客户端提供了高效验证和查询共享数据集的工具。
  3. 云主机: 云存储服务如 AWS 的 S3 或 Cloudflare 的 R2 提供了一个便宜且高性能的历史保存选项。然而,这种方法存在更多法律风险和运营风险,因为这些云服务不保证始终愿意和能够托管加密货币数据。

剩余的实施挑战更多的是社会性问题而非技术问题。以太坊社区需要在特定的实施细节上协调,以便可以直接集成到每个节点客户端中。尤其是,从创世块进行完全同步(而非快速同步)将需要从历史提供者而非以太坊节点处检索历史。这些变化在技术上不需要硬分叉,因此它们可能会早于以太坊下一个硬分叉 Pectra 实施。

所有这些历史保存方法也可以被 L2 使用,以保存它们发布到主网的 blob 数据。与历史保存相比,blob 保存 1)因总数据量更大而变得更难,2)不那么重要,因为 blobs 在回放主网历史时并不是必需的。然而,为了让每个 L2 能够回放自己的历史,blob 保存仍然是必要的。因此,某种形式的 blob 保存对整个以太坊生态系统是重要的。此外,如果 L2 开发强大的 blob 存储基础设施,它们也可能能够轻松存储 L1 历史数据。

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

图 7:不同以太坊节点类型的存储负担

图 7:不同以太坊节点类型的存储负担

用文字表达如下:

  • 档案节点存储状态数据和历史数据,以及档案数据。当某人希望能够容易地查询历史链状态时,使用档案节点。
  • 完整节点仅存储历史数据和状态数据。大多数节点今天都是完整节点。完整节点的存储负担大约是档案节点的一半。
  • EIP-4444 后的完整节点仅存储状态数据和最近一年的历史数据。这将节点的存储负担从 1.2 TiB 减少到 633 GiB,并使历史数据的存储足迹达到稳态值。
  • 无状态节点(也称为“轻节点”)不存储这些数据集中的任何内容,并能够立即验证链的顶端。一旦将Verkle 尝试或其他状态承诺方案添加到以太坊中,此节点类型便变得可行。

最后,还有一些额外的 EIP 将限制历史增长速率,而不仅仅是适应当前的增长率。这对短期内控制网络 IO 限制以及长期内控制存储限制都将是有利的。虽然 EIP-4444 仍然是网络长期可持续性所必需的,但这些其他 EIP 将有助于以太坊在未来更高效地扩容:

  • EIP-7623:重新定价调用数据,使某些具有过量调用数据的交易成本更高。使这些使用模式更耗费资金将推动部分交易从调用数据转向 blobs。这将降低历史增长速度。
  • EIP-4488:对每个区块中可以包含的调用数据总量施加限制。这将对历史增长的速度设定更严格的限制。

这些 EIP 的实施难度低于 EIP-4444,因此可能会作为 EIP-4444 准备上线之前的短期权宜之计。

结论

本文的目标是开发对 1)历史增长如何运作和 2)可以采取什么措施来解决这一问题的数据驱动理解。本文中的很多数据通常难以访问,因此我们希望提供可用数据能为历史增长问题提供新的见解。

历史增长没有受到足够的关注,作为以太坊扩容的瓶颈。即使不提高 gas 限制,以太坊当前保存历史的惯例也将迫使许多节点在几年内升级其硬件。幸运的是,这并不是一个难以解决的问题。EIP-4444 提供了一个清晰的解决方案。我们相信,这一 EIP 的实施应加快,以为未来的 gas 限制增加腾出空间。

如果你对以太坊扩容中的研究感到兴奋,可以联系storm@paradigm.xyzgeorgios@paradigm.xyz。我们非常希望听到你们对这个问题的看法,并争取合作。用于本文的数据和代码可以在 Github 这里找到。

感谢

感谢 Thomas ThieryTim BeikoToni WahrstaetterOliver NordbjergRoman Krasiuk 的评审和反馈。感谢 Achal Srinivasan图 1图 7 提供图形。

图 2:以太坊历史增长速率随时间的变化

双击图例以过滤

图 3:对历史增长的贡献

双击图例以过滤

图 4:Dencun 对历史增长的影响

双击图例以过滤

图 5:历史、状态和完整节点存储负担的大小

图 6:EIP-4444 对以太坊节点存储负担的影响

  • 原文链接: paradigm.xyz/2024/05/how...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Paradigm
Paradigm
Paradigm 是一家研究驱动型技术投资公司 https://www.paradigm.xyz/