最近在学习 git 原理时,涉及到了默克尔树,这里总结下该数据结构。

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

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

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

所以默克尔树有以下特点:

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

在 git 中,设计到的对象(object)包括:blob、tree、commit、tag,其中前三个都有一个唯一的 ID,该 ID 就是有 SHA1 生成的。其实这里面就应用到了默克尔树,对应到上图来说,改变的文本文件就是“数据”,叶子节点(blob)的 ID 就是改变的文本的 SHA1 值,中间节点(tree)的 ID 就是多个 blob ID 的 SHA1 值,commit 对应的 ID 就是多个 tree 的 ID 的 SHA1 值。

经过上述过程层层 SHA1,保证了数据的完整性。

参考:https://www.sohu.com/a/401230179_100110254

(SAW:Game Over!)

数据结构与算法 / 默克尔树相关推荐

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

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

  2. Merkle Tree(默克尔树)原理解析

    Merkle Tree(默克尔树)原理解析 一.Merkle Tree 1.1 Merkle Tree的特点 二.Hash list 三.Merkle tree VS Hash list 四.Merk ...

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

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

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

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

  5. 默克尔树(Merkle Tree)总结

    目录 为什么要有默克尔树 简介 Merkle Tree的特点 图解 创建树 检索-文件夹比较 检索-防伪 更新 插入删除 应用 数字签名 P2P网络 可信计算 区块链-简单验证支付 为什么要有默克尔树 ...

  6. 基于Python实现的默克尔树

    默克尔树常见的结构是二叉树,但它也可以是多叉树,它具有树结构的全部特点. 默克尔树的基础数据不是固定的,想存什么数据都可以,因为它只要数据经过哈希运算得到的哈希值. 默克尔树是从下往上逐层计算,每个中 ...

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

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

  8. 以太坊解析:默克尔树、世界状态、交易及其他

    以太坊黄皮书中的一些概念.通过本文,我们将学到以太坊中一些主要组成部分以及它们在整个系统中的作用,同时也将简要地讨论以太坊中默克尔树的工作原理. 希望屏幕面前的你在阅读之后能明白默克尔树到底是什么,以 ...

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

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

最新文章

  1. mysql hex函数性能_mysql hex与unhex 函数的妙用
  2. 瞧瞧 Fog Creek 软件公司办公环境
  3. Tomcat-部署多个项目(不同端口)
  4. leetcode - 1039. 多边形三角剖分的最低得分
  5. 吃透web前端秘籍,来听听大佬是怎么说的
  6. 【爬虫剑谱】三卷4章 拾遗篇-关于lxml库下etree模块中Xpath表达式的使用小结
  7. 苹果为 macOS 重大漏洞道歉;迅雷内讧股价暴跌;小米百度在一起 | 一周业界事
  8. python兔子编程_少儿编程分享:手把手教你用Python编写兔獾大作战(完)
  9. 计算机实验导论,《计算机科学导论》实验
  10. 3.0.0 alpha 重磅发布!九大新功能、全新 UI 解锁调度系统新能力
  11. windows_帮助文档【.CHM电子书】打开显示空白解决办法
  12. react-redux多reducer完整实例
  13. IntelliJ IDEA 2020.3.3 遇到Cannot resolve table ‘goods’
  14. php短网址程序,博天短网址生成程序 PHP源码
  15. 降维技术 (Dimensionality Reduction)
  16. python3字典的应用方法及技巧
  17. 柯美smb扫描出现服务器连接错误_柯尼卡美能达bizhub283服务器连接错误的解决方法...
  18. 影响人生的五大定律,值得一读
  19. Fork/Join框架基本使用
  20. ADAS推高毫米波雷达需求,上游企业如何跟进?

热门文章

  1. SharePoint自动化系列——Error features自动deactivate
  2. 使用jQuery操作Cookies的实现代码
  3. PHP-Codeigniter:实习笔记1
  4. as3分页——页数多了后自动居中类似谷歌分页
  5. 周鸿祎的“加法”和“减法”
  6. Ubuntu 安装 QQ
  7. kvm虚拟机端口映射(端口转发)到宿主机
  8. 通过实战跑分来展示HBase2.x的写入性能
  9. 【收藏】Anaconda详细安装使用教程
  10. spark task和stage划分原理