默克尔包含证明
一句话定义: 一种密码学证明:某笔给定交易包含在某区块的默克尔树中。
默克尔包含证明是能让验证者确认某笔特定交易属于某个区块的最小数据结构——无需下载该区块里的其他所有交易。它利用了比特币为每个区块的交易列表构建的默克尔树。
工作机制:
- 每个区块头承诺一个 32 字节的默克尔根,由区块内交易 txid 逐对哈希直到只剩一个根而得。
- 要证明交易
T在区块B中,你提供T本身,加上从T的叶子到根一路上每一层的兄弟哈希——对含 N 笔交易的区块通常是log_2(N)个哈希。 - 验证者把
T与它的兄弟哈希,再把结果与下一个兄弟哈希,沿树向上。 - 如果最终哈希与区块头承诺的默克尔根一致,则
T可证明在B中。
繁忙时期比特币区块含 2,000–3,000 笔交易,所以证明大小约为 10–12 个兄弟哈希,大致 320–384 字节,外加交易本身。比取回整个区块便宜得多。
默克尔包含证明出现的地方:
- SPV 轻客户端。 不验证完整链的钱包向对等节点索取区块头(验证难度与链条连续性),加上自己关心的交易的默克尔包含证明。钱包把链顶的工作量证明作为信任依据,再用密码学证明验证单笔交易的包含性。
- Bitcoin Core 的
gettxoutproofRPC。 为一笔或多笔交易生成包含证明;配套的verifytxoutproof负责验证。 - 各类二层构造。 侧链锚定、驱动链提案、BitVM 等设计都用默克尔包含证明把一条链的状态承诺到另一条链上。
包含证明不能证明的:交易的有效性(需要区块的完整验证状态),以及这条链本身是否正统(需要工作量证明与祖先链)。它只证明「这笔交易被这个区块承诺了」。这是一个有用但有限的原语,也是大多数轻客户端与跨链设计的构件。
相关词条: BIP 37 · BIP 158 · 欺诈证明(Fraud Proof) · 默克尔块(Merkle Block) · 默克尔树 / 默克尔根 · 默克尔证明(Merkle Proof) · 默克尔根(Merkle Root)