区块链存储爆炸:问题,分析与优化 夸克链QuarkChain 企业专栏 热度: 769 由于去中心化区块链的一个目标是允许普通配置的计算机运行节点,因此在普通配置的计算机上强制要求 9TB+ 存储会难以达到 (编按:本文为QuarkChain创始人兼CEO周期博士撰写的技术文章,并以此文章为基础,在DApp Learning进行了技术分享讲座 ) 背景 DEFI、GameFi等去中心化应用的蓬勃发展,极大地增加了对低交易费用的高性能区块链的需求。然而,构建高性能区块链的一个关键挑战是存储爆炸。下图是取自 ETHerscan 的图表,它说明了一个以太坊全节点(存档)的区块链数据大小。 从图中我们可以看出,节点的链数据规模稳步增长,现在已经达到~9TB。由于去中心化区块链的一个目标是允许普通配置的计算机运行节点,因此在普通配置的计算机上强制要求 9TB+ 存储会难以达到。 分解存储开销 如果我们进一步分析存储使用情况,我们可以发现区块数据只占了约300GB的数据(从区块高度0到13.6M),这一数字远小于9TB。那么剩下的8.7TB数据从何而来呢? 实际上,存档节点执行所有块并保留所有历史数据,包括:
这其中,状态是这 8.7TB 的主要组成部分。所以有时,我们将存储爆炸称为“状态爆炸”。但是为什状态会如此之大? 什么是以太坊状态? 以太坊状态是一个Merkle Patrica树(MPT),其中
由于存档节点将保留所有区块的所有历史状态,这意味着 MPT 中的任何更新都将创建 O(LOG(N)) 个内部节点,并且不会删除旧的内部节点。 Geth 的全节点 为了解决存档节点状态爆炸的问题,Geth 的天才工程师们创建了一种称为“修剪”模式的新模式,该模式仅定期存储 MPT。这里我们举一个简化的例子,其中节点只保存每 3 个区块的MPT。(注意,为了获得一个不包含任何状态区块的状态,节点必须获得该区块之前最近的状态,并重放接下来的交易)。 (责任编辑:admin) |