默克尔树有时候也被称为哈希树,顾名思义,就是存储哈希值的一棵树。默克尔树是一种二叉树数据结构,它的叶子是数据块,非叶子节点是两个子节点的哈希。一个默克尔树是自下而上构建的,通过不断计算两个节点的哈希值,直到头部只有一个默克尔树根。区块链中,这种数据结构的特点是通过数学算法,可以非常方便地验证区块中的交易数据。
他于1979 年为该想法申请了专利。从根本上说,它是一个数据结构树,其中每个叶节点都用数据块的哈希标记,非叶节点则用其子节点的标签的加密哈希标记。叶节点是树中的最低节点。
默克尔树的好处提供了一种维护数据完整性和有效性的方法。有助于节省内存或磁盘空间作为证明,计算简单快捷。他们的证明和管理需要通过网络传输少量信息。默克尔树是如何工作的?Merkle 树通过生成整个交易集的数字指纹将所有交易存储在一个块中。它允许用户验证交易是否可以包含在块中。
Merkle 树是通过重复计算节点的散列对直到只剩下一个散列来创建的。这个散列称为默克尔根,或根散列。Merkle 树以自下而上的方法构建。
每个叶节点都是交易数据的散列,非叶节点是其先前散列的散列。Merkle 树是一棵二叉树,所以它需要偶数个叶子节点。如果有奇数个交易,最后一个哈希将被复制一次以创建偶数个叶节点。
上面的例子是最常见、最简单的默克尔树形式,即二叉默克尔树。一个区块中有四个交易:TX1、TX2、TX3和TX4。在这里您可以看到,有一个顶部哈希,它是整个树的哈希,称为Root Hash或Merkle Root。每一个都被重复散列,并存储在每个叶节点中,产生 Hash 0、1、2 和 3。然后通过散列Hash0和Hash1 将连续的叶节点对汇总在父节点中,从而产生Hash01,并分别散列Hash2和Hash3,导致Hash23。然后再次对两个散列(Hash01和Hash23)进行散列以生成根散列或默克尔根。
Merkle Root 存储在区块头中。区块头是比特币区块的一部分,在挖矿过程中获得哈希值。它包含了最后一个区块的哈希值、一个 Nonce 以及当前区块中所有交易的根哈希值在 Merkle 树中。因此,在区块头中拥有 Merkle 根可以使交易防篡改。由于这个Root Hash 包含了区块内所有交易的散列值,这些交易可能会节省磁盘空间。
Merkle Tree 维护数据的完整性。如果交易的任何单个细节或交易的顺序发生变化,那么这些变化就会反映在该交易的哈希中。这种变化会将默克尔树级联到默克尔根,改变默克尔根的值,从而使区块无效。所以每个人都可以看到 Merkle 树允许快速简单地测试特定交易是否包含在集合中。