Merkle 树让交易所能公布一个很短的值,而这个值一次性把它绑定到每一条用户余额上。每个用户成为一片叶子,叶子两两向上做哈希,直到只剩一个根;而下面任何一处发生变化,根就完全不同。这正是「公布出来的根是一种承诺而不是一句保证」的原因,也是你能在看不到任何别人数据的前提下证明自己被包含在内的原因。
Merkle 树解决的是什么问题
交易所想就数百万条余额说点什么,又不想把它们公布出来。公布名单会暴露每一位客户;公布一个总额则什么都证明不了,因为任何一组数字都能凑出一个总额。
需要的是一个小到可以公布、由每一条余额推导出来、又不可能与另一组余额对得上的值。这样交易所就能公开地把自己绑到整个集合上,而每个用户各自去验证自己那一行确实在被绑定的东西里面。
这恰好就是 Merkle 树干的活,也解释了为什么用这个结构而不是「把名单拼起来做一次哈希」。一次平坦的哈希在数据变动时同样会变,但它会逼着你手里握有每一条余额才能核,而那正好破坏了隐私要求。
各个部件的名字
| 术语 | 它是什么 | 为什么要紧 |
|---|---|---|
| 叶子 | 一个用户快照余额的哈希 | 它就是你亲自去核的那一行 |
| 叶子原文 | 被哈希以生成叶子的那段确切文本 | 格式不同,哈希就不同 |
| 兄弟节点 | 每一层上还需要的另一个哈希 | 它们正是你证明文件里装的东西 |
| 证明路径 | 从你的叶子到根的那些兄弟节点 | 即便有数百万用户它也很短 |
| 根 | 最顶上那一个哈希 | 交易所公布出来的就是这个值 |
第二行值得读两遍。叶子是对一段特定字符串的哈希,而如果这段字符串是按另一种方式拼的,哈希就不同——这正是算法版本必须与根一起公布的原因。
一片叶子是怎么造出来的
叶子是对一小段文本的哈希,那段文本描述的是某个账户在快照时刻的状况。它写明算法版本、它所属的那次披露的标识、该账户的一个记录标识,以及被覆盖币种上的余额。
有两条格式规则,起的作用比看上去大。余额被写成固定的小数位数,所以同一笔金额永远产出同一段文本;而各币种按固定顺序出现,而不是按某个系统碰巧输出的顺序。少了这两条中的任何一条,两个实现会把同一个账户哈希成不同的值,而独立验证会因为与诚实无关的理由失败。
账户由一个记录标识来指代,而不是由任何关于你的东西。正是这一点,让这棵树在结构上可以被公布,同时对「里面是谁」保持无信息。围绕它的那些被公布的字段,写在怎么读一份储备证明报告里。
这棵树是怎么向上建起来的
叶子两两合并。两个哈希被拼成一段字符串,再对这段字符串做哈希,产出上一层的一个节点;这些节点再按同样方式两两配对,如此重复,直到只剩一个值。
每一次合并的顺序都要紧,而这正是实现验证工具时最容易绊倒人的细节。每一步都有左侧和右侧,把它们按错误的顺序哈希会得到不同的结果。所以证明文件不仅记下每一层要用哪个兄弟哈希,还记下它坐在哪一侧,而你的验证工具必须遵守这个指示,而不是把两个值排个序。
因为这棵树每一层都减半,从任何一片叶子到根的路径都很短。一个数百万账户的集合,产出的证明只有几十个哈希,这就是为什么这个检查在手机上瞬间跑完,而不需要下载整个数据集。
为什么篡改会被发现
哈希函数有一条性质:输入上一处很小的改动,会产出一个毫不相关的输出。把某条余额改动最小的一个可表示单位,它的叶子哈希就完全变了,它的父节点变了,从它到根这条路径上的每一个节点都跟着变。
这正是把「公布」变成「承诺」的那一步。一旦根被公开,交易所就无法修改某条余额、插入一个账户或者删掉一个,而不产出一个不同的根。它没法悄悄地做,也没法只为一个用户做而不弄坏所有路径经过同一分支的人的验证。
这份承诺只有在「根是在任何人需要它出错之前就已公布」的情况下才成立,所以根的公布时点与公开记录,与那段数学同样要紧。自己去跑这次比对,写在如何核验储备证明里。
为什么邻居们仍然是隐私的
你的证明路径里装着这棵树其他部分的哈希,而哈希不可逆回它所来自的数据。你知道有这么一个兄弟节点、知道它的哈希是什么;你不知道它下面是谁的余额,也不知道那些余额是多少。
正是这份不对称,让这个结构与这个问题相配。每个用户都能确认自己被包含在内,而没有任何用户会知道关于另一个用户的任何事,同时交易所既不必信任谁,也不必公布一份客户名单。
各家实现通常还会再加强一层:把这次检查放在本地完成,而不是把你的验证数据回传给服务器。在这里,隐私那一侧的论证与验证那一侧的论证指向同一个方向,这不常见,值得注意。
这个结构在哪里就帮不上忙了
Merkle 树证明的是「属于某个集合」。它说的是你那一行在那棵被公布了根的树里,而对于「那个集合是不是对的集合」,它一个字都没说。
三条局限由此直接跟着来。它没法告诉你是不是每个账户都被包含了,因为一个被漏掉的账户,对留下来的人不留下任何痕迹。它没法告诉你资产是否存在,那是另一件链上的声称,而不是这个结构的性质。它也没法告诉你进入树里的那些余额之外的任何负债——这个缺口讨论在储备证明与负债里。
这些都不是密码学上的缺陷。它们是「一个成员资格证明能被要求做到什么」的边界,而知道这条边界,正是让这个结构不被过度推销的那件事。
小结
Merkle 树把数百万条余额变成一个可公布的值,并给每个用户一条短路径,证明自己那一行就在它下面。叶子是固定格式记录的哈希,节点是成对的哈希,而每一层的拼接顺序是规格的一部分,不是一个细节。
它的长处是:发布之后的篡改藏不住,而「被包含在内」可以在不暴露任何人的前提下被证明。它的边界是:它证明的只有成员资格——集合是否完整、资产是否存在、负债是多少,全都在这棵树之外。想继续读币贝学院的其他内容,请接着往下看。
风险披露:本文为 Bitbase(币贝)学院的科普内容,仅供教育与信息参考,不构成任何投资、交易、税务或财务建议。加密资产波动剧烈,请自行评估风险。本文撰写于 2026 年 9 月,请以官方最新信息为准。
参考资料
[1] 币贝,储备证明 —— 每月披露、Merkle 根哈希与开源验证工具 www.bitbase.com






