区块链- Merkle树

目录:https://blog.csdn.net/qq_40452317/article/details/89646633 

下图可以看出,区块是有区块头和区块体构成(https://blog.csdn.net/qq_40452317/article/details/89875394), 每个区块都包含了产生于该区块的所有交易,且以Merkle树表示。

Merkle树是一种哈希二叉树,它是一种用作快速归纳和校验大规模数据完整性的数据结构。这种二叉树包含加密哈希值。术语“树”在计算机学科中常被用来描述一种具有分支的数据结构。

在比特币网络中,Merkle树被用来归纳一个区块中的所有交易,同时生成整个交易集合的数字指纹,且提供了一种校验区块是否存在某交易的高效途径。

生成一棵完整的Merkle树需要递归地对哈希节点对进行哈希,并将新生成的哈希节点插入到Merkle树中,直到只剩一个哈希节点,该节点就是Merkle 树的根。在比特币的 Merkle树中两次使用到了SHA256算法,因此其加密哈希算法也被称为 double-SHA256。

当 N 个数据元素经过加密后插入 Merkle 树时,你至多计算 2*log~2~(N) 次就能检查出任意某数据元素是否在该树中,这使得该数据结构非常高效。

Merkle树是自底向上构建的。在如下的例子中,我们从 A、B、C、D 四个构成 Merkle 树树叶的交易开始。

所有的交易都并不存储在Merkle树(储存在区块体中)中,而是将数据哈希化,然后将哈希值存储至相应的叶子节点。这些叶子节点分别是 H~A~、H~B~、H~C~和 H~D~:

                                HA=SHA256(SHA256(TransactionA))

将相邻两个叶子节点的哈希值串联在一起进行哈希,这对叶子节点随后被归纳为父节点。 例如,为了创建父节点 H~AB~,子节点A和子节点B的两个32字节的哈希值将被串联成64字节的字符串。随后将字符串进行两次哈希来产生父节点的哈希值:

                               HAB=SHA256(SHA256(H~A~+H~B~))

继续类似的操作直到只剩下顶部的一个节点,即 Merkle 根。产生的 32 字节哈希值存储在区块头,同时归纳了四个交易的所有数据。下图展示了如何通过成对节点的哈希值计算Merkle树的根。

因为Merkle树是二叉树,所以它需要偶数个叶子节点。如果仅有奇数个交易需要归纳,那最后的交易就会被复制一份以构成偶数个叶子节点,这种偶数个叶子节点的树也被称为平衡树。如下图C 节点被复制了一份。

由四个交易构造Merkle树的方法同样适用于从任意交易数量构造Merkle树。在比特币中,在单个区块中有成百上千的交易是非常普遍的,这些交易都会采用同样的方法归纳起来,产生一个仅仅32字节的数据作为Merkle根。在下图中你会看见一个从 16个交易形成的树。

需要注意的是,尽管图中的根看起来比所有叶子节点都大,但实际上它们都是32字节的相同大小。无论区块中有一个交 易或者有十万个交易,Merkle根总会把所有交易归纳为32字节。

为了证明区块中存在某个特定的交易,一个节点只需要计算log~2~(N)个32字节的哈希值,形成一条从特定交易到树根的认证路径或者Merkle路径即可。

随着交易数量的急剧增加,这样的计算量就显得异常重要,因为相对于交易数量的增长, 以基底为2的交易数量的对数的增长会缓慢许多。这使得比特币节点能够高效地产生一条10或者12个哈希值(320~384 字节)的路径,来证明了在一个巨量字 节大小的区块中上千交易中的某笔交易的存在。

在下图中,一个节点能够通过生成一条仅有4个32字节哈希值长度(总128字节)的Merkle路径,来证明区块中存在一笔交易K

该路径有4个哈希值(在图中由蓝色标注)H~L~、H~IJ~、H~MNOP~和 H~ABCDEFGH~。由这4个哈希值产生的认证路径,再通过计算另外四对哈希值H~KL~、H~IJKL~、H~IJKLMNOP~ 和 Merkle 树根(在图中由虚线标注),任何节点都能证明 H~K~(在图中由绿色标注)包含在 Merkle 根中。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值