区块链数据结构之Merkle树

简介

Merkle树是一种哈希二叉树,它是一种用作快速归纳和校验大规模数据完整性的数据结构。这种二叉树包含加密哈希
值。术语“树”在计算机学科中常被用来描述一种具有分支的数据结构,但是树常常被倒置显示,“根”在图的上部同时“叶
子”在图的下部。来一张图直观体验下:

如何计算

其中HA 是数据块A的hash,........ HP数据块P的hash。HAB是 HAB=SHA256(SHA256(HA + HB))。HA和HB被连接在一起,作为HAB的输入,然后层层hash,直到产生root hash。这是完美的计算,刚好两两配对。如果出现奇数个节点怎么办?默认的做法是 一旦出现奇数个节点,那么最后那个无法配对的节点hash将会被复制一份,也就是说自己和自己配对。

有何用途

源码地址:https://github.com/1261385937/merkle

1、快速比较大量数据。对每组数据要先进行 排序,然后构建Merkle树,如果root hash一样,则2组数据一致,否则不相同。hash计算速度可以很快速度,所以可以在预计时间内完成Merkle树的构建,利用Merkle树能带来巨大的比较性能优势。

root hash天差地别,2组数据不一样。其实只有hash3的最后一个字节(3)和hash7的最后一个字节(4)不一样。

2、快速定位修改。如果某个叶子节点的数据发生改变,那么该叶子数据的hash必然会发生改变,层层传递后最终会导致root hash发生改变。通过自顶向下的查询,O(lgN)时间可以定位到哪个数据块发生改变。

index的返回值是3 ,即第4个数据块不一样。

区块链中的Merkle树

Merkle树主要用于区块链中的:

1、区块中所有交易的指纹,即root hash 。任何一个交易变动都会导致root hash改变。

2、轻量级客户端的SPV验证。

假如要验证TXB是否存在区块中,向相应的区块获取 HA,HCD。随后利用HA,HCD计算出hash root  HABCD,再与本地比区块头中的merkle root比较,如果相同,则表示TXB存在区块中。

到这,不知道有没有人想到 干嘛那么麻烦,HB直接发给相应区块,这个hash如果存在,相应区块直接返回个true不就行了?这样的话,恶意节点会作弊,直接告诉你true,即使没有存在。而想伪造一棵包含HB的Merkle树且Merkle根和本地区块头中的Merkle根相同,基本是不可能的。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值