默克尔树介绍及其区块链中的应用
presented by 张女名
一.简介
- 默克尔树,也被称为二叉哈希树(binary hash tree),是一个由加密哈希组成的二叉树,用于高效汇总和验证大数据集的完整性。
二.默克尔树在比特币中的应用
- 在比特币中,默克尔树通过产生一个全部交易集的数字指纹,以汇总区块中的所有交易,从而提供一套非常高效的流程,已验证交易是否包含在区块中。
- 通过递归计算一对对节点的哈希值,知道剩下一个节点,即根或默克尔根,就构成了一棵默克尔树。比特币中默克尔树采用的加密哈希算法是SHA256。
- 当交易个数为奇数时,需复制最后一个交易的哈希,保证叶子数量为偶数,形成平衡树。
- 为了证明一个特定交易包含在区块中,节点只需创建log2(N)个32字节的哈希值,形成一条从交易到根的路径,叫做认证路径或默克尔路径。
- 当规模增长时,默克尔树的效率也变得非常明显。
- 如下表所示,展示了为证明区块中存在某交易而创建默克尔路径所需交换的数据量。
- 有了默克尔树,普通用户节点可以只下载区块头(每个区块的区块头80字节),通过其他完全节点(full node)获取一个很小的默克尔路径,即可验证交易是否包含在区块中。
- 当收到完全节点传送来的默克尔路径后,根据已有的交易层层计算出哈希值,若最后的结果与区块头中的默克尔根一致,则证明该交易确实存在于这个区块中。
- 这些节点叫做简化支付验证(SPV, Simplified Payment Verification)节点
三.SPV节点与布隆过滤器
- 假设一个SPV节点,它对接收到的、向它进行支付的某个地址感兴趣。
- SPV节点则在与其他对等节点(完全节点)的连接上建立一个布隆过滤器,限制只接收那些与它感兴趣的地址相关的交易。
- 当对等节点看到某个交易与布隆过滤器匹配时,就使用merkleblock消息将相关区块发送给SPV节点。Merkleblock消息包含区块头以及一条将区块中感兴趣的交易连接到默克尔根的默克尔路径。