Merkle树介绍

默克尔树(Merkle树)又叫哈希树,是区块链数据存储运用到的一个重要的技术算法。
简单来说,哈希树(默克尔树)中,每个节点都标有一个数据块的加密哈希值。哈希树可以用来验证任何一种在计算机中和计算机之间存储、处理和传输的数据。它们可以确保在点对点网络中数据传输的速度不受影响,数据跨越自由的通过任意媒介,且没有损坏,也没有改变。
区块链并非一个独立的个体,而是许多区块组合而成,这些区块会通过哈希值的帮助连接在一起,我们知道每一个区块都会拥有数据的交换,可以是一个,也可以是100多个,那么如果我们想要找出区块本身的哈希值,我们该怎么做呢?是把整个区块组合起来形成一个哈希值呢?还是要找到每个交易的哈希值?现在如果你想找到每个交易的哈希值,你必须存储所有的哈希值,这样一个区块就不会只有1个哈希值,而是有100个哈希值,但是这不是我们想要的结果。我们更希望只得到一个哈希值。其中一个实现的方法就是借助默克尔树。

在这里插入图片描述

乍一看默克尔树会觉得它十分杂乱,但实际上它的结构非常简单。每一棵树都会有一个根,一组枝条,然后叶子从枝条的底部长出。
那么要如何建立这棵树呢?让我们想象一下,在一个区块中,我们有8个数据交换,我们开始收集每个交易的哈希值,那么对于8个数据交换,我们将会有8个哈希值。现在,我们要做的是就找到第一个和第二个的值,然后是第三个和第四个,以此类推,直到最终得到这样的图表:
在这里插入图片描述

一旦我们有了所有的集体哈希,我们就可以再次将它们组合起来,如下图:
在这里插入图片描述

最后在完成上述步骤后,我们将回到树的根部,最终的默克尔树则会入下图所示:

在这里插入图片描述

最后我们会将所有的图表进行整理,得到1到8的哈希值,然后给整个区块和里面所有的交易标记上一个整体的哈希值。
在这个例子中,我们可以看到最后得到的值是一个偶数,但是如果是一个奇数会是怎么样呢?我们只需重复交易,如[e,f,e,f]分支中所示的那样。
在这里插入图片描述

最后,当我们在根部将所有这些数值组合在一起时,我们将得到默克尔树的根部,只有1个区块的哈希值。这在设计区块链时,是非常有用的,因为不需要存储和处理所有区块的哈希值,只需要将每个区块进行单独处理和存储,比必须处理每个区块内存储的100个哈希值要高效得多。
技术交流请加微信:
在这里插入图片描述

本文借鉴于https://zhuanlan.zhihu.com/p/385615350

猜你喜欢

转载自blog.csdn.net/qq_41547320/article/details/125616444
今日推荐