merkle树
区块链中的每个区块都包含了产生于该区块的所有交易,且以Merkle树表示。
默克尔树(又叫哈希树)是一种二叉树,由一个根节点、一组中间节点和一组叶节点组成。最下面的叶节点包含存储数据或其哈希值,每个中间节点是它的两个孩子节点内容的哈希值,根节点也是由它的两个子节点内容的哈希值组成。默克尔树的特点是,底层数据的任何变动,都会传递到其父亲节点,一直到树根。
区块链中的应用
在比特币网络中,Merkle树被用来归纳一个区块中的所有交易,同时生成整个交易集合的数字指纹,且提供了一种校验区块是否存在某交易的高效途径。生成一棵完整的Merkle树需要递归地对哈希节点对进行哈希,并将新生成的哈希节点插入到Merkle树中,直到只剩一个哈希节点,该节点就是Merkle树的根。
如何验证交易
为了证明区块中存在某个特定的交易,一个节点只需要计算log2(N)个32字节的哈希值,形成一条从特定交易到树根的认证路径或者Merkle路径即可。随着交易数量的急剧增加,这样的计算量就显得异常重要,因为相对于交易数量的增长,以基底为2的交易数量的对数的增长会缓慢许多。这使得比特币节点能够高效地产生一条10或者12个哈希值(320-384字节)的路径,来证明了在一个巨量字节大小的区块中上千交易中的某笔交易的存在。
例如,我们想验证交易D3是否在区块中,我们需要一个merkle路径来证明D3存在于区块中。该路径由粉色块表示,H2、H8、H13;我们收到merkle路径后,然后根据自己已有的H3,生成H9,然后由H9和H8生成H12,最后生成root;然后和区块中的merkel root比较,如果一致则说明该笔交易确实位于区块中。
Merkle树的⾼效随着交易规模的增加⽽变得异常明显。下表展现了为了证明区块中存在某交易而所需转化为Merkle路径的
数据量。
转自:https://blog.csdn.net/xq723310/article/details/80153072?utm_source=copy
参考:《精通比特币》