什么是Merkle Tree?

-Merkle Tree也就是Merkle树,中文译名还有梅克尔树或默克尔树,因为这是一棵用哈希值搭建起来的树,树的所有节点都存储了哈希值,所以也叫哈希树,英文名为Hash Tree。默克尔树通常情况下看着是一棵倒置的树型结构,根节点在顶部,分叉向下,叶子节点在底部。

– Merkle Tree包括这三部分的节点,即根节点、中间节点、叶节点,其作用如下:

– 根节点有且只有一个,也就是Merkle根,也叫Merkle Root,这是终止节点。

– 中间节点会有子节点两两匹配,子节点哈希值合并成新的字符串,对合并结果再次进行哈希运算,得到的哈希值,就是对应的中间节点,这是过程节点。

– 叶节点就是没有子节点的节点,这是初始节点,对于一个区块而言,每一笔买卖数据,进行哈希运算后,得到的哈希值就是叶节点。

– Merkle Tree最早由Merkle Ralf在1980年提出,一开始广泛用于一些文件系统和P2P 系统中。

A

Q

Merkle Tree的应用场景

– 因为Merkle Tree是一种树,虽然大多数是二叉树,但也可以是多叉树。不过无论是几叉树,它都具有树结构的所有特点,其叶子节点的value是数据集合的单元数据或者单元数据HASH。非叶子节点的value是根据它下面所有的叶子节点值,然后按照Hash算法计算而得出的。

– (一)区块链

“大饼”区块链系统中采用的是Merkle Tree二叉树,它的作用主要是快速归纳和校验区块数据的完整性,它会将区块链中的数据分组进行哈希运算,向上不断递归运算产生新的哈希节点,最终只剩下一个Merkle root存入区块头中。

这样首先是极大地提高了区块链的运行效率和可扩展性,使得区块头只需包含根哈希值而不必封装所有底层数据,这使得哈希运算可以高效地运行在智能手机甚至物联网设备上;其次是Merkle Tree可支持“简化支付验证协议”(SPV),即在不运行完整区块链网络节点的情况下,也能够对买卖数据进行检验。所以,在区块链中使用Merkle Tree这种数据结构是非常具有意义的。

– (二)数字签名

最初Merkle Tree目的是高效的处理Lamport one-time signatures,每一个Lamport key只能被用来签名一个消息,但是与Merkle tree结合可以来签名多条Merkle。这种方法成为了一种高效的数字签名框架,即Merkle Signature Scheme。

(三)P2P网络

在P2P网络中,Merkle Tree用来确保从其他节点接受的数据块没有损坏且没有被替换,甚至检查其他节点不会欺骗或者发布虚假的数据块。大家所熟悉的BT下载就是采用了P2P技术来让客户端之间进行数据传输,一来可以加快数据下载速度,二来可以减轻下载服务器的负担。BT即BitTorrent,是一种中心索引式的P2P文件分析通信协议。

A

Q

平台如何利用Merkle Tree自证

– 这次FTX被曝挪用储户资金导致资不抵债,只是因为大家“信任”把钱放进去了,但其实不清楚自己存放进去的钱是否被挪用了。而默克尔树的作用主要就是用很小的成本就可以验证数据完整性。

– 由于每个买卖都会影响默克尔树根节点的最终哈希值,更改区块中的任意数据都会完全改变默克尔树根节点的哈希。

– 因此,只需存储和验证默克尔树的根节点哈希,就可以验证完整的数据列表。当然,这可以通过在所有买卖上执行任意的哈希操作来实现。

– 也就是说,通过区块中每笔买卖的哈希值(TXID),我们就能获得“树叶”。用户只需要按照规则将自己账户进行一次哈希计算,找到其在这个树中的位置,和相邻节点,然后再一层层的向上计算哈希,最终计算出树根,如果和官方公布的一致那就说明是准备金无误的。

A