📜  区块链默克尔树

📅  最后修改于: 2020-12-18 03:17:59             🧑  作者: Mango

区块链默克尔树

Merkle树是区块链技术的基本组成部分。它是一种数学数据结构,由不同数据块的哈希组成,可作为一个块中所有事务的摘要。它还允许对大量数据中的内容进行有效且安全的验证。它还有助于验证数据的一致性和内容。比特币和以太坊都使用Merkle Trees结构。默克尔树也被称为哈希树

Merkle Tree的概念以Ralph Merkle的名字命名,Ralph Merkle于1979年对该概念申请了专利。从根本上讲,它是一个数据结构树,其中每个叶子节点都用一个数据块的哈希标记,而非叶子节点则用其子节点的标签的加密哈希标记。叶节点是树中的最低节点。

默克尔树如何工作?

默克尔树通过产生整个交易集的数字指纹,将所有交易存储在一个块中。它允许用户验证交易是否可以包含在块中。

默克尔树是通过重复计算节点的哈希对来创建的,直到仅剩一个哈希为止。此哈希称为Merkle Root或Root Hash。 Merkle树以自下而上的方式构建。

每个叶节点都是事务数据的哈希,非叶节点是其先前哈希的哈希。 Merkle树位于二叉树中,因此它需要偶数个叶节点。如果事务数为奇数,则将最后一次哈希重复一次,以创建偶数个叶节点。

上面的示例是Merkle树(即Binary Merkle Tree )的最常见和最简单的形式。一个块中有四个事务: TX1TX2TX3TX4 。在这里,您可以看到顶部的哈希是整个树的哈希,称为Root HashMerkle Root 。每个这些被重复散列,并将其存储在每个叶节点,从而导致哈希0,1,2,和3连续对叶节点然后在父节点通过散列Hash0HASH1总结,导致Hash01,并分别对Hash2Hash3进行哈希处理,生成Hash23 。然后再次对两个哈希( Hash01Hash23 )进行哈希处理,以生成Root Hash或Merkle Root。

Merkle Root存储在块标题中。区块头是比特币区块的一部分,在挖掘过程中会得到哈希值。它包含Merkle树中当前块中最后一个块的哈希,一个Nonce和所有事务的Root Hash。因此,在块标题中使用Merkle根可以防止事务篡改。由于此“根哈希”包括该块内所有事务的哈希,因此这些事务可能会节省磁盘空间。

Merkle树维护数据的完整性。如果交易的任何单个细节或交易顺序发生变化,那么这些变化将反映在该交易的哈希中。此更改会将Merkle树级联到Merkle根,从而更改Merkle根的值,从而使该块无效。因此,每个人都可以看到Merkle树允许快速简单地测试特定交易是否包含在集合中。

默克尔树有三个好处:

  • 它提供了一种维护数据完整性和有效性的方法。
  • 作为证明,它有助于节省内存或磁盘空间,并且计算简单,快速。
  • 他们的证明和管理要求跨网络传输少量信息。