内容
什么是历史成长?历史发展的速度有多快?以太坊历史的最大贡献者是什么?那么斑点呢?多少历史增长是可以接受的?历史增长如何解决?如何保存以太坊的历史?闭幕式致谢
历史增长是目前以太坊扩容的最大瓶颈。有点出乎意料的是,历史增长已经成为比状态增长更大的问题。几年之内,历史数据将超过许多以太坊节点的存储容量。
好消息是:
历史增长是比状态增长更容易解决的问题。解决方案已经在积极开发中。解决历史增长将缓解状态增长问题。
在这篇文章中,我们继续研究第 1 部分中的以太坊扩展,现在将我们的注意力从状态增长转向历史增长。使用高分辨率数据集,我们的目标是 1)建立对以太坊扩容瓶颈的技术理解,2)帮助围绕以太坊 Gas 限制的最佳程度进行讨论。
本文是有关以太坊扩容的博文系列的第 2 部分。第 1 部分是关于状态增长,第 2 部分是关于历史增长,第 3 部分是关于状态访问,第 4 部分是关于 Gas 限制。
什么是历史增长?
历史是以太坊在其生命周期中执行的所有区块和交易的集合。这是将链从创世块同步到链的当前尖端所需的数据。历史增长是随着时间的推移新区块和新交易的积累。
图 1显示了历史增长与各种协议指标和以太坊节点硬件限制的关系。历史增长受到与状态增长不同的一组硬件约束的限制。历史的增长给网络IO带来了压力,因为新的区块和交易必须在整个网络中传输。历史记录的增长也会给节点的存储空间带来压力,因为每个以太坊节点都存储历史记录的完整副本。如果历史增长得足够快以超过这些硬件限制,节点将不再能够与其对等方达成稳定的共识。请参阅本系列文章的第 1 部分,了解状态增长和其他扩展瓶颈的概述。
图 1:以太坊扩容瓶颈
直到最近,每个节点的大部分网络吞吐量都用于传输历史记录(例如新块和交易)。随着Dencun硬分叉中blob的引入,这种情况发生了变化。 Blob 现在占据了节点网络活动的很大一部分。然而,blob 不被视为历史的一部分,因为 1)它们在被丢弃之前仅由节点存储 2 周,2)它们不需要重放 Genesis 中的链。由于 (1),blob 不会显着增加每个以太坊节点的存储负担。我们将在本文的后面部分讨论 blob。
在这篇文章中,我们将关注历史的成长,也会触及历史与国家之间的关系。由于状态增长和历史增长共享一些重叠的硬件约束,因此它们是相关的问题,解决一个问题可以帮助解决另一个问题。
历史发展的速度有多快?
图 2显示了自以太坊创世以来随时间变化的历史增长率。每个垂直条代表一个月的增长。 Y 轴代表该月历史增长的 GB 数。交易按其“目标地址”进行分类,并使用其RLP字节表示来确定大小。无法轻易识别的合同被归类为“未知”。 “其他”类别包括基础设施和游戏等小类别的长尾。
从这张图表中可以得出一些关键结论:
历史增长速度比状态快约 6 倍 - 8 倍:历史增长最近达到峰值 36.0 GiB/月,目前为 19.3 GiB/月。状态增长峰值约为 6.0 GiB/月,目前为 2.5 GiB/月。历史与状态的比较,无论是增长还是累积规模,都可以在本文后面找到。在 Decun 之前,历史增长率正在迅速加快:虽然状态多年来一直大致呈线性增长(请参阅第 1 部分),但历史却一直在超线性增长。考虑到线性增加的增长率会导致总体尺寸呈二次方,因此超线性增加的增长率会导致总体尺寸快于二次方。这股加速在登存之后戛然而止。这是以太坊历史上首次出现增速大幅下滑。最近的历史增长大部分来自汇总:每个 L2 将其交易副本发布回主网。这产生了大量的历史记录,并导致汇总成为去年历史记录的最重要贡献者。然而,Dencun 使 L2 能够使用 blob 而不是历史记录来发布其交易数据,因此汇总不再生成大部分以太坊历史记录。我们稍后将在本文中更详细地研究汇总。
以太坊历史的最大贡献者是什么?
每个合约类别生成的历史记录量揭示了以太坊使用模式如何随着时间的推移而演变。图 3显示了各种合同类别的相对贡献。这与图 2 的数据相同,标准化为 100%。
该数据揭示了以太坊使用模式的四个不同时代:
早期时代(紫色):在以太坊的最初几年,链上活动很少。在这些早期合约中,大多数现在都很难识别,并且在图表中被标记为“未知”。ERC-20时代(绿色): ERC20标准于2015年底最终确定,但直到2017年和2018年才获得重大关注。ERC-20合约在2019年成为历史上最大的类别。DEX / DeFi 时代(棕色):DEX 和 DeFi 合约早在 2016 年就出现在链上,并在 2017 年开始受到关注。但直到2020 年DeFi Summer才成为历史上最大的类别。 DeFi 和 DEX 合约在 2021 年和 2022 年部分时间达到历史增长的 50% 以上的峰值。Rollup 时代(灰色):2023 年初,L2 Rollup 开始持续执行。这与他们的合约生成大量历史记录相吻合,他们在 Dencun 之前的几个月生成了约 2/3 的以太坊历史记录。
每个时代都代表着比之前更复杂的以太坊使用模式。随着时间的推移,复杂化可以被视为以太坊扩展的一种形式,它不能通过每秒交易量等简单指标来捕获。
在最近一个月的数据(即 2024 年 4 月)中,汇总不再生成大部分历史记录。目前还不清楚未来的历史是否会起源于 DEX 和 DeFi,或者是否会出现一些新的使用模式。
那么 blobs 呢?
Dencun 硬分叉中 Blob 的引入显着改变了历史增长动态,允许 Rollups 使用廉价的 Blob 而不是历史来发布数据。图 4放大了 Dencun 升级日期前后的历史增长率。该图表与图 2 类似,不同之处在于每个竖条代表一天而不是一个月。
从该图中可以得出几个关键结论:
自 Dencun 以来,汇总的历史增长量下降了约 2/3:大多数汇总已从调用数据转变为 Blob,这大大减少了它们生成的历史记录量。但是,截至 2024 年 4 月,仍有一些汇总尚未从呼叫数据切换为 blob。自Dencun以来,总历史增长下降了约1/3:Dencun仅减少了rollups的历史增长。其他合同类别的历史增长略有增加。即使在 Dencun 之后,历史增长仍然是州增长的 8 倍(详情请参阅下一节)。
尽管 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 限制的增加将变得很重要。
要了解典型以太坊节点的网络容量可以支持多少历史增长,有必要描述历史增长与各种网络健康指标之间的关系,例如重组率、时隙缺失、最终性缺失、证明缺失、同步委员会缺失、并阻止提交延迟。对这些指标的分析超出了本文的范围,但可以在之前对共识层健康状况的调查中找到更多信息[1] [2] [3] [4]。此外,以太坊基金会的Xatu项目一直在构建公共数据集,以加快此类分析的速度。
历史增长如何解决?
历史增长是一个比国家增长更容易的问题。候选提案EIP-4444几乎完全解决了这个问题。这个 EIP 将每个节点从保留整个以太坊历史更改为仅保留一年的历史。实施 EIP-4444 后,即使从长远来看,气体限制大幅增加,数据存储也将不再是以太坊扩展的瓶颈。EIP-4444 对于网络的长期可持续性是必要的,因为否则历史记录将增长得足够快,需要定期更新网络节点的硬件。
图 6显示了 EIP-4444 如何影响未来 3 年每个节点的存储负担。这与图 4 相同,添加的较细线代表 EIP-4444 后的存储负担。
从该图中可以得出一些关键结论:
EIP-4444 将使当前的存储负担减半。存储负担将从 1.2 TiB 降至 633 GiB。EIP-4444 将稳定历史存储负担。假设历史增长速度恒定,历史将以其生成的速度被丢弃。在 EIP-4444 之后,4444 之后的存储负担需要很多年才能达到今天的存储负担。这是因为状态增长将是增加存储负担的唯一因素,并且状态增长速度比历史记录慢。
实施 EIP-4444 后,历史记录增长仍会带来一定的存储负担,因为节点将存储一年的历史记录。然而,即使以太坊达到全球规模,这一负担也不难解决。一旦历史保存方法被证明是可靠的,EIP-4444 长达一年的有效期可能会缩短到几个月、几周甚至更短。
如何保存以太坊的历史?
EIP-4444 提出了一个问题:如果不是由以太坊节点本身保存历史记录,那么应该如何保存历史记录。历史在以太坊的验证、核算和分析中发挥着核心作用,因此保存它至关重要。幸运的是,历史保存是一个简单的问题,只需要 1/n 诚实的数据提供者。这与需要 1/3 到 2/3 的数据参与者诚实的状态共识问题形成鲜明对比。节点操作员可以通过以下方式验证任何历史数据集的真实性:1)重放 Genesis 中的所有交易;2)检查这些交易是否重现与当前链尖端相同的状态根。
保存历史有多种方法。其中每一个可能都应该并行部署,以最大限度地提高保存的可能性。
Torrents / P2P:Torrents是最简单、最强大的方法。以太坊节点可以定期打包部分历史记录并作为公共 torrent 文件共享。例如,节点可能每 100,000 个块创建一个新的历史 torrent 文件。像 erigon 这样的节点客户端已经在某种程度上以非标准化的方式执行此过程。为了标准化这个过程,所有节点客户端必须使用相同的数据格式、相同的参数和相同的P2P网络。节点将能够根据其存储和带宽能力选择是否参与该网络。种子的优点是使用高林迪开放标准,这些标准已经得到大型数据工具生态系统的支持。门户网络:门户网络是专门为托管以太坊数据而设计的新网络。这与种子下载的方法类似,同时还提供一些额外的功能以使数据验证更容易。门户网络的优点是这些额外的验证层为轻客户端提供了有效验证和查询共享数据集的实用程序。云主机:AWS 的S3或 Cloudflare 的R2等云存储服务为保存历史记录提供了廉价且高性能的选项。然而,这种方法带来了更多的法律风险和业务运营风险,因为不能保证这些云服务始终愿意并且能够托管加密货币数据。
剩下的实施挑战更多是社会性的而不是技术性的。以太坊社区需要围绕具体的实现细节进行协调,以便它们可以直接集成到每个节点客户端中。特别是,从 Genesis 执行完全同步(而不是快照同步)将需要从历史记录提供者而不是以太坊节点检索历史记录。这些变化在技术上不需要硬分叉,因此它们可以比以太坊的下一个硬分叉 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 尝试或将其他状态承诺方案添加到以太坊,这种节点类型就成为可能。
最后,还有一些额外的生态产业园区将限制历史增长率,而不仅仅是适应当前增长率。这对于短期保持网络 IO 限制和长期保持存储限制都有帮助。尽管 EIP-4444 对于网络的长期可持续性仍然是必要的,但这些其他 EIP 将帮助以太坊在未来更有效地扩展:
EIP-7623:对呼叫数据重新定价,以便某些具有过多呼叫数据的交易更加昂贵。使这些使用模式变得更加昂贵将促使其中一些从调用数据转换为 blob。这将降低历史增长率。EIP-4488:对每个块中可以包含的呼叫数据总量施加限制。这将对历史增长的速度施加更严格的限制。
这些 EIP 比 EIP-4444 更容易实施,因此在 EIP-4444 准备投入生产之前,它们可能可以作为短期权宜之计。
结束语
本文的目标是形成对 1) 历史增长如何运作以及 2) 如何解决这一问题的数据驱动型理解。本文中的大部分数据传统上很难访问,因此我们希望提供这些数据将为历史增长问题提供一些新颖的见解。
历史增长作为以太坊扩容的瓶颈并没有受到足够的重视。即使没有增加 Gas 限制,以太坊当前保存历史的惯例也将迫使许多节点在几年内升级其硬件。幸运的是,这并不是一个很难解决的问题。 EIP-4444 中已经有明确的解决方案。我们认为应该加快该 EIP 的实施,以便为未来 Gas 限制的增加腾出空间。