Merkle树

    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路径的
数据量。


猜你喜欢

转载自blog.csdn.net/xq723310/article/details/80153072
今日推荐