默克尔树入门

默克尔树是一种哈希数据结构,用于快速归纳和校验区块数据完整性。它由叶节点(数据哈希)和非叶节点(子节点哈希的哈希)构成。构建过程包括对原始数据哈希并逐层组合哈希值。验证时,只需部分节点哈希就能确认某数据的存在,常用于区块链的简化支付验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是默克尔树

默克尔树(Merkle tree)是一种数据结构,以它的提出者默克尔命名,根据默克尔树的性质也可以叫哈希树,是一种典型的二叉树。

默克尔树由分支(中间的非叶节点),叶节点组成。

它有两个重要的特点:
第一个是叶节点包含的是相关数据的哈希值(而不是相关数据本身),这也是它叫哈希树的原因,因为它的所有节点都是存储的哈希值
第二个是非叶节点的内容是孩子的哈希值的哈希。具体如下图所示
在这里插入图片描述
(图片来自 Investopedia )

构建默克尔树的过程

图中的 TA 就是原始的数据,将数据经过 hash 后,得到哈希值 HA,HA 作为整棵树的叶子节点。其余的节点如 HB,HC 等,用同样的方式得到。

每两个孩子节点的哈希值在进行哈希得到其父节点的哈希值,如 HAB = hash(HA,HB) ,一次类推得到 HABCDEFGH也被叫做这个区块的数字指纹)。

如果叶子节点是奇数(也就是最下面的那一排 T 节点为奇数),则需要复制最后一个 T 节点,这样所有叶子节点总数为偶数了。

在交易作用的区块链中,默克尔树的作用在于快速归纳和校验区块数据的完整性,同时也支持“简化支付验证协议”(spv)。

默克尔树验证的原理

我们还是拿上面的图片举例,假设我要检查 H 节点是否在这棵树中,那么我们需要 TH,HG,HEF,HABCD,HABCDEFGH,这些节点的哈希值。
在这里插入图片描述

然后将 TH通过 hash 函数转换成 HH,接着按照相似的流程 hash(HG, HH),hash(HGH, HEF), …

最终我们只需要比较这一次 hash 的 HABCDEFGH 和区块头中存储的 HABCDEFGH 是否一致即可。

可以看到为了验证某个节点,我们并不需要构建整棵默克尔树即可完成期望的操作。

参考

  1. 《Bitcoin: A Peer-to-Peer Electronic Cash System》
  2. 《区块链技术指南》
  3. Merkle Tree
  4. 科普 | 交易平台纷纷用Merkle tree挽回信任?一文读懂Merkle tree
  5. Merkle Tree: A Beginners Guide
  6. Blockchain - A Data Structure
  7. Merkle Trees
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值