Bitget交易所官方网站
www.bitget.com
了解Bitget交易所的投资者都清楚,Bitget拥有默克尔树功能,但是很多新手投资者并不了解它到底是什么,今天就为大家答疑解惑。
![](http://www.yshing.cn/uploadfile/202405/36054a86370839c.jpg)
默克尔树
定义
默克尔树是一种数据结构,又称哈希树。将数据储存在树形结构的叶节点中,借由哈希值数据逐层记录到最顶层的根节点,叶节点数据的任何变化都会传递给更上层的节点,最后会显示更改后的数据在树形的根部。
1. 默克尔树的作用
- 零知识证明
- 确保数据不变性
- 确保数据隐私
2. Bitget Limited 的默克尔树定义
2.1 节点讯息
每个树节点中存储的讯息包含:
1. 哈希值(Hash value)
2. 用户资产快照中所包含的币数(以BTC、ETH、USDT 为例)
![](http://www.yshing.cn/uploadfile/202405/2172478e8f38cb.png)
2.2 哈希规则
叶节点(填充节点除外)
![](http://www.yshing.cn/uploadfile/202405/4c715b0868619ff.png)
- 加密Uid:用户的加密UID
- nonce:分配给每位用户唯一的值
- balances:用户资产快照币种数量组成json 字串(注意:去除末尾无效0,并保留8 位精度)
父节点
![](http://www.yshing.cn/uploadfile/202405/d24dec413a07f35.png)
- h1:当前节点的左子节点的hash
- h2:当前节点的右子节点的hash
- 阶层:父节点所在的位置
树节点的高度定义:一个完整的默克尔树(满二元树)需要2^n个叶节点数据,叶节点阶层= n + 1,父节点阶层= 子节点阶层- 1,根节点阶层= 1,叶节点阶层为最高
填充节点规则
一个完整的默克尔树(满二元树)需要2^n 个叶节点数据,但实际情况数据的数量未必满足且还可能是奇数。在此种情况下,如果一个节点k 没有兄弟节点,则自动填充生成一个兄弟节点k',该兄弟节点hash(k') = hash(k),节点k' 的币种数量设定为零。
验证原理
1. 验证原理:根据Bitget Limited 默克尔树定义,从用户本身叶节点开始往上计算父节点的哈希值,一直到根节点得出哈希值,对比步骤1 中获取到的默克尔树路径中根节点的哈希值,如果二者相等则通过验证,不相同则验证失败。
2. 范例:结合图一和下面的json 文本,依据用户本身叶节点h3 和提供的相邻节点h4 讯息可以计算出父节点h6 的哈希值,再和提供的相邻节点h5 讯息可以计算出父节点h7 的哈希值,然后和默克尔树路径数据中提供的根节点h7 讯息对比哈希值是否相等即可完成验证。
![](http://www.yshing.cn/uploadfile/202405/bd2e22d8cae516f.jpg)
关于默克尔树的一些知识已经分享完了,大家如果想学习更多交易知识,直接登录Bitget交易所官方网站即可。