Merkle(默克尔)树,又叫哈希树,是一种典型的二叉树结构,由一个根节点、一组中间节点和一组叶节点组成。
区块的组成:
一个区块是由区块头和区块体组成。区块体则是所有 transaction 的集合,区块头由六个部分组成:
- 上一个区块头的 Hash,previous hash。由上个区块的 block header 进行 double sha256 生成。32 bytes。
- 时间戳,timestamp。4 bytes。
- 挖矿难度值 target。4 bytes。
- 工作量证明随机数,nonce。Miner 通过 nonce 达到某一个 target,达到这个 target 的 diffculty 随着时间的推移会越来越大。
- merkle root,merkle root 可以简单理解为 transaction set 的一个唯一 hash 标识。32 bytes。
- version。4 bytes。
02000000 ........................... 区块版本号: 2
b6ff0b1b1680a2862a30ca44d346d9e8
910d334beb48ca0c0000000000000000 ... 前一区块的256位Hash值
9d10aa52ee949386ca9385695f04ede2
70dda20810decd12bc9b048aaab31471 ... 前一区块的256位Hash值
24d95a54 ........................... 从1970-01-01 00:00 UTC开始到现在,以秒为单位的当前时间戳
30c31b18 ........................... 挖矿难度值
fe9f0864 ........................... 从0开始的32位随机数
比特币的 SPV(Simplified Payment Verification 简单支付验证) 机制,保证了每次只需要下载区块头(80 bytes),而不需要加载整个区块。平均每个 transaction 至少是 250 bytes,而且平均每个区块包含 2000 个transaction。因此,包含完整交易的区块比区块头的 4k 倍还要大。
比特币中的 Merkle Tree

如上图所示,L1 可以看做是 blockchain 中的一笔 transaction。 在比特币中确认一个 transaction 是否合法有四个步骤:
- 从网络中获取并保存最长链的所有区块头信息。
- 根据
block header验证这个 transaction 所在的区块是否在上面的最长链中。block header 在 Merkle block 中获取。 - 从
Merkle block中的 Merkle 路径获得所需要验证的 hash。 - 根据这些 hash 值计算出一个 Merkle Root。计算出 Merkle Root 值和区块头中的 Merkle Root 是否相等。
当节点探测到某交易符合所要的检索类型,它将以 Merkleblock 消息的形式发送该区块。Merkleblock 消息包含区块头和一条连接目标交易与 Merkle 根的 Merkle 路径。

如上图所示我们相验证交易 K 是否合法即是否包含在区块中。Merkleblock 中返回的 Merkle 路径会包含 H(L),H(IJ),H(MNOP),H(ABCDEFGH),根据这五个 hash 值就可以确定一个 Merkle Root