原文作者:Storm Slivkoff 和 Georgios Konstantopoulos
原文翻译:路飞,先见之明新闻
历史增长是目前以太坊扩展的最大瓶颈。令人惊讶的是,历史增长已经成为比状态增长更大的问题。几年之内,历史数据将超过许多以太坊节点的存储容量。
好消息是:
-
历史增长的问题比状态增长的问题更容易解决。
-
A solution is already under active development.
-
解决历史增长将缓解状态增长问题。
在这篇文章中,我们将继续第一部分对以太坊扩容的研究,现在将重点从状态增长转移到历史增长。使用精炼的数据集,我们的目标是 1) 从技术上了解以太坊的扩容瓶颈,2) 帮助为有关以太坊 gas 限制最佳解决方案的讨论提供信息。
历史增长是什么?
历史是以太坊在其整个生命周期内执行的所有区块和交易的集合。它是从创世区块到当前区块的所有数据。历史增长是随着时间的推移新区块和新交易的积累。
Figure 1 shows the relationship between history growth and various protocol metrics and Ethereum node hardware constraints. History growth is limited by a different set of hardware constraints than state growth. History growth puts pressure on network IO because new blocks and transactions must be transmitted throughout the network. History growth also puts pressure on node storage space because each Ethereum node stores a complete copy of the history. If history growth is fast enough to exceed these hardware constraints, the node will no longer be able to reach a stable consensus with its peers. For an overview of state growth and other scaling bottlenecks, see 第1部分 本系列的。
图 1:以太坊扩展瓶颈
直到最近,每个节点的大部分网络吞吐量都用于传输历史记录(例如新区块和交易)。随着 Dencun 硬分叉中引入 blob,这种情况发生了变化。Blob 现在占节点网络活动的很大一部分。但是,Blob 不被视为历史记录的一部分,因为 1) 它们仅由节点存储 2 周,然后被丢弃,2) 它们不需要重复以太坊创世的数据。由于 (1),Blob 不会显著增加每个以太坊节点的存储负担。我们将在本文后面讨论 Blob。
在本文中,我们将重点关注历史增长并讨论历史与状态之间的关系。由于状态增长和历史增长有一些重叠的硬件约束,因此它们是相关的问题,解决其中一个问题可以帮助解决另一个问题。
历史增长速度有多快?
图 2 显示了以太坊诞生以来的历史增长率。每条垂直线代表一个月的增长。y 轴表示该月历史增长的千兆字节数。交易按其“目标地址”分类,并使用 RLP(https://ethereum.org/en/developers/docs/data-structures-and-encoding/rlp/)字节确定大小。无法轻易识别的合约被归类为“未知”。 “其他”类别包括基础设施和游戏等一系列小类别。
图 2:以太坊历史增长率
上图的几个关键要点如下:
-
历史的增长速度比状态快 6 到 8 倍:历史的增长速度最近达到峰值 36.0 GiB/月,目前为 19.3 GiB/月。状态的增长速度达到峰值约 6.0 GiB/月,目前为 2.5 GiB/月。本文后面将介绍历史和状态在增长和累计大小方面的比较。
-
在 Decun 之前,历史增长率一直在加速:虽然多年来状态一直呈大致线性增长(参见第 1 部分),但历史却是超线性的。鉴于线性增长率会导致整体规模呈二次方增长,超线性增长率将导致整体规模呈二次方以上增长。这种加速在 Dencun 之后突然停止。这是以太坊首次经历历史增长率的大幅下降。
-
最近的历史增长大部分来自 Rollups:每个 L2 都会将其交易的副本发布回主网。这会产生大量历史记录,并导致 Rollups 成为过去一年历史增长的最重要贡献者。然而,Dencun 允许 L2 使用 blob 而不是历史记录发布其交易数据,因此 Rollups 不再生成大部分以太坊历史记录。我们将在本文后面更详细地介绍 Rollups。
谁是以太坊历史增长的最大贡献者?
不同合约类别产生的合约历史数量揭示了以太坊的使用模式如何随时间演变。图 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 时代(灰色):L2 Rollup 在 2023 年初开始执行比主网更多的交易。在 Dencun 之前的几个月里,它们生成了以太坊历史记录的约 2/3。
每个时代都代表着以太坊比之前时代更复杂的使用模式。复杂性可以看作是以太坊随时间扩展的一种形式,无法通过每秒交易量等简单指标来衡量。
在最近的数据月(2024 年 4 月),Rollups 不再生成大部分历史记录。目前尚不清楚未来的历史记录是否会来自 DEX 和 DeFi,或者是否会出现一些新的使用模式。
那 Blob 又如何呢?
Dencun 硬分叉引入了 blob,通过允许 Rollups 使用廉价的 blob 而不是历史记录发布数据,显著改变了历史增长动态。图 4 放大了 Dencun 升级前后的历史增长率。该图表与图 2 类似,只是每条垂直线代表一天而不是一个月。
图 4:Dencun 对历史增长的影响
我们可以从该图表中得出几个关键结论:
-
自 Dencun 以来,rollup 的历史增长下降了约 2/3:大多数 rollup 已从通话数据转换为 blob,这大大减少了它们生成的历史记录量。不过,截至 2024 年 4 月,仍有一些 rollup 尚未从通话数据转换为 blob。
-
自 Dencun 以来,总历史增长下降了约 1/3:Dencun 仅降低了 rollups 的历史增长。其他合约类别的历史增长略有增加。即使在 Dencun 之后,历史增长仍然是状态增长的 8 倍(详情见下一节)。
虽然 blob 降低了历史增长率,但它们仍然是以太坊的新功能,目前尚不清楚在 blob 存在的情况下历史增长率将稳定在什么水平。
历史增长速度多快是可以接受的?
提高 Gas 上限将提高历史增长率。因此,提高 Gas 上限的提案(例如 加油 )必须考虑历史增长和各个节点硬件瓶颈的关系。
要确定一个可接受的历史增长率,我们首先需要了解当前节点硬件在网络和存储方面可以维持多长时间。网络硬件可能可以无限期地维持现状,因为在增加 gas 限制之前,历史增长率不太可能回到 Dencun 之前的峰值。然而,历史的存储负担会随着时间的推移不断增加。在当前的存储策略下,每个节点的存储硬盘最终都会被历史记录填满,这是不可避免的。
图 5 显示了以太坊节点随时间变化的存储负担,并预测了未来 3 年存储负担的增长情况。该预测指的是 2024 年 4 月的增长率。未来随着使用模式或 gas 限制的变化,增长率可能会增加或减少。
图 5:历史规模, 状态和完整节点存储负担
我们可以从该图中得出几个关键结论:
-
历史占用的存储空间大约是状态的 3 倍。随着历史的增长速度大约是状态的 8 倍,这种差异会随着时间的推移而增大。
-
1.8 TiB 是一个临界阈值,许多节点将被迫升级其存储硬盘。2 TB 是常见的存储硬盘大小,仅提供 1.8 TiB 的可用空间。请注意,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 后的存储负担。
图 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 的开放标准,该标准已经得到大量数据工具的支持。
-
门户网络: 门户网络 是一个专为托管以太坊数据而设计的新网络。它采用类似 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:重新定价通话数据,使某些通话数据过多的交易更加昂贵。使这些使用模式更加昂贵将迫使其中一些从通话数据转换为 blob。这将降低历史增长率。
-
EIP-4488:对每个区块中可包含的通话数据总量进行限制。这将对历史记录的增长速度施加更严格的限制。
这些 EIP 比 EIP-4444 更容易实现,因此它们可以作为 EIP-4444 投入生产之前的短期权宜之计。
结论
本文的目的是通过数据来理解 1)历史增长是如何运作的以及 2)如何解决这个问题。本文中的许多数据很难通过传统方式获得,因此我们希望将这些数据公开可以为历史增长问题提供一些新的见解。
历史增长作为以太坊扩展的瓶颈尚未得到足够的重视。即使不提高 Gas 上限,以太坊目前保存历史的做法也会迫使许多节点在几年内升级硬件。幸运的是,这并不是一个难以解决的问题。EIP-4444 中已经有了明确的解决方案。我们认为应该加速实施这一 EIP,为未来提高 Gas 上限留出空间。
本文来源于网络:范式:以太坊历史增长问题及解决方案详解
简述 今年的比特币减半将挖矿奖励降至 3.125 BTC,对矿工的盈利能力构成挑战。CryptoQuant 报告称,自上次减半以来,矿工哈希值已下降 30%,预计还会进一步下降。竞争加剧,成本上升,比特币网络哈希率达到 600 EH/s,影响收益。大约 10 天后,比特币社区将见证一个重大事件,即比特币减半。这一现象将使挖出一个比特币区块的奖励从 6.25 比特币减半至 3.125 比特币,给矿工的盈利能力带来压力。矿工现在正在与时间赛跑,需要更高的比特币价格来维持他们的收益。比特币矿工为何面临挑战 根据 CryptoQuant 与 BeInCrypto 分享的报告,自 2020 年 5 月上次减半以来,矿工哈希值已下跌 30%。目前价值为每太赫兹每秒 $0.11,这……