跳到主要内容

merkle

Merkle 树与见证承诺

Merkle 树用于将交易集合压缩为 32 字节的根(merkle_root),便于轻客户端验证交易是否包含于区块。

交易 Merkle 树

  • 叶子:txid(不含见证)
  • 奇数复制:若层级节点数为奇数,复制最后一个节点
  • 根写入区块头 merkle_root

Witness Commitment(BIP141)

  • 见证数据不参与交易 Merkle;为锚定见证,coinbase 的 OP_RETURN 写入 commitment:
    • wtxid_merkle_root 与随机前缀组合
    • 节点验证见证承诺与区块见证数据一致性

Go 伪代码:Merkle Root

func MerkleRoot(leaves [][32]byte) [32]byte {
if len(leaves) == 0 { return [32]byte{} }
cur := leaves
for len(cur) > 1 {
var next [][32]byte
for i := 0; i < len(cur); i += 2 {
a := cur[i][:]
j := i + 1
if j >= len(cur) { j = len(cur) - 1 }
b := cur[j][:]
h := Hash256(append(a, b...))
next = append(next, h)
}
cur = next
}
return cur[0]
}