区块链

Merkle Root 入门:理解比特币区块交易承诺的核心机制

Merkle root 是区块内所有交易 ID 经 Merkle 树计算得到的根哈希,它写入区块头,作为交易集合的密码学承诺。本文以简明方式解释其原理、作用、与大区块和 SPV 验证的关系,及常见误区。

林知衡

林知衡

technical_editor

发布于 2026年6月21日3 分钟阅读

一句话理解

Merkle root 是一个区块内所有交易 ID 经过 Merkle 树逐层哈希后得到的根哈希,它被写入区块头,用来承诺这个区块包含的交易集合。

如果说区块头是区块的摘要,那么 Merkle root 就是交易集合进入这个摘要的入口。

Merkle Root 入门:理解比特币区块交易承诺的核心机制 文章封面

为什么需要 Merkle root

一个区块可能包含大量交易。如果区块头直接记录所有交易,其大小就不可能保持在 80 字节。

Merkle root 的作用是:将任意数量交易的集合压缩成一个固定长度的根哈希。

简化理解:

TEXT
1Tx A
2Tx B
3Tx C
4Tx D
5 -> Merkle tree
6 -> Merkle root
7 -> block header

区块头只保存 Merkle root,完整交易数据保存在区块主体中。

Merkle 树如何计算

Merkle 树是一棵二叉哈希树。

假设一个区块有 4 笔交易:

TEXT
1Tx A, Tx B, Tx C, Tx D

先计算每笔交易的 txid(交易 ID):

TEXT
1Hash A = txid(A)
2Hash B = txid(B)
3Hash C = txid(C)
4Hash D = txid(D)

然后两两组合:

TEXT
1Hash AB = hash(Hash A + Hash B)
2Hash CD = hash(Hash C + Hash D)

最后计算根哈希:

TEXT
1Merkle root = hash(Hash AB + Hash CD)

树形结构可表示为:

TEXT
1 Merkle Root
2 / \
3 Hash AB Hash CD
4 / \ / \
5 Tx A Tx B Tx C Tx D

真实实现中涉及字节序、双 SHA-256 和奇数叶子处理等细节。入门阶段先掌握基本结构:交易 ID 在叶子层,Merkle root 在根部。

任意交易变化都会影响 root

Merkle root 的安全性来自哈希函数的抗碰撞性。

如果 Tx B 发生哪怕微小的变化,它的 txid 就会改变:

TEXT
1Tx B 改变
2 -> Hash B 改变
3 -> Hash AB 改变
4 -> Merkle root 改变
5 -> block header hash 改变

这意味着,一旦区块头经过工作量证明并上链,攻击者就无法在保持区块头不变的情况下篡改区块内交易。

若修改 Merkle root,攻击者必须重新为当前区块及所有后续区块完成工作量证明,这在链深度增加后成本极高。

Merkle root 和 txid 的关系

  • txid:单笔交易的哈希标识。
  • Merkle root:一组交易通过 Merkle 树结构计算出的根哈希。

两者不可混淆:

TEXT
1txid -> 标识一笔交易
2Merkle root -> 承诺一个区块里的交易集合

在 SPV(简化支付验证)中,验证者从目标交易的 txid 出发,使用 Merkle proof 逐层计算到 Merkle root,再与区块头中的 Merkle root 比较,从而验证交易是否属于该区块。

Merkle root 为什么适合大区块

BSV 的扩展路线强调大区块和高吞吐。区块越大,要求普通应用下载完整区块来验证单笔交易就越不现实。

Merkle root 提供了一种关键能力:不下载所有交易,也能验证某笔交易属于该区块。

你只需要:

  • 目标交易
  • 一条 Merkle path(或其标准化格式 BUMP)
  • 包含 Merkle root 的区块头
  • 可信的区块头链或区块头服务

这比下载整个区块的数据量小得多。

Merkle root 不能单独证明交易存在

  • 仅有 Merkle root 而无 Merkle proof,无法判断某个 txid 是否在树中。
  • 仅有 Merkle proof 而无对应区块头,无法确认该 root 是否真的被矿工写入过区块。
  • 仅有区块头而无区块头链或工作量证明上下文,无法判断它是否属于有效链。

因此,完整的 SPV 验证需要将这些组件串联起来:

TEXT
1txid + Merkle proof + block header + header chain

Merkle root 是连接交易和区块头的桥梁。

在 BSV 技术栈里的位置

BSV 生态中的 SPV、BUMPBEEF 以及区块头服务都围绕 Merkle root 工作。

  • BUMP:更标准、更高效地表达 Merkle path 的格式。
  • BEEF:可以将交易、依赖交易和 Merkle proofs 打包在一起。
  • 区块头服务:验证某个 Merkle root 是否对应某个区块高度上的有效区块头。
  • Overlay 服务:可在应用协议层索引数据,但底层证明仍需回到交易、Merkle root 和区块头。

新手常见误解

  • Merkle root 不是“区块哈希”。区块哈希是区块头的哈希值,Merkle root 是区块头中的一个字段。
  • Merkle root 不是交易的 ID。它承诺的是整个交易集合,而非单笔交易。
  • 拥有 Merkle root 不代表知道所有交易。它只是一个固定长度的摘要。
  • Merkle proof 不是 Merkle root。proof 是从 txid 计算到 root 所需的路径数据。
  • Merkle root 只能证明包含关系的一部分,还必须结合区块头链进行验证。

参考来源

推荐文章