关注“区链数科”,让你从入门到精通区块链!
区块链核心技术之一Merkle树,在学习区块链之前一定到知道的技术之一。
Merkle树是区块链技术的基本组成部分。它是由不同数据块的散列组成的数学数据结构,用作块中所有交易的摘要。
它还允许对大量数据中的内容进行有效和安全的验证。此结构有助于验证数据的一致性和内容。比特币和以太坊都使用Merkle树结构。Merkle树也被称为哈希树。
从根本上说,Merkle树是数据结构树,其中每个叶节点都用数据块的哈希标记,非叶节点用加密标记 其子节点标签的哈希值。叶节点是树中的最低节点。
看下图及讲解,希望能让你有一个更好地理解。
设当前有4个数据,分别为:TxA,TxB,TxC,TxD;
那么,Merkle树是怎么形成的呢?
1、TxA,TxB分别进行一次Hash计算,分别得到了HA和HB两个;TxC,TxD同理,分别得到HC和HD。
2、之后HA和HB、HC和HD两两进行结合再进行一次Hash计算,分别得到HAB和HCD。
3、最后,HAB和HCD结合后再进行一次Hash计算就得到了最终的一个树根,就是我们所说的Merkle根,整个结构呈现出一个树状,即Merkle树。
那么问题来了,Merkle树优越的特点,为什么会成为区块链技术的核心技术之一?
1、形成方式——Hash计算:树种的每个节点都记录了一个Hash值,父节点的Hash值由所有子节点经过Hash计算所得。
不了解Hash计算的,可以找到我前面发的内容,可以更好的理解Hash计算的意义所在。
2、防篡改:树中任意叶子节点发生改变,都会导致最终树根的改变,因此可以通过树根唯一对应的一组叶子节点。
Merkle根是经过TxA,TxB,TxC,TxD的Hash计算得到的,过程环环相扣。假如,我们将TxA的数值进行了篡改,那么根据Merkle根的计算过程,最终得到的Merkle根自然也是不一样的。所以当我们知道Merkle根和源数据(TxA,TxB,TxC,TxD),任何人想要篡改其中的任意数据,那么篡改后得到的Merkle根是无法对应的。
3、存在性证明:可以使用少量数据快速证明一个节点的存在性。
比如,证明HD存在于Merkle树中,只需要提供HC、HAB、Merkle根,他人就可以通过计算进行快速验证HD的存在。
同理,其他数据的验证也可进行快速验证。
总结原理
区块链中每个区块都会有一个 Merkle 树,它从叶子节点(树的底部)开始,一个叶子节点就是一个交易哈希。叶子节点的数量必须是双数,但是并非每个块都包含了双数的交易。如果一个块里面的交易数为单数,那么就将最后一个叶子节点(也就是 Merkle 树的最后一个交易,不是区块的最后一笔交易)复制一份凑成双数。
从下往上,两两成对,连接两个节点哈希,将组合哈希作为新的哈希。新的哈希就成为新的树节点。重复该过程,直到仅有一个节点,也就是树根。根哈希然后就会当作是整个块交易的唯一标示,将它保存到区块头,然后用于工作量证明。
热门跟贴