Merkle Tree

默克尔树是一种二叉树,由一个根节点、一组中间节点和一些叶子节点组成。形状如下:

D0、D1、D2和D3是叶子节点包含的数据,也就是叶子节点的value。继续往上看,N0、N1、N2和N3就是叶子节点,它是将数据(也就是D0、D1、D2和D3)进行hash运算后得到的hash值;继续往上看,N4和N5是中间节点,它们各是N0和N1经过hash运算得到的哈希值以及N2和N3经过hash运算得到的哈希值,注意,它们是把相邻的两个叶子结点合并成一个字符串,然后运算这个字符串的哈希;接着往上,Root节点是N4和N5经过hash运算后得到的哈希值,这就是这颗默克尔树的根哈希。

分析到这里我们大概可以知道在默克尔树中最下面的大量的叶节点包含基础数据;每个中间节点是它的两个叶子节点的哈希,根节点也是由它的两个子节点的哈希,代表了默克尔树的顶部。

还有从默克尔树的结构可以看出,任意一个叶子节点的交易被修改,叶子节点hash值就会变更,最终根节点的hash值就会改变。所以确定的根节点的hash值可以准确的作为一组交易的唯一摘要。

现在可以总结一下默克尔树的特点: 
1.首先是它的树的结构,默克尔树常见的结构是二叉树,但它也可以是多叉树,它具有树结构的全部特点。

2.默克尔树的基础数据不是固定的,想存什么数据由你说了算,因为它只要数据经过哈希运算得到的hash值。

3.默克尔树是从下往上逐层计算的,就是说每个中间节点是根据相邻的两个叶子节点组合计算得出的,而根节点是根据两个中间节点组合计算得出的,所以叶子节点是基础。


如何通过默克尔树验证交易?看下面一幅图:

假设我们要验证区块中存在Hash值为9Dog:64(绿色框)的交易,我们仅需要知道1FXq:18、ec20、8f74(黄色框)即可计算出781a、5c71与Root节点(藕粉色框)的哈希,如果最终计算得到的Root节点哈希与区块头中记录的哈希(6c0a)一致,即代表该交易在区块中存在。这是因为我上文提到的两个点,一个是默克尔树是从下往上逐层计算的,所以只要知道相邻的另一个节点的hash值就可以一直往上计算直到根节点,另一个是根节点的hash值可以准确的作为一组交易的唯一摘要,依据这两点就可以来验证一笔交易是否存在。


比特币中的默克尔树

比特币中的默克尔树如下:

区块头中包含父区块的hash,版本,时间戳,难道,随机数以及当前区块的Merkel根。区块体中则是当前区块交易的树。

有一点需要提的就是在比特网络中的Merkle树是二叉树,所以它需要偶数个叶子节点。如果仅有奇数个交易需要归纳,那最后的交易就会被复制一份以构成偶数个叶子节点,这种偶数个叶子节点的树也被称为平衡树。


默克尔树的典型应用场景

默克尔树比较典型的应用场景就是P2P下载。在点对点网络中数据传输的时候,会同时从多个机器上下载数据,而且很多机器可以认为是不稳定或者不可信的。为了校验数据的完整性,较好的办法是把大的文件分割成小的数据块(例如,把分割成2K为单位的数据块)。这样的好处是,如果小块数据在传输过程中损坏了,那么只要重新下载这一快数据就行了,不用重新下载整个文件。

除了P2P下载外,默克尔树还可以被用来快速比较大量的数据,因为当两个默克尔树根相同时,则意味着所代表的数据必然相同。还有就是可以用来实现零知识证明(零知识证明指的是证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的。

文章来源:https://blog.csdn.net/weixin_37504041/article/details/80474636

区块链--默克尔树(Merkle Tree)相关推荐

  1. 默克尔树 Merkle Tree

    基础概述   默克尔树(Merkle Tree),可以被用于验证任何类型的数据的存储.通常被用作与其他节点的计算机之间进行数据转移的数据完整性以及正确性的校验.   在比特币中.每个区块都有自己的 b ...

  2. golang 区块链:默克尔树(Merkle Tree)

    生成默克尔树 type MerkleTree struct {RootNode *MerkleNode }type MerkleNode struct {Left *MerkleNodeRight * ...

  3. 【区块链 | 默克尔树】使用默克尔(Merkle)树实现NFT白名单

    简介 在我们今天所知道和喜爱的区块链出现之前,默克尔树一直是密码学和计算机科学领域的一个方面.如今,我们开始慢慢看到它们在链上更频繁地被用于数据验证的目的.在这篇文章中,我将解释 Merkle Tre ...

  4. Solidity实现默克尔树 Merkle Tree

    ​​Merkle Tree​​​,也叫默克尔树或哈希树,是区块链的底层加密技术,被BTC和Ethereum区块链广泛采用.​​Merkle Tree​​​是一种自下而上构建的加密树,每个叶子是对应数据 ...

  5. 区块链 — 默克尔树

    文章目录 默克尔树 生成过程 应用场景 在区块链中的应用 默克尔树 默克尔树(又叫哈希树)是一种典型的二叉树结构,有一个根节点.一组中间节点和一组叶节点组成.默克尔树最早由 Merkle Ralf 在 ...

  6. 默克尔树 Merkle树之Go语言实现

    关于merkle树有很多实现.这里参考了一个纯内存实现,有助于理解. 项目地址 https://github.com/cbergoon/merkletree 核心分析 一.结构体 type Conte ...

  7. 常用的数据结构_三分钟了解区块链常用数据结构「默克尔树」

    免责声明:本文旨在传递更多市场信息,不构成任何投资建议.文章仅代表作者观点,不代表火星财经官方立场. 小编:记得关注哦 来源:万向区块链 原文标题:三分钟了解区块链常用数据结构「默克尔树」 默克尔树是 ...

  8. 默克尔树_默克尔树:正在使用中

    默克尔树 Ralph C. Merkle (not pictured above), born 1952, is one of the founding fathers of Public Key C ...

  9. 稀疏默克尔树(Sparse Merkle Tree)

    1. 默克尔树 1.1. 默克尔树的存在证明 1.2. 默克尔树的不存在证明 2. 稀疏默克尔树 2.1. 稀疏默克尔树的存在证明 2.2. 稀疏默克尔树的不存在证明 3. Ref 博客链接:http ...

最新文章

  1. 程序是一座城,八年来我深陷其中
  2. 关于Android的一些设计
  3. androidinclude作用
  4. 批处理技巧:循环固定目录的子目录,然后向每个子目录拷贝文件
  5. 人脸识别翼闸使用规范_人行通道闸如何搭配人脸识别使用
  6. 使用pycharm在本地开发,并实时同步到服务器(亲测)
  7. JAXB和Log4j XML配置文件
  8. win7无法连接打印机拒绝访问_“Windows无法连接打印机,操作失败,错误为0x000003e3”...
  9. php 数据库编码,php怎么设置数据库编码方式
  10. python基础入门(2)
  11. linux艺术字体,Linux字体美化实战(Fontconfig配置)
  12. Mac版 QQ防撤回插件
  13. PAT A1119 Pre- and Post-order Traversals ——小楼一夜听春雨,深巷明朝卖杏花
  14. form表单标签及控件
  15. 台式计算机时间不能同步,台式电脑时间同步不了?一分钟就能快速解决
  16. HTML列表、表格与媒体元素
  17. idea插件开发icon设计
  18. Uncaught DONException: Failed to execute ‘atob‘ on “window ‘: The string to be decoded is not carrec
  19. 逆水寒服务器维护到什么时候,逆水寒11月1日更新到什么时候_维护到几点
  20. 该知道的都知道 不知道的慢慢了解 正则表达式符号大全

热门文章

  1. RecyclerView多级目录实现
  2. windows无法安装到这个磁盘。选中的磁盘具有MBR分区表,在EFI系统上,Windows只能安装到GPT磁盘
  3. asp.net身份证号严格格式验证
  4. GridView 自动排序
  5. fms 连 mysql_FMS服务器
  6. fms5序列号_CentOS下安装FMS5.0 互联网技术圈 互联网技术圈
  7. SNE(Service Network Engine)
  8. html列表--有序列表、无序列表、定义列表
  9. PyTorch实现简单的残差网络
  10. Chrome 和 Firefox 版本100对User-Agent的缓冲处理