木星链 木星链
Ctrl+D收藏木星链
首页 > 以太坊 > 正文

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

作者:

时间:1900/1/1 0:00:00

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

背景

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

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

分解存储开销

如果我们进一步分析存储使用情况,我们可以发现区块数据只占了约300GB的数据,这一数字远小于9TB。那么剩下的8.7TB数据从何而来呢?

实际上,存档节点执行所有块并保留所有历史数据,包括:

以太坊Layer2上总锁仓量为42.51亿美元:金色财经报道,L2BEAT数据显示,截至目前,以太坊Layer2上总锁仓量为42.51亿美元,近7日跌4.76%。其中锁仓量最高的为扩容方案Arbitrum One,约22.26亿美元,占比52.36%,其次是Optimism,锁仓量12.04亿美元,占比28.33%。[2022/11/23 8:01:44]

区块

状态

交易收据

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

什么是以太坊状态?

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

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

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

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

数据:以太坊桥TVL达到249.5亿美元:金色财经报道,Dune Analytics数据显示,以太坊桥当前TVL达到249.5亿美元。其中锁仓量最高的5个桥分别是RoninBridge(65.31亿美元)、PolygonBridges(63.67亿美元)、AvalancheBridge(61.13亿美元)、Arbitrum Bridges(24.94亿美元)、FantomAnyswap Bridge(114.02亿美元)。[2021/12/24 8:02:29]

Geth的全节点

为了解决存档节点状态爆炸的问题,Geth的天才工程师们创建了一种称为“修剪”模式的新模式,该模式仅定期存储MPT。这里我们举一个简化的例子,其中节点只保存每3个区块的MPT。。

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

受SHIB及其模仿项目推动,以太坊平均交易费升至历史新高:根据BitInfoCharts和Blockchair的数据,以太坊交易的平均成本目前为64美元,部分原因来自对狗狗币模仿者SHIB以及SHIB模仿者的需求。(CoinDesk)[2021/5/12 21:52:31]

Geth的可快速同步的全节点

通过从创世区块开始重放所有交易来运行节点的一个问题是,重放所有交易会占用很长时间。一般来说,建立这样一个节点需要数周时间才能从创世区块赶上网络的最新状态。为了加速节点的启动过程,Geth进一步提供了一种快速同步模式,可以下载最新的稳定区块的MPT,而无需重放和维护区块之前的历史MPT。下载完MPT后,它会像全节点一样重放新区块。

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

问题

以目前以太坊447GB的存储大小和15TPS,我们预计具有1TBSSD的普通配置计算机应该能够运行以太坊节点相当长的一段时间。那么存储爆炸或状态爆炸真的存在吗?或许未来几年以太坊并不会,但假如我们可以将以太坊的虚拟机(EVM)扩展到数百或数千TPS呢?

数据:以太坊增长速度和采用率远快于比特币:Cointelegraph发文称,通过对比以太坊和比特币区块链网络在推出前五年创建的地址总数可以看出,以太坊的使用率和增长速度都比比特币快得多。虽然地址数量可以很好地衡量使用率,但由于各种原因,该指标可能并不完美。原因之一是两种网络的计算系统不同。在最初的600天里,两个网络的增长率非常相似。然而,到2017年年中,以太坊的增长率更加明显。最明显的解释是ICO热潮。成千上万个ERC20代币的创建以及随后的发行和交易导致以太坊地址创建的速率大大提高。以太坊从一开始就拥有的另一个优势,即其站在比特币和其他加密货币的肩膀上,而比特币是世界上第一个去中心化的电子货币。比特币的采用是缓慢而渐进的。其曲线斜率从未出现过像ICO繁荣时期那样的上升。[2020/7/30]

让我们将目光转向另一个基于EVM的链,币安智能链。截至2021年12月8日,BSC已有:

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

20.6623亿笔交易,100TPS

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

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

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

分析 | 8月稳定币总发行量略减,USDT供需重心偏向以太坊网络:据DAppTotal.com稳定币专题页面数据显示:截至8月31日,USDT总发行量为40.79亿美元,较上月环比降低了3,623万美元,其中OMNI-USDT总发行量为24.17亿美元,ERC20-USDT总发行量为15.5亿美元。不过,最近三周以来ERC20-USDT的链上日交易量和日交易额均超过了OMNI-USDT,USDT市场供需重心开始从OMNI(比特币)网络向ERC20(以太坊)网络偏移。新兴稳定币种的总发行量为9.77亿美元,其中USDC总发行量为4.53亿美元,占比46.4%,继续保持第一位;PAX总发行量为2亿美元,占比20.5%,排第二位;排名第三位的是TUSD,总发行量为1.99亿美元,占比20.4%;其余稳定币种DAI、GUSD、EURS、nUSD、USDx、EOSDT等共占比12.7%。其中USDx发行量为236万美元,首次被加入稳定币排行榜单中。整体而言,新兴稳定币的总发行量较上月降低3,075万美元,而USDT整体市场份额从7月份的80.3%微调至80.7%。[2019/9/2]

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

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

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

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的链,而不是高度优化的以太坊客户端。

状态存储优化

我们提出的第一个优化是使用普通的KV而不是MPT。当MPT很大时,MPT中的所有内部节点可能非常昂贵。而我们的优化将去掉MPT中的所有内部节点。假设每个账户的数据大约是50字节,我们可以节省下100亿账户的数据为:

~10B*50+100GB=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主办此次活动。

标签:以太坊USDMPTTPS以太坊币最高价格是多少钱BUSDJMPT币https://etherscan.io

以太坊热门资讯
NFT:DAOrayaki |NFT 四个新兴应用领域-ODAILY

NFT,概述:由于非同质代币在2020年末和2021年初迅速成为主流,大多数人将NFT与像素化的Twitter头像、曲线和岩石JPEG联系起来。最成功和最著名的NFT项目创造了数字艺术市场.

1900/1/1 0:00:00
SOC:社交代币“翻新”,加密圈重启 SocialFi-ODAILY

流动性挖矿能否扩耕「SocialFi」?继GameFi、NFTFi陆续迎来爆发期之后,SocialFi概念也开始活跃起来.

1900/1/1 0:00:00
POL:波卡生态一周观察丨除了插槽拍卖,如何发现波卡生态其他机会-ODAILY

Polkadot生态研究院出品,必属精品波卡一周观察,是我们针对波卡整个生态在上一周所发生的事情的一个梳理,同时也会以白话的形式分享一些我们对这些事件的观察.

1900/1/1 0:00:00
BIN:Binance Dapp 上线,如何用去中心化钱包玩转 Binance-ODAILY

币安发布的官方公告《关于下架C2CCNY交易区及地区用户清查的通知》,表示币安C2C将于2021年12月31日24:00(东八区时间)下架CNY交易区。同时,币安将对平台用户进行清查.

1900/1/1 0:00:00
UNI:如何查询和监控Uniswap上每个「币对」兑换率的变化-ODAILY

Uniswap的历史进程在研究币对兑换率之前,我们需要先了解一下什么是Uniswap。Uniswap本质上是一个在以太坊区块链上进行去中心化、无需许可的代币交换的协议.

1900/1/1 0:00:00
NFT:2021总结:区块链行业出圈态势愈来愈强,明年十大预测新鲜出炉-ODAILY

今天圣诞节了,2021即将在欣喜与担忧中结束,欣喜的是圈层在不断扩大,担忧的是日渐提高的操作门槛。 在这一年中,有收获,有感慨,有挫折,有感激.

1900/1/1 0:00:00