免责声明:本文旨在传递更多市场信息,不构成任何投资建议。文章仅代表作者观点,不代表火星财经官方立场。

小编:记得关注哦

来源:万向区块链

原文标题:三分钟了解区块链常用数据结构「默克尔树」

默克尔树是由哈希值构成的树状数据结构,封装在区块链数据层,用于验证区块链数据的完整准确性。

原文标题:《默克尔树究竟是棵什么树?| 万向区块链小课堂》 撰文:万向区块链

本期万向区块链小课堂将为大家讲解区块链中经常提及的一棵树:默克尔树(Merkle Tree)。

来回忆下我们之前小课堂解构的区块链六层模型,默克尔树封装在数据层,说明它是一个密码学技术,用以保护区块链的安全。

默克尔树于 1979 年由美国计算机科学家拉尔夫·默克尔(Ralph Merkle)提出,本质上是一种树状数据结构,由数据块、叶子节点、中间节点和根节点组成。所以,一组合,就叫「Merkle Tree」。

默克尔树各部分的构成关系如下图:

要得到这样一棵默克尔树,首先要对底部数据块进行哈希运算,用每个数据块对应的哈希值生成叶子节点。再对相邻的 2 个叶子节点进行哈希运算,得到的哈希值生成中间节点,最后对相邻的 2 个中间节点进行哈希运算,得到的哈希值生成根节点。由于各类节点都是由哈希值构成,因此默克尔树又被称为哈希树,即储存哈希值的树状数据结构。

看起来是不是很像一棵底下堆满了礼物的圣诞树?

哈希运算和哈希值

生成默克尔树用到的哈希运算是区块链中常用的加密函数。任意大小、长度的数据经过哈希运算后都会得到一个固定大小和长度的数值,即哈希值。就像我们的指纹或签名能帮助鉴别我们的身份,哈希值也可以看成是数据的指纹或签名,用于验证数据的真实准确性,并具有以下特征:

确定性

数据和哈希值之间是确定的一一对应关系,即相同数据经过哈希运算会得到相同的哈希值。

不可逆性

哈希运算的过程是不可逆的,即数据经过哈希运算可以得到哈希值,但不可以通过哈希值推导出原始运算数据,由此保证数据的隐私和安全性。比如 Facebook 等网站会将用户密码计算成哈希值并储存。用户每次输入密码时,密码都会被转换成哈希值与网站记录的版本进行对比,从而验证密码是否正确。由于哈希运算的不可逆性,网站无法从哈希值中推导出用户密码,从而保证用户信息安全。

统一性

即上文提到的任意大小、长度的数据经过哈希运算后会生成大小、长度统一的哈希值,一方面起到压缩数据,减轻数据储存压力的作用,另一方面规整了杂乱无章的原数据,方便后期比对验证。

为什么要用默克尔树?

由于默克尔树本质上是由哈希值构成的树状数据结构,因此也继承了哈希值用于保证数据安全隐私和校验数据准确和完整性的功能,主要应用于点对点下载,例如 BT 下载、开源分布式控制系统 Git、比特币和以太坊区块链等场景中。因为我们难以保证这些去中心化系统中的每个节点都会提供真实可信的数据,也难以避免数据在传输过程中出现丢失、损坏等情况,所以需要引入数据加密和校验机制。

看到这里,你可能已经意识到了默克尔树其实就是将数据分割成多个小块,进行多次哈希运算,搭建出的一个树状数据结构。那为什么要对数据进行拆分,计算出多个哈希值用于校验呢?这不是增加工作量了吗?但其实这样做是为了提高数据验证的灵活性,数据量越大,默克尔树的这一优势会体现得越明显。

试想一下,如果我们不对数据进行拆分,而是将整体计算成一个哈希值,那当数据校验出现问题时,我们很难分辨问题出现在哪里,只能回过头去对整个数据进行排查,如果数据量特别大,那么这个错误排查过程无异于海底捞针。

但在默克尔树里,数据被拆分成多个小块,形成了多个分支,可以根据具体情况对部分数据进行校验,无需校验整个数据,从而提高数据校验的灵活性和效率。

最后总结一下默克尔树的知识要点:

  • 由哈希值构成的树状数据结构
  • 用于验证验证区块链等去中心化系统中的数据的完整准确性
  • 具有灵活高效验证数据的优势

来源链接:mp.weixin.qq.com

常用的数据结构_三分钟了解区块链常用数据结构「默克尔树」相关推荐

  1. GO语言和区块链开发准备阶段-默克尔树

    持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第6天,点击查看活动详情 GO语言和默克尔树 默克尔树 默克尔树是一个二叉树,由一组hash后形成的数值节点组成,其叶子节点存放基础 ...

  2. 区块链100讲:梅克尔树保障区块链数据不可篡改,想换根就要砍树!

    2019独角兽企业重金招聘Python工程师标准>>> 区块链100讲上期我们讲了哈希算法和公开密钥算法,说到哈希算法提到了一个名词"Merkle tree",梅 ...

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

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

  4. 区块链杂谈---默克尔树(Merkle Tree)解析

    相信了解区块链的人对默克尔树并不忙陌生,在区块链里被广泛的应用,下面我们来了解下它的算法. Merkle Tree概念 Merkle Tree,通常也被称作Hash Tree,顾名思义,就是存储has ...

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

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

  6. 区块链 — 默克尔树

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

  7. 区块链基础知识系列 第三课 区块链中的默克尔树

    "区块链是实现无中心分布式总账的一种技术.除了采用块.链结构的典型区块链以外,还有其他的方式实现分布式总账这个需求.总账技术的基本单元是'交易',整个账本是由一条条的交易构成.'块'类似于账 ...

  8. 数据结构与算法 / 默克尔树

    最近在学习 git 原理时,涉及到了默克尔树,这里总结下该数据结构. 默克尔树于 1979 年由美国计算机科学家拉尔夫·默克尔(Ralph Merkle)提出,本质上是一种树状数据结构,由数据块.叶子 ...

  9. 区块链学习1:Merkle树(默克尔树)和Merkle根

    ☞ ░ 前往老猿Python博文目录 ░ 一.简介 默克尔树(Merkle tree,MT)又翻译为梅克尔树,是一种哈希二叉树,树的根就是Merkle根. 关于Merkle树老猿推荐大家阅读<M ...

最新文章

  1. 利用zookeeper实现发布订阅模式
  2. 移除UTF-8文件头的BOM
  3. CUDA TOOlkit Programming Guide 3. Programming Interface
  4. android webview video标签,Android WebView支持html5 video标签
  5. mysql 字符串用省略号_CSS截取字符串自动补充省略号
  6. libmesh 实现 流程
  7. 在具有内置文本扩展功能的苹果Mac上如何更快的键入内容?
  8. 雨天美图大法:单图去雨的RESCAN新方式
  9. 线性回归的从零开始实现
  10. numpy向量化函数
  11. Unity3D 与 3DMax 结合开发
  12. 《传送门》游戏中传送机制简析
  13. ipa文件上传到iTunes Connect
  14. 在服务器系统Windows 2003安装Avira AntiVir小红伞免费中文版
  15. 怎样调整计算机显示屏窗口,怎么调整电脑窗口的大小
  16. 实习总结5-北漂1(北京北京)
  17. 登录IE时常出现闪退:Internet Explorert停止工作解决办法
  18. 人体动作捕捉格式BVH及其与三维坐标的转换
  19. Javaweb课程设计(简单的个人博客)
  20. 产品心理学:识知偏见,我们和自己开的玩笑

热门文章

  1. 微服务的好处与弊端_在云原生时代,就一定要用微服务吗?
  2. Android开发之WebView加载HTML源码包含转义字符实现富文本显示的方法
  3. android开发之EditText默认hint字体大小
  4. clickhouse 子查询_Clickhouse 查询分布式表子查询 (Distributed Subqueries )
  5. python中反斜杠b_Python bytes 反斜杠转义问题解决方法
  6. CoreText入门
  7. 商品管理到底重不重要?
  8. ?Web开发者需要知道的CSS Tricks
  9. Nagios监控系统详解
  10. 智能实验室-身份证号码查询(IDio) 1.4.0.140