**默克尔树 (Merkle Trees )**是区块链技术中的一个基本概念。它们是一种特殊的二叉树,用于对大量信息进行编码。Merkle Trees 是从下到上“构建”的,并允许验证树中是否存在某些值,而无需遍历树的每个元素。这在区块链应用中可能非常有用。
Merkle Trees 是一种哈希树,其中每个叶节点都用数据块的密码哈希标记,每个非叶节点都用其子节点标签的密码哈希标记。大多数哈希树都是是二元的(每个节点有两个子节点),但它们也可以有更多的子节点。
(参考using-merkle-trees-for-nft-whitelists)
树的所有叶节点(即没有任何其他子节点的节点),都包含需要编码的数据的哈希值,要在树中编码的值始终只是叶节点的一部分。由于它是二叉树,每个非叶节点都有两个孩子。当您从叶节点向上移动时,父节点将拥有叶节点组合哈希的哈希,依此类推。最终将到达单个顶级节点,称为 Merkle Root 树根。
假设我们有 4 个交易:“交易A”、B、C 和 D。它们都在同一个块中执行。这些交易中的每一个都将被哈希。让我们分别称这些哈希为“哈希 A”、B、C 和 D。
以下是这些交易的 Merkle Tree:
使用 Merkle Root 验证有效性
当这些交易汇总到一个块中时,块头将包含 Merkle Root,Hash ABCD。到目前为止,所有矿工都拥有所有交易的副本,因此拥有所有交易哈希。任何矿工都可以按需重建 Merkle 树,这意味着每个矿工都可以针对同一组交易独立到达同一个 Merkle Root。
这也允许任何矿工验证欺诈交易。假设有人试图引入虚假交易E而不是交易 D。因为此交易与交易 D 不同,所以哈希也会不同。Transaction E的Hash就是Hash E。C和E的Hash加在一起就是Hash CE,与Hash CD不同。当哈希 AB 和 CE 一起哈希时,你得到哈希 ABCE。由于哈希 ABCE 与哈希 ABCD 不同,我们可以得出交易 E 是欺诈性的结论。
矿工可以在自己的区块中重新计算 Merkle Root 并尝试将该版本发布到区块链,但由于每个其他矿工都有不同的 Merkle Root,因此欺诈矿工很容易被发现。