以太坊:以太坊存储爆炸问题的分析与优化

编按:本文为QuarkChain创始人兼CEO周期博士撰写的技术文章,并以此文章为基础,在DAppLearning进行了技术分享讲座。

DeFi、GameFi等去中心化应用的蓬勃发展,极大地增加了对低交易费用的高性能区块链的需求。然而,构建高性能区块链的一个关键挑战是存储爆炸。下图是取自Etherscan的图表,它说明了一个以太坊全节点的区块链数据大小。

从图中我们可以看出,节点的链数据规模稳步增长,现在已经达到~9TB。由于去中心化区块链的一个目标是允许普通配置的计算机运行节点,因此在普通配置的计算机上强制要求9TB存储会难以达到。

区块

状态

交易收据

这其中,状态是这8.7TB的主要组成部分。所以有时,我们将存储爆炸称为“状态爆炸”。但是为什状态会如此之大?

以太坊客户端Prysm发布v4.0.4版本,包含主网问题关键修复:5月16日消息,以太坊客户端Prysm宣布推出v4.0.4版本,此版本包含自上一个版本以来的许多优化。这是继最近的以太网主网问题之后的首个完整版本,强烈建议立即升级到他的版本。[2023/5/16 15:04:55]

什么是以太坊状态?

以太坊状态是一个MerklePatrica树,其中

叶子节点是地址(0x...)=>帐户的映射,其中帐户存储与地址关联的余额、nonce等

内部节点维护树结构,以便可以快速计算整个树的哈希根

由于存档节点将保留所有区块的所有历史状态,这意味着MPT中的任何更新都将创建O(log(N))个内部节点,并且不会删除旧的内部节点。

以太坊客户端Akula开发人员将不再维护或运行该项目:金色财经报道,以太坊客户端项目Akula开发人员宣布将不再维护或运行该项目,因为他们无法与新宣布的具有类似功能且由知名加密风险投资公司 Paradigm 运营的竞争对手项目Reth竞争。但Akula代码仍然可用,因为它是开源的。

据悉,Akula 是一个用 Rust 编写的高性能以太坊客户端。以太坊客户端是允许节点读取网络上的块并与智能合约交互的软件应用程序。以太坊核心开发人员 Artem Vorotnikov 于 2021 年开始与一小群开发人员将该项目构建为开源客户端实现。(the block)[2022/11/24 8:05:15]

通过定期存储MPT,状态的存储大小显著减少。据Etherscan数据,目前Geth全节点的区块链数据大小约为1TB。

Tether CTO:以太坊合并后计划支持ETH2:7月31日消息,Tether CTO Paolo Ardoino在社交平台讨论以太坊合并后USDT是否会支持POW以太坊分叉链时表示,我们计划支持ETH2,对合并后的以太坊2.0的支持将是无缝的。这与我们对POW或POS的偏好无关,Stablecoin应该负责任行事,避免对用户的干扰。[2022/7/31 2:49:51]

在不存储历史MPT的情况下,一个Geth节点的存储大小可以进一步减少到447G。通过减去300GB的区块数据,我们推断状态大小约为150GB。

币安智能链。截至2021年12月8日,BSC已有:

约984GB链上数据,其中区块约占550GB,状态约占400GB。

20.6623亿笔交易,100TPS

以太坊L2网络总锁仓量为57.2亿美元:金色财经报道,L2BEAT数据显示,截至3月3日,以太坊Layer2上总锁仓量为57.2亿美元。其中锁仓量最高的为扩容方案Arbitrum,约31.1亿美元,占比54.55%。其次是dYdX,锁仓量9.6亿美元,占比17.22%。[2022/3/3 13:33:46]

如果我们进一步用交易数量来预测数据大小,我们可以得到:

如果TPS为100,即~3,153MTPY

1年后,总TX~5,219M,区块~1.375TB,状态~1.085TB

3年后,总TX~11,525M,区块~3.025TB,状态~2.387TB

如果TPS为150,即~4,730MTPY

1年后,总TX~6,796M,区块~1.809TB,状态~1.427TB

CME微型以太坊期货合约推出后两周交易量为11.5万份:12月22日消息,芝商所(CME)在12月6日推出微型以太坊期货。在截至12月17日的两周内,微型以太坊期货共有115000份合约易手。

CME集团股票指数和另类投资产品全球负责人Tim McCourt表示,“自两周前推出以来,微型以太坊期货合约的参与度迅速增长,我们对客户迄今为止的强劲采用和支持感到鼓舞。”

尽管如此,与5月3日推出的微型比特币期货的早期表现相比,市场对微型ETH期货的反应似乎不温不火。根据该交易所提供的数据,微型比特币期货最初两周的交易量为224151份。(CoinDesk)[2021/12/22 7:56:48]

3年后,总TX~16,256M,区块~4.327TB,状态~3.414TB

综上所述,对于BSC来说,如果保持目前的速度甚至更高,则很快就会达到以太坊存档节点相同的存储大小,这是普通计算机几乎无法运行的。

具有极高TPS区块链的存储爆炸问题

如果我们对一个极高TPS的区块链做一个更大胆的假设,这个数字会变成多少?我们来考虑一个具有1000TPS的区块链并分析其区块和状态大小,将是:

假设tx大小约为100字节,每年区块所需的存储量为1000(TPS)*100*365*24*3600=2.86TB

假设MPT有100亿账户,我们预计状态大小将为150G/0.18B*10B=8.3TB

将这些数字放在一起,我们很容易得出一个结论,这是大多数普通配置计算机将无法承受的要求!

优化

为了优化存储成本,我们必须将限制放宽为兼容EVM而不是兼容以太坊。即,我们必须构建/运行另一个支持EVM的链,而不是高度优化的以太坊客户端。

~10B*50100GB=600GB,大约是MPT版本的1/10!

虽然使用普通KV会带来巨大的好处,但一个主要问题是我们无法在如此短的区块间隔内计算每个区块的状态后哈希,这意味着我们将失去以太坊的以下好处:

快速同步:下载任何区块的状态并通过重放剩余的区块来快速同步网络

分叉检测:来自对等方新创建的区块是否会导致与本地执行区块的状态不同。

为了启用快速同步,我们有一个周期性的快照区块。一个快照区块包含前状态哈希这一附加信息,即前一个快照区块的后状态哈希:

非快照区块不维护状态哈希,而是具有增量哈希,其中包含该区块的所有交易事务的原始数据库操作的哈希。这使得分叉检测成为可能!

我们使用交易前状态哈希来代替以太坊中区块的交易后状态哈希。原因是节点不能立即计算状交易后的状态哈希,但是通过使用交易前状态哈希,节点可以使用整个epoch间隔来计算哈希。例如,假设状态哈希计算每秒处理10M的状态数据,那么计算600GB的整个状态将需要600GB/10M~16.67小时

计算状态前哈希的流程如下:

1.当一个快照区块被接收并最终确定时,它的KV状态被快照,并创建一个后台线程来迭代所有KV条目并计算哈希。

2.当下一个快照区块被创建时,计算出的状态前哈希值将存储在该区块中。同样,节点将创建KV的另一个快照并在后台计算其哈希。

3.当下一个快照区块被创建时,节点除了存储状态前哈希之外,节点现在可以释放快照区块的KV快照,这意味着来自快照区块以来所有被删除/更新的数据将被自动垃圾回收

其结果意味着,要存储状态,节点只需要最多两个KV快照。

最新的快照区块的交易执行前状态快照,即快照区块的交易执行后状态

快照区块之后的完整区块

我们可以对存储成本进行简单的数学计算:假设epoch持续时间为2周,则区块重放大小为

2*14*24*3600*100*1000=224GB!

而且,这里的数字不会随着时间的推移而增长!

不仅是区块,状态存储消耗了很多的空间

当TPS>1000时,存储空间用量高得令人望而却步

我们提出对区块和状态进行优化:

区块大小从每年2.86TB减少到224GB

状态大小从8.3TB减少到600GB

一台2TB的普通配置计算机应该能满足长时间运行节点的条件

缺点:轻节点无法验证状态中的一个数据

致谢

感谢dapp-learning主办此次活动。

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

地球链

ICP比特币:每周矿业资讯(1227-0102)

1、 HashrateIndex:北美上市矿业公司十一月更新表明中国打击挖矿所带来的盈利窗口已关闭:7月份每T的平均BTC收益为0.00000904BTC/TH.

TRXDAO:ZT創新板即將上線PRISM

親愛的ZT用戶: ZT創新板即將上線PRISM,並開啟PRISM/USDT交易對。具體上線時間如下:交易:2021年12月30日18:05; PRISM 項目簡介:PRISM是Solana上的一.

[0:15ms0-0:589ms