Merkle 树是区块链技术的基本组成部分。它是一种由不同数据块的哈希组成的数学数据结构,作为一个块中所有交易的汇总。它还允许对大量数据中的内容进行高效和安全的验证。它还有助于验证数据的一致性和内容。比特币和以太坊都使用默克尔树结构。默克尔树也称为哈希树。
Merkle Tree 的概念以Ralph Merkle 的名字命名,他于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 树允许快速简单地测试特定交易是否包含在集合中。
Merkle 树具有三个好处:
它提供了一种维护数据完整性和有效性的方法。
它有助于节省内存或磁盘空间作为证明,计算简单快捷。
他们的证明和管理需要通过网络传输少量信息。