知识库

资产透明度 / explainer

Merkle Proof 能证明你的余额吗?交易所储备证明里的默克尔树怎么工作

Merkle Tree 和 Merkle Proof 在 Crypto 里有什么用?了解交易所如何在 Proof of Reserves 中利用默克尔树验证用户余额,以及为什么 Merkle Proof 不能证明全部负债或偿付能力。

发布于 2026-09-03更新于 2026-09-03约 23 分钟

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 BTC

Hash 也会发生明显变化。

所以 Hash 很适合用来:

检测数据是否被修改。


Hash 和 Encryption 一样吗?

不一样。

Encryption

加密通常可以使用正确 Key 还原:

Plaintext
↓
Encryption
↓
Ciphertext
↓
Decryption
↓
Plaintext

Hash

Hash 通常被设计成单向:

Data
↓
Hash
↓
Digest

Merkle 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 TreeZero-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 Header

Bitcoin 会把该 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 Data

Merkle Root 主要代表:

当前 Block 的 Transactions。

Block Hash 则用于识别:

Block Header 本身。


Merkle Proof 可以造假吗?

如果用户拥有可信的:

Published Merkle Root

,就可以自己重新计算。

如果:

Calculated Root
≠
Published Root

Proof 就失败。

在使用安全 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 TreeProof of Reserves
类型Cryptographic Data StructureTransparency 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.”

最准确的理解应该是:

“我已经验证自己的余额被纳入了这份数据。”

而不是:

“这家交易所因此已经被证明绝对安全。”