梅克尔树是一种由不同数据块的哈希值构成的结构,它作为所有区块内交易的摘要。它还允许对大量数据内容进行高效和安全的验证。比特币和以太坊都使用了梅克尔树结构。梅克尔树也被称为哈希树。
梅克尔树的概念以拉尔夫·梅克尔命名,他在1979年获得了这一想法的专利。它是一种树状数据结构,其中每个叶子节点都标记有数据块的哈希值,而非叶子节点则标记有其子节点的加密哈希标签。叶子节点是树中的最后一个节点。
梅克尔树通过为区块中的所有交易创建一个数字指纹来存储这些交易。它允许用户确认特定交易是否被包含在区块中。通过计算节点的哈希对来构建梅克尔树,直到只剩下一个哈希值,这个哈希值被称为根哈希或梅克尔根。梅克尔树的构建采用自下而上的方法。
每个叶子节点是交易数据的哈希值,而非叶子节点是其前一个哈希值的哈希值。梅克尔树是二叉树的一部分,因此它需要偶数个叶子节点。如果交易数量是奇数,那么最后一个哈希值将被重复一次,以生成偶数个叶子节点。
上述示例是梅克尔树最常见且最简单的形式,即二叉梅克尔树。区块中的交易数量分别是TX1、TX2、TX3和TX4。在这里,可以看到有一个顶层哈希,即整个树的哈希值,被称为根哈希或梅克尔根。每个叶子节点中的哈希值被重复哈希并存储,结果是哈希0、1、2和3。然后连续的叶子节点对在父节点中通过哈希哈希0和哈希1来总结,结果是哈希01,并且单独哈希哈希2和哈希3;结果是哈希23。这两个哈希值(哈希01和哈希23)然后再次哈希以创建根哈希或梅克尔根。
梅克尔根存储在区块头中。区块头是比特币区块的一部分,在挖矿过程中被哈希。它包含上一个区块的哈希值、Nonce和当前区块中所有交易的梅克尔树的根哈希值。区块头中的梅克尔根目录使交易防篡改。因为根哈希包含了区块内所有交易的哈希值,这些交易可以节省磁盘空间。
要了解梅克尔树对区块链技术的重要性,想象一下没有它们的区块链。将主要讨论比特币,因为使用梅克尔树对加密货币至关重要,且易于理解。例如,如果比特币没有梅克尔树,网络中的每个节点都必须维护比特币上发生过的所有交易的完整副本。任何对比特币的认证请求都需要在网络上发送大量的数据包,因此必须自己拥有它来验证数据。用于验证的计算机将不得不使用大量的处理能力来比较账本来确保没有进行任何更改。梅克尔树可以有效地解决这个问题。它们对账本中的记录进行哈希处理,有效地将数据的证据与数据本身分开。证明交易的有效性只涉及向网络提供少量信息。此外,它还允许证明两种账本在名义上的计算能力和网络带宽是相同的。
梅克尔树之所以重要,是因为它们允许梅克尔证明。这些证明使能够快速验证输入是否包含在特定数据集中以及顺序。梅克尔树也是有效的,因为它们允许通过删除所有不必要的分支来压缩大型数据集,同时保留需要证明的分支。在区块链世界中,这意味着梅克尔树提供了以下关键特性:
高效验证:梅克尔树提供高效的数据完整性和有效性验证,并显著减少了验证所需的内存量。验证证明不需要在区块链网络上传输大量数据。通过快速验证交易,实现在点对点分布式系统中可信的加密货币传输。
无延迟:在网络传输数据时没有延迟。梅克尔树广泛用于保持加密货币运行的计算中。
较少的磁盘空间:与其他数据结构相比,梅克尔树占用的磁盘空间较少。
未更改的数据传输:梅克尔根有助于确保通过网络发送的区块是完整且未更改的。
篡改检测:梅克尔树为矿工提供了一个惊人的优势,用于检查任何交易是否已被篡改。由于交易存储在梅克尔树中,该树存储了每个节点的哈希值在顶层父节点中,因此任何对交易细节的更改,例如要借记的金额或必须支付的地址,都将传播到上层的哈希值,最终传播到梅克尔根。
矿工可以将区块头中的梅克尔根与区块数据部分中存储的梅克尔根进行比较,轻松检测到这种操纵。