默克尔树(Merkle Tree)是由Ralph Merkle在1979年发布的一种算法,至今已有40多年的历史,是一种通过零知识证明的方法让任意一个节点都可以验证一个数据库的所有数据是否正确的方法。
1.哈希算法
在了解默克尔树之前,我们首先要知道哈希算法(Hash)的概念。哈希算法是一种可以将任意长度的数据输出为固定长度的算法,它的优势是单向加密,也就是说没有办法把计算出来的值反推出原始的数据,起到了保护的作用。像比特币等数字货币中,也广泛地使用到了哈希算法,比如知道比特币的地址,没有办法反推出私钥,但有私钥就可以生成地址。
2.生成默克尔树
当理解了哈希算法之后,我们就可以开始生成一棵默克尔树了。首先,我们先为每一个用户都创建一个“叶子”,这个叶子里是用户在某一个时间点的唯一ID识别码以及资产数据,Pionex是采用了用户的userid以及用户在某个时间点拥有的资产种类和数量作为基础数据。然后我们将这个叶子里的数据,使用哈希算法计算出一个哈希值,那么每一个用户都拥有了一个哈希值(如Hash1、Hash2、Hash3…),这样我们就有了第一层的树枝。
接着,我们两两组合,把1号和2号用户的哈希值计算为一个新的哈希值Hash12,3号和4号用户的哈希值计算为一个新的哈希值Hash34,依次类推。这样我们就有了第二层的树枝。
接着,我们再把第二层树枝里的哈希值再两两组合,就生成了一批新的哈希值,比如Hash1234等。
最后,我们一层一层地往上组合,最终我们就会得出一个最终的哈希值,称为根哈希,Hash Root。
到这里,我们就生成了一颗从叶子到根的完整的默克尔树了。
3.验证机制
那么这样的一个机制为什么可以验证交易所的资产是否是100%准备金呢?
假设今天我是一名用户,那么我明确地知道自己的账号和资产情况,那么我使用标准的哈希算法就可以算出我的哈希值。然后,通过开源的哈希数据,我就可以获得别人的哈希值,那么我可以通过自己的哈希值和别人的哈希值去计算最终的根哈希是什么数字。如果我算出来的和平台公布的一致,那么说明平台没有造假。
这里的核心要点在于,只要有一名用户站出来说他计算出来的哈希值和平台给出的哈希值不一样,那么就代表平台有造假行为。因此是通过了众包的方式监督平台在账目上是无法作假的。这个与以太坊上二层网络的一些零知识证明的机制是异曲同工的。
原创文章,作者:惊蛰财经,如若转载,请注明出处:http://www.xmlm.net/jibi/31635.html