Summary
Merkle Tree(默克尔树)是一种利用 Cryptographic Hash 构建的数据结构,可以把大量记录逐层组合成一个最终的 Merkle Root(默克尔根)。
在 Crypto 领域,它可以用于高效验证某笔交易或某条记录是否属于一个更大的数据集合。对于交易所 Proof of Reserves(PoR),Merkle Tree 最重要的作用之一,就是让用户在不查看所有其他客户余额的情况下,验证自己的账户是否被纳入某次客户负债快照。
但要特别注意:
Merkle Proof 证明的是 Inclusion(纳入),不是 Completeness(完整性)。
你的证明成功,并不意味着所有用户都被纳入,也不能证明交易所有足够储备或具备完整偿付能力。
Key Facts
| 问题 | 简要回答 |
|---|---|
| Merkle Tree 是什么? | 利用 Hash 组织和验证大量数据的结构 |
| Merkle Root 是什么? | 整棵树最终生成的顶层 Hash |
| Merkle Proof 是什么? | 用于证明某条记录属于该 Merkle Tree 的一组 Hash |
| Merkle Leaf 是什么? | 位于树底层的单条记录或 Hash |
| 为什么交易所 PoR 会使用 Merkle Tree? | 让用户验证自己的余额是否被纳入 |
| 用户可以自己验证吗? | 如果交易所提供 Proof,可以 |
| 需要公开所有客户余额吗? | 不需要 |
| 能证明所有客户都被纳入吗? | 不能 |
| 能证明交易所有足够资产吗? | 不能 |
| 能证明交易所有偿付能力吗? | 不能 |
| Merkle Tree 等于 Blockchain 吗? | 不等于 |
| 可以和 ZK Proof 一起用吗? | 可以 |
Merkle Tree 到底是什么?
Merkle Tree
中文通常称:
默克尔树
,也叫:
Hash Tree
。
它通过 Cryptographic Hash,把大量独立记录逐层组合起来。
一个极度简化的结构是:
Merkle Root
/ \
Hash AB Hash CD
/ \ / \
Hash A Hash B Hash C Hash D
| | | |
Data A Data B Data C Data D最下面是原始数据。
然后:
Data
↓
Hash
↓
Combine
↓
Hash Again
↓
Merkle Root最终只剩一个:
Merkle Root
。
为什么需要 Merkle Tree?
它最大的优势之一是:
高效验证。
假设一个交易所有:
10,000,000 个账户现在你只想验证:
我的账户是不是被纳入这份数据?
你并不需要下载:
另外 9,999,999 个账户的所有数据。
借助 Merkle Tree,用户只需要:
- 自己对应的记录
- 一条 Merkle Path 上需要的 Hash
- Merkle Root
就能验证 Inclusion。
什么是 Cryptographic Hash?
Cryptographic Hash
可以把一段输入数据变成固定长度的结果。
例如:
Alice
1.25 BTC
↓
Hash Function
↓
8f34c2...如果余额变成:
Alice
1.26 BTCHash 也会发生明显变化。
所以 Hash 很适合用来:
检测数据是否被修改。
Hash 和 Encryption 一样吗?
不一样。
Encryption
加密通常可以使用正确 Key 还原:
Plaintext
↓
Encryption
↓
Ciphertext
↓
Decryption
↓
PlaintextHash
Hash 通常被设计成单向:
Data
↓
Hash
↓
DigestMerkle Tree 主要建立在:
Hashing
之上,而不是传统 Encryption。
Merkle Tree 是怎么生成的?
假设一次 PoR Snapshot 里只有四个账户:
Alice — 1 BTC
Bob — 2 BTC
Carol — 3 BTC
David — 4 BTC可以简化成几个步骤。
第一步:Hash 每条记录
Alice — 1 BTC
↓
Hash A
Bob — 2 BTC
↓
Hash B
Carol — 3 BTC
↓
Hash C
David — 4 BTC
↓
Hash D这些最底层记录叫:
Merkle Leaves
。
第二步:把相邻 Hash 组合
例如:
Hash A + Hash B
↓
Hash AB以及:
Hash C + Hash D
↓
Hash CD。
第三步:生成 Merkle Root
继续组合:
Hash AB + Hash CD
↓
Merkle Root最终形成:
Merkle Root
/ \
Hash AB Hash CD
/ \ / \
Hash A Hash B Hash C Hash D。
什么是 Merkle Root?
Merkle Root
就是整棵 Merkle Tree 最顶层的 Hash。
例如:
10,000,000 Customer Records
↓
Merkle Tree
↓
One Merkle Root这个 Root 相当于:
对整份输入数据的一次 Cryptographic Commitment。
如果底层某条记录发生变化,最终 Root 也应该变化。
如果用户余额被修改,会发生什么?
假设:
Alice
1 BTC改成:
Alice
1.1 BTC那么:
Alice Record Changes
↓
Hash A Changes
↓
Parent Hash Changes
↓
Merkle Root Changes所以如果数据在 Root 发布后被修改,就会无法再对应原本的 Root。
什么是 Merkle Leaf?
Merkle Leaf
就是 Merkle Tree 最底层的一条记录或对应 Hash。
在 PoR 中,它可能代表某个账户的:
Account Identifier
+
BTC Balance
+
ETH Balance
+
USDT Balance
↓
Hash
↓
Merkle Leaf不同交易所具体怎么构造 Leaf,可能完全不同。
什么是 Merkle Proof?
Merkle Proof
也经常被叫做:
Merkle Inclusion Proof
。
它用于证明:
某个 Merkle Leaf 确实属于某棵 Merkle Tree。
用户不需要拿到:
所有其他人的账户信息。
只需要拿到:
从自己 Leaf 一直到 Root 所需要的相关 Hash。
Merkle Proof 怎么验证?
假设:
Root
/ \
AB CD
/ \ / \
A B C D你的记录是:
A系统可能给你:
Hash B
Hash CD你先计算:
Hash A + Hash B
↓
Hash AB然后:
Hash AB + Hash CD
↓
Calculated Root最后比较:
Calculated Root
=
Published Merkle Root如果一致:
你的记录属于这棵树。
Merkle Proof 验证成功到底意味着什么?
在交易所 PoR 场景中,它主要支持这个结论:
我的账户记录被纳入了这次 Merkle Tree 所代表的数据集合。
换成用户最关心的问题就是:
“我的余额有没有被算进这次 Proof of Reserves?”
这很有价值。
但一定不要把结论扩大。
Merkle Proof 不能证明什么?
验证成功并不代表:
这家交易所安全。
它不能自动证明:
- 所有客户都被纳入
- 所有负债都被纳入
- 交易所有足够储备
- 储备钱包属于交易所
- 储备没有被抵押
- 公司没有其他债务
- 客户资产已经隔离
- 公司有完整偿付能力
它最核心只证明:
这条记录属于这份数据。
为什么交易所 PoR 特别适合使用 Merkle Tree?
一家大型中心化交易所可能有:
Millions of Accounts交易所想证明:
用户余额确实进入 Liability Calculation。
但它不可能公开:
Alice
$500,000
Bob
$28,000
Carol
$4,300,000这样的用户信息。
Merkle Tree 可以让交易所:
Customer Records
↓
Cryptographic Commitment
↓
Merkle Root同时向具体用户提供:
My Record
+
Merkle Proof
↓
Verify Inclusion。
Merkle Tree 在 Proof of Reserves 里属于哪一步?
简单来说:
Customer Balances
↓
Snapshot
↓
Liability Records
↓
Merkle Tree
↓
Merkle Root
↓
User Verification这主要解决的是:
Liability Verification
的一部分。
另一边:
Exchange Wallets
↓
Reserve Assets还需要单独验证。
Merkle Tree 能证明 Customer Liabilities 吗?
可以帮助验证:
用于表示 Customer Liabilities 的数据。
但不能直接说:
它已经证明了交易所全部负债。
这是非常重要的区别。
Merkle Tree 可以证明:
这些 Records 产生了这个 Root。
不能自动证明:
这些 Records 已经包含了所有应该出现的债务。
Inclusion 和 Completeness 有什么区别?
这是理解 Merkle Proof 最重要的一点。
Inclusion
你可以证明:
我的账户在树里。
Completeness
但你不能仅凭自己的 Proof 证明:
所有客户都在树里。
因此:
Proof of Inclusion
≠
Proof of Completeness。
交易所能不能故意漏掉一些用户?
从纯 Merkle Tree 技术来看:
构建树的人决定最初输入哪些数据。
假设真实有:
10 Million Customers但 PoR Input 只有:
9.5 Million Customers依然可以构造出一棵数学上完全有效的 Merkle Tree。
Merkle Tree 自己不知道:
还有 500,000 个账户应该出现。
所以还需要其他 Verification 来判断:
Liability Completeness
。
Data Integrity 和 Data Completeness 不是一回事
Merkle Tree 非常擅长:
Data Integrity
也就是:
已经承诺的数据有没有被改。
但它不自动解决:
Data Completeness
也就是:
最初提供的数据是不是完整。
所以完全可能出现:
Cryptographically Valid但:
Incomplete Data Set。
为什么 Negative Balance 很重要?
Crypto Exchange 不只有 Spot。
还可能有:
- Margin
- Futures
- Borrowing
- Lending
所以客户账户可能出现:
Customer A
+10 BTC
Customer B
-8 BTC如果简单做:
10 + (-8)
=
2 BTC某些不合理的方法就可能压低 Customer Liabilities。
因此一套严谨的 PoR,需要进一步说明:
Negative Balances 是怎么处理的?
普通 Merkle Tree 能防止这种问题吗?
不能自动防止。
基础 Merkle Tree 主要证明:
这些 Records 对应这个 Root。
它本身不会自动执行:
每个 Balance 必须满足某种财务规则。
所以更复杂的 PoR 会加入其他方法。
什么是 Merkle Sum Tree?
Merkle Sum Tree
是在普通 Merkle Tree 基础上的一种扩展。
除了 Hash,每个节点还可以包含:
数值总和
。
例如:
Customer A
5 BTC
Customer B
3 BTC
↓
Parent
8 BTC这样可以让 Total Liability 更容易进入可验证结构。
不过:
Merkle Sum Tree 也不是万能解决方案。
仍然需要考虑:
- Negative Balances
- Completeness
- Privacy
- Correct Input Data
。
为什么还要加入 Zero-Knowledge Proof?
Zero-Knowledge Proof
可以进一步证明:
数据满足某些数学规则
同时避免公开用户具体余额。
例如可以尝试证明:
All included balances
satisfy Rule X或者:
Total Liability
was calculated correctly因此一些 PoR 系统会组合:
Merkle Tree
+
ZK Proof。
Merkle Tree 和 ZK Proof 有什么区别?
| 项目 | Merkle Tree | Zero-Knowledge Proof |
|---|---|---|
| 核心作用 | 数据 Commitment + Inclusion | 私密地证明数学 Statement |
| 验证用户是否被纳入 | 可以 | 也可以参与 |
| 是否需要公开全部数据 | 不需要 | 不需要 |
| 能证明复杂计算规则吗 | 基础能力有限 | 可以,取决于设计 |
| PoR 会使用吗 | 会 | 会 |
| 能证明 Solvency 吗 | 不能 | 不能自动证明 |
所以二者不是替代关系,而是:
Complementary
。
Merkle Tree 真的能保护隐私吗?
它可以避免:
把所有客户余额直接公开。
但:
Merkle Tree 本身并不等于完整 Privacy System。
如果 Leaf 的设计不好,例如:
- 输入非常容易猜
- 用户标识被公开
- 没有使用额外随机信息
- 数据空间很小
仍然可能产生 Privacy Risk。
所以系统还可能使用:
- Random Identifier
- Salt
- Commitment
- Zero-Knowledge Proof
等方法。
Merkle Tree 是匿名技术吗?
不是。
Merkle Tree 是:
Cryptographic Data Structure
。
并不是:
Anonymity System
。
隐私程度取决于:
- Leaf 如何构造
- 什么数据公开
- User Identifier 怎么处理
- 是否搭配其他密码学技术
。
Bitcoin 为什么也用 Merkle Tree?
Merkle Tree 并不是 PoR 专用技术。
Bitcoin 也使用 Merkle Tree 来组织一个 Block 中的 Transactions。
简单来说:
Transactions
↓
Transaction Hashes
↓
Merkle Tree
↓
Merkle Root
↓
Block HeaderBitcoin 会把该 Block 的交易 Hash 逐层组合,最终产生一个 Merkle Root。
这样可以高效证明:
某笔 Transaction 是否被纳入某个 Block。
Merkle Tree 和 Blockchain 是一回事吗?
不是。
Merkle Tree
是一种:
Cryptographic Data Structure
。
Blockchain
是一套更大的:
Distributed Ledger Structure
。
Blockchain 可以:
使用 Merkle Tree 作为其中一个组成部分。
所以:
Merkle Tree
≠
Blockchain。
Merkle Root 和 Block Hash 一样吗?
也不一样。
一个 Bitcoin Block Header 会包含多种信息,例如:
Block Header
├── Previous Block Hash
├── Merkle Root
├── Timestamp
├── Difficulty Data
└── Other DataMerkle Root 主要代表:
当前 Block 的 Transactions。
Block Hash 则用于识别:
Block Header 本身。
Merkle Proof 可以造假吗?
如果用户拥有可信的:
Published Merkle Root
,就可以自己重新计算。
如果:
Calculated Root
≠
Published RootProof 就失败。
在使用安全 Cryptographic Hash Function 的前提下,想任意修改数据,同时继续产生同样的预期 Root,在计算上应当极其困难。
那交易所直接换一个 Merkle Root 呢?
当然可以重新构造另一份 Data Set,并产生:
New Merkle Root。
所以 Merkle Root 本身仍然需要有可信的上下文。
例如:
- Independent Verification
- Public Report
- Historical Records
- Timestamp
- Transparent Methodology
。
否则:
一个孤立的 Root Hash 本身意义并不大。
Merkle Proof 能证明交易所有这些 Crypto 吗?
不能。
Merkle Tree 在 PoR 中更多代表:
Customer Liabilities。
而:
Exchange Reserve Assets需要另一套验证。
所以:
Valid Merkle Proof
≠
Proof of Assets。
Merkle Proof 能证明 Reserve Wallet 属于交易所吗?
也不能。
Wallet Control 需要单独验证,例如:
- Cryptographic Signature
- Signed Message
- Independent Verification
。
Merkle Proof 能证明交易所有偿付能力吗?
不能。
即使 Liability Merkle Tree 非常完美,也可能不知道企业还有没有:
- Bank Loans
- Vendor Liabilities
- Tax Liabilities
- Legal Claims
- Other Creditors
- Encumbered Assets
所以:
Valid Merkle Tree
≠
Complete Balance Sheet同时:
Valid Merkle Proof
≠
Proof of Solvency。
Merkle Tree 能证明 Customer Assets 已经隔离吗?
不能。
Asset Segregation
是法律和运营问题。
它问的是:
客户资产有没有和公司自己的资产分开?
Merkle Proof 问的只是:
这条记录是不是在这份数据里?
两者不是同一个问题。
普通用户怎么验证 Merkle Proof?
每个交易所具体步骤可能不同。
一般可以理解成以下流程。
第一步:找到对应 PoR Snapshot
先确认:
- Snapshot Date
- Covered Assets
- Verification Provider
。
第二步:找到自己的 Verification Data
可能包括:
- Record ID
- Merkle Leaf ID
- Balance Data
- Proof Hashes
。
第三步:重新生成自己的 Leaf
按照交易所公开的方法,计算自己账户数据对应的 Hash。
第四步:按照 Merkle Path 逐层计算
把自己的 Leaf 和对应 Sibling Hash 组合。
第五步:最终计算出 Root
不断向上计算,直到得到:
Calculated Root
。
第六步:和 Published Root 比较
如果:
Calculated Root
=
Published Merkle Root就证明:
你的记录被纳入这棵 Merkle Tree。
Kraken 的 PoR 是怎么使用 Merkle Tree 的?
Kraken 当前的 Proof of Reserves 就提供了一个比较直观的实际案例。
在它的 PoR 流程中:
客户余额会被匿名化后聚合进 Merkle Tree。
用户可以通过自己的:
Merkle Leaf ID
等信息验证:
自己的账户余额是否存在于对应 Merkle Path,并最终连接到 Merkle Root。
这允许用户验证:
“我的余额确实被纳入这次 PoR。”
但需要注意,这种验证对应的是:
- 特定 Snapshot Date
- In-Scope Assets
。
它不能自动代表:
Snapshot 之后发生的交易
也不能代表:
PoR Scope 之外的其他资产。
看到“Merkle Tree Verified”还应该问什么?
不要看到:
Merkle Tree ✓
就结束。
继续问:
我能自己验证吗?
有没有真正:
User-Level Verification
?
覆盖哪些余额?
包括:
- 哪些 Crypto
- 哪些 Account Types
- 哪些 Products
- 哪个 Snapshot Date
?
Liabilities 有没有独立验证?
数学上正确的 Merkle Tree,并不能解决 Input Data 是否完整的问题。
Negative Balances 怎么处理?
特别是:
- Margin
- Futures
- Borrowing
用户需要注意。
使用的是普通 Merkle Tree 还是 Merkle Sum Tree?
Methodology 不同,能够验证的内容也不同。
有没有搭配 ZK Proof?
ZK 可以帮助证明普通 Merkle Tree 无法直接表达的数学 Constraints。
Reserve Assets 有没有单独验证?
用户负债只是 PoR 的一边。
Methodology 是否公开?
用户应该能够看懂:
这套 Proof 到底在证明什么。
Merkle Tree 和 Proof of Reserves 有什么区别?
| 项目 | Merkle Tree | Proof of Reserves |
|---|---|---|
| 类型 | Cryptographic Data Structure | Transparency Framework |
| 核心用途 | Commit Data + Verify Inclusion | 比较客户余额和储备资产 |
| 能验证用户被纳入吗 | 能 | 可以通过 Merkle Proof |
| 能证明 Reserve Assets 吗 | 不能 | 应该包含资产验证 |
| 能证明 Wallet Control 吗 | 不能 | 可以另外验证 |
| 能证明全部 Liabilities 吗 | 不能 | 需要额外 Methodology |
| 能证明 Solvency 吗 | 不能 | 不能单独证明 |
所以:
Merkle Tree 是 PoR 的一种工具,不是 PoR 本身。
Frequently Asked Questions
Merkle Tree 是什么?
Merkle Tree 是利用 Cryptographic Hash 组织大量数据,并支持高效验证的数据结构。
Merkle Root 是什么?
Merkle Root 是整棵 Merkle Tree 最顶层的 Hash,相当于对构建这棵树所使用数据的一次 Cryptographic Commitment。
Merkle Proof 是什么?
Merkle Proof 是一组 Hash,用于验证某个 Merkle Leaf 是否属于指定 Merkle Tree。
Merkle Leaf 是什么?
Merkle Leaf 是树最底层的一条记录或 Hash。
Merkle Path 是什么?
Merkle Path 是从一个 Leaf 计算到 Merkle Root 时所需要的相关 Sibling Hash。
为什么 Crypto 会使用 Merkle Tree?
因为它能把大量数据压缩成一个 Root,并支持高效的 Inclusion Verification。
Bitcoin 为什么用 Merkle Tree?
Bitcoin 使用 Merkle Tree 把一个 Block 里的 Transaction Hash 逐层组合成 Merkle Root。
为什么交易所 PoR 使用 Merkle Tree?
因为它可以让用户验证自己的账户余额是否被纳入 Customer Liability Snapshot,而不需要公开所有客户余额。
我可以自己验证 Exchange Balance 吗?
如果交易所提供 User-Level Merkle Proof,就可以按照其验证方法进行检查。
Merkle Proof 会泄露其他用户余额吗?
验证自己的 Inclusion 并不要求公开其他所有客户的明文余额。
Merkle Tree 能保证隐私吗?
不能自动保证。Privacy 仍然取决于 Leaf Design、Identifiers 和其他 Cryptographic Techniques。
Merkle Proof 能证明所有用户都在吗?
不能。
交易所能漏掉一些账户吗?
Merkle Tree 本身无法检测一开始就没有作为 Input 提供的 Records。
Merkle Sum Tree 是什么?
Merkle Sum Tree 在 Merkle Tree 节点中加入数值总和,可以帮助验证聚合 Balance。
Merkle Tree 和 ZK Proof 一样吗?
不一样,但二者可以组合使用。
Merkle Proof 能证明交易所真的拥有储备钱包吗?
不能。
Merkle Tree 等于 Proof of Reserves 吗?
不等于。它只是 PoR 中可以用于 Liability Verification 的工具之一。
Merkle Proof 能证明交易所有偿付能力吗?
不能。
Merkle Tree 和 Blockchain 一样吗?
不一样。Blockchain 可以使用 Merkle Tree 作为其中一个组成部分。
修改 Merkle Tree 中的一条记录会怎么样?
对应 Leaf 和上层 Hash 都会改变,最终生成不同的 Merkle Root。
Key Takeaway
Merkle Tree 给 Crypto 用户带来的核心价值是:
不用看到所有人的数据,也能独立验证一条记录是否被纳入。
在 Proof of Reserves 场景中:
My Balance
↓
Merkle Leaf
↓
Merkle Proof
↓
Merkle Root
↓
Verify Inclusion它可以回答:
“我的账户余额有没有被纳入这次 PoR?”
但不能自动回答:
所有客户都被纳入了吗?
→ 不能证明
所有 Liabilities 都完整吗?
→ 不能仅靠个人 Proof 证明
交易所有足够 Reserve Assets 吗?
→ 需要另一边资产验证
储备资产没有被抵押吗?
→ 不能证明
交易所还有没有其他债务?
→ 不能证明
交易所有偿付能力吗?
→ 不能证明所以最重要的区别是:
Merkle Proof
=
Proof of Inclusion而不是:
Merkle Proof
=
Proof of Financial Safety当交易所告诉你:
“Your balance is Merkle verified.”
最准确的理解应该是:
“我已经验证自己的余额被纳入了这份数据。”
而不是:
“这家交易所因此已经被证明绝对安全。”