这是白话区块链的第1785期原创
作者 |火火
出品|白话区块链(ID:hellobtc)
11 月 9 日Binance 创始人 CZ 建议各大交易平台都采用Merkle Tree默克尔树证明资金储备情况。而受到本次事件影响,部分交易平台虽然此前已证明过资金储备量,但也将再次采用默克尔树方式来提高平台资金透明度,获取大众信任。
不过对于大多数用户来说,可能并不了解默克尔树是什么,以及为何要用这种方式来证明,如何证明?对此,白话区块链就来给大家科普一下。
01
什么是Merkle Tree?
Merkle Tree也就是的Merkle树,中文译名还有梅克尔树或默克尔树,因为这是一棵用哈希值搭建起来的树,树的所有节点都存储了哈希值,所以也叫哈希树,英文名为Hash Tree。默克尔树通常情况下看着是一棵倒置的树型结构,根节点在顶部,分叉向下,叶子节点在底部。
Merkle Tree包括的这三部分的节点,即根节点、中间节点、叶节点的作用如下:
根节点有且只有一个,也就是 Merkle 根,也叫Merkle Root,这是终止节点。
中间节点会有子节点两两匹配,子节点哈希值合并成新的字符串,对合并结果再次进行哈希运算,得到的哈希值,就是对应的中间节点,这是过程节点。
叶节点就是没有子节点的节点,这是初始节点,对于一个区块而言,每一笔交易数据,进行哈希运算后,得到的哈希值就是叶节点。
Merkle Tree最早由Merkle Ralf在1980年提出,一开始广泛用于一些文件系统和 P2P 系统中。
02
比特币中的Merkle Tree
因为Merkle Tree是一种树,虽然大多数是二叉树,但也可以多叉树。不过无论是几叉树,它都具有树结构的所有特点,其叶子节点的value是数据集合的单元数据或者单元数据HASH。非叶子节点的value是根据它下面所有的叶子节点值,然后按照Hash算法计算而得出的。
比特币区块链系统中的采用的是Merkle Tree二叉树,它的作用主要是快速归纳和校验区块数据的完整性,它会将区块链中的数据分组进行哈希运算,向上不断递归运算产生新的哈希节点,最终只剩下一个Merkle root存入区块头中。
这样首先是极大地提高了区块链的运行效率和可扩展性,使得区块头只需包含根哈希值而不必封装所有底层数据,这使得哈希运算可以高效地运行在智能手机甚至物联网设备上;其次是Merkle Tree可支持“简化支付验证协议”(SPV),即在不运行完整区块链网络节点的情况下,也能够对交易数据进行检验。所以,在区块链中使用Merkle Tree这种数据结构是非常具有意义的。
03
交易平台如何利用Merkle Tree自证
这次 FTX 被曝挪用储户资金导致资不抵债,只是因为大家“信任”把钱放进去了,但其实不清楚自己存放进去得钱是否被挪用了。而默克尔树的作用主要就是用很小的成本就可以验证数据完整性。
由于每个交易都会影响默克尔树根节点的最终哈希值,更改区块中的任意交易都会完全改变默克尔树根节点的哈希。
因此,只需存储和验证默克尔树的根节点哈希,就可以验证完整的交易列表。当然,这可以通过在所有交易上执行任意的哈希操作来实现。也就是说,通过区块中每笔交易的交易哈希值(TXID),我们就能获得“树叶”。用户只需要按照规则将自己账户进行一次哈希计算,找到其在这个树中的位置,和相邻节点,然后再一层层的向上计算哈希,最终计算出树根,如果和官方公布的一致那就说明是准备金无误的。
04
Merkle Tree的缺点
不过Merkle Tree也有一些缺点。
一方面,如果需要需要存储所有的节点Hash,会对存储空间有要求,就会产生存储空间开销大的问题。
另一方面,Merkle Tree 证明不了钱包到底归谁所有,更别说这资产之间到底有没有杠杆、借代、关联交易等。而且交易平台和用户存在信息不对称,proof of reserves的方法只是让交易所提供拥有地址的私钥签名来证明地址的所有权,然后查询账户余额和地址余额。但是怎么能证明该私钥签名的地址是交易平台的,不是被假冒挪用的呢?
05
小结
正如我们所见,Merkle Tree 除了在计算机科学应用中非常有用,在区块链中也有一定价值。在分布式系统中,Merkle Tree 可轻松验证信息,而无需用不必要的数据淹没网络,让用户能够以最小的开销检查其交易是否包含在区块中。若没有 Merkle Tree,加密货币区块也许不会像今天这样简单。
但任何事物都有两面性,Merkle Tree 使用过程中的局限性也无法100%保证资金安全。
领取专属 10元无门槛券
私享最新 技术干货