FTX的倒闭再次对中心化机构的受信任程度造成致命一击。11 月 9 日,Binance 创始人 CZ 发文说所有交易平台都应该采用Merkle Tree证明资金储备情况,并且Binance也将开始进行。紧接着部分交易平台也宣布采用Merkle Tree方式来提高平台资金透明度。其实在CZ建议之前,Gate 和 Kraken 这两家交易平台早已采用Merkle Tree证明资金储备,并且用户可以自己去验证准备金是否充足,只是尚没有达到行业共识。对于普通用户来讲,对Merkle Tree的概念可能知之甚少。那么Merkle Tree究竟是什么,以及为什么它可以用来验证中心化机构是否有100%的储备金,Tokenview就给大家科普一下。

Merkle tree(又称默克尔树)是区块链技术的基本组成部分。Merkle tree是一种结构,允许对大量数据中的内容进行高效和安全的验证。这种结构有助于验证数据的一致性。比特币和以太坊都使用Merkle tree。

MerkleTree工作原理

我们以比特币中的Merkle tree为例,解释Merkle trees是如何工作的?

比特币的一个重要的可扩展性特征是区块存储在多级数据结构中。区块中的“hash”实际上只是区块头的哈希,大约 200 字节的数据,包含时间戳、随机数、前一个区块哈希和在区块中存储所有交易的称为 Merkle tree的数据结构的根哈希。Merkle tree是通过重复的哈希节点对创建的,直到只剩下一个哈希(这个哈希称为根哈希或默克尔根)。它们是由下而上构建的,就像一棵倒过来的树。

Merkle tree是一种二叉树,由一组节点组成。树底部有大量叶节点在一个区块中,每一笔交易数据,进行哈希运算后,得到的哈希值就是叶节点;一组中间节点:其中每个节点都是其两个子节点配对后再次进行哈希计算,得到的哈希值;最后是一个根节点:也是由它的两个子节点的哈希值形成的,代表树的“顶部”。(Merkle tree需要偶数个叶节点。如果交易的数量是奇数,最后一个哈希将重复一次,以创建偶数个叶节点。)

如图所示,一个区块中包含的A、B、C和D四个交易。每一个交易都经过哈希计算,生成哈希A、B、C和D,存储在每个叶节点中。之后,通过哈希A和哈希B将叶节点对汇总到父节点中,得到哈希AB。同样,哈希C和哈希D,得到哈希CD。然后再次将这两个哈希(哈希AB和哈希CD)经过哈希计算生成根哈希(Merkle根)。

Merkle trees的目的是允许区块中的数据零碎地传递:一个节点只能从一个源下载区块头,从另一个源下载与他们相关的树的一小部分,并且仍然可以确保所有数据都是正确的。这样做的原因是哈希向上传播:如果恶意用户试图将虚假交易交换到 Merkle 树的底部,这种变化将导致上面的节点发生变化,然后上面节点发生变化会最终改变树的根,从而改变了区块的哈希值,导致协议将其注册为一个完全不同的块(几乎可以肯定是无效的工作量证明)。

Merkle 树协议可以说对于长期可持续性至关重要。截至 2014 年 4 月,比特币网络中的一个“全节点”,即存储和处理整个区块的节点,在比特币网络中占用了大约 15 GB 的磁盘空间,并且每月增长超过 1 GB。Merkle tree可支持“简化支付验证协议”(SPV),该协议允许存在另一类节点,称为“轻节点”,它们下载区块头,验证区块头上的工作量证明,然后仅下载与它们相关的交易相关的“分支”。这允许轻节点在强大的安全保证下确定任何比特币交易的状态,以及它们的当前余额,同时只下载整个区块链的很小一部分。

如图所示,Merkle tree允许不需要下载整个交易数据集就可以验证交易5的完整性。

Merkle tree将数据的验证与数据本身分离开来,可以显著减少受信任权威为验证目的而必须维护的数据量。

Merkle tree有三个主要好处:
1. 它们提供了一种方法来证明数据的完整性和有效性。
2. 它们需要很少的内存或磁盘空间,因为证明的计算简单且快速。
3.它们的证明和管理只需要少量的信息在网络之间传输。

Merkle tree储备金证明

FTX的倒闭再次对中心化机构的信任产生致命一击。这也暴露出用户和中心化机构之间信息不对称的严重问题。用户资产究竟去哪了,是否被挪用,以及如何验证交易平台的资金储备。现有的储备证明是由受信任的第三方出具审计报告,证明中心化机构的储备证明与用户资产的负债证明相一致。就拿此次FTX破产来讲(挪用储户资金导致资不抵债),其实用户都不清楚自己存入交易平台的钱是否被挪用。最直接的办法就是交易平台直接公开储户资产信息,但这又会造成隐私泄露。

更改区块中的任意交易都会完全改变Merkle tree根节点的哈希值,以及Merkle tree将数据的验证与数据本身分离开来,便可以用很小的成本就可以验证数据完整性。这也就是为什么Merkle tree可以用来验证交易平台储备金。

作为一个普通用户,要验证当前交易平台的储备金是否有变动过,就可以参照Merkle tree原理,将每个账户都看做一个节点,账户的金额相当于节点数据。用户可以将自己的账户进行一次哈希计算,找到自己的节点位置以及相邻节点位置。紧接着再向上计算哈希值,最后得到一个根哈希。将自己算出来的根哈希和交易平台公布的链上数据进行对比,如果一致就表明储备金是正确的。也就证明该平台安全运行。此外,BuidlerDAO 创始人 Jason Chen 在推文中表示Merkle tree还可以用于NFT mint 时的验证白名单,可以快速的验证一个地址是否存在于白名单集合中。

Merkle Tree验证CEX储备金的真实性,是确保信息透明的一种方式。但这种方法并非没有缺点,如,这在一定程度上会暴露CEX和用户的资产隐私,为黑客提供了安全漏洞;如果要储存所有账户节点哈希,就对存储空间产生极大的要求。但是,从当前的行业现状来看,采用Merkle Tree证明资金储备情况似乎已经是改善用户信任问题的不二之选。

 

参考文章:

https://ethereum.org/en/whitepaper/#merkle-trees

https://medium.com/hackernoon/merkle-trees-181cb4bc30b4