区块链说数据没被篡改过,是不是在骗你 ?

本文详细探讨了在区块链中,如何通过默克尔B+树解决轻节点的数据验证问题,介绍了MPT的局限性和MerklePatriciaTree的改进,以及在联盟链场景下提出的优化策略,包括磁盘读写性能提升和数据证明的高效生成与验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【背景介绍】
前文《打破K/V存储的性能瓶颈》中,我们提到用一个哈希值来反映区块链系统中所有对象的当前状态集合,并称之为“世界状态”。现在大多数区块链底层平台为了支持与其他链集成,或者为了部署在更小的终端,都会提供轻节点的功能,轻节点也就是存储少量数据的“轻量级节点”,但因为没有存储全量数据,无法对其他节点的数据进行正确性的验证。这里便需要其他节点生成一份数据证明,配合轻节点本地保存的“世界状态”来进行数据的验证。

这份数据证明是什么?又是怎么实现的?带着这份疑问,本文将详细介绍目前主流的数据证明的实现以及解决方案和优化思路。

【默克尔证明】
介绍数据证明前,我们先要了解传统的默克尔树,以及对应的证明生成和验证的流程。

默克尔树(Merkle Tree),因发明人叫Merkle,并且是树形结构而得名。如下图,默克尔树的叶节点存储数据或者数据的哈希值,任一父节点包含了其子节点总和的哈希值。
在这里插入图片描述

默克尔树最大的作用便是快速校验部分数据是否在原始数据中。

举个例子,要想验证L2在上图的这棵树上,只需要节点列表[L2,Hash0-0,Hash1]即可,通过L2可以计算出Hash0-1,通过Hash0-1与Hash0-0可以计算出Hash0,再通过Hash0与Hash1,便可以得到一个树根,再把该树根与Top Hash进行比对即可快速验证L2是否在树中。默克尔树生成数据证明以及验证数据证明的原理就是如此,生成证明时自底向上,不断获取父节点的兄弟节点,打包成数据证明;验证时通过遍历证明中的节点列表,不断进行哈希得到父节点的操作,最后可以得到树根节点,再把该树根与原树根进行比对,达到验证的目的。

这种基本的默克尔树广泛应用在区块链系统中,例如比特币中轻钱包的SPV(简单支付验证)便是应用该原理,比特币中区块记录的root便是区块中交易集合构成的默克尔树的树根,使得无需下载完整区块,只需要区

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值