☞ ░ 前往老猿Python博文目录 ░

一、简介

默克尔树(Merkle tree,MT)又翻译为梅克尔树,是一种哈希二叉树,树的根就是Merkle根。
关于Merkle树老猿推荐大家阅读《Merkle树》这篇文章。

Merkle树和Merkle根在区块链中用于维护账本校验数据的完整性和不可篡改,并在变动时快速定位变化的交易数据。在区块链中常用的hash算法为SHA256,关于SHA算法请参考《深入理解SHA系列加密算法》。

二、思考

为什么说在比较两组相同数据量的数据时,将其构建Merkle树后,两个树的根相同就数据相同呢?

理论上说,每个散列算法,包括安全算法,都会发生碰撞,好的算法是散列尽可能均匀,降低碰撞概率,如果这个概率非常非常小,就可以认为不同的数据散列的结果基本不同。区块链中构建Merkle树时采用的哈希方法是SHA256来,一个哈希位有0和1两个可能值。则每一个独立的哈希值通过位的可能值的数量对于SHA-256,有2的256次方种组合,这是一个庞大的数值。因此在数据一致性处理时就认为根相同的树其对应的数据相同。

三、要点

  1. Merkle树构建过程,是从输入数据开始进行hash,hash的结果作为树的叶子节点,然后相邻两个节点值两两配对作为输入再hash散列得到上层节点,如此一直往上,如果某层的结点数为奇数时,则最后一个节点与自己配对进行散列;
  2. 任何叶子节点数据变动都会逐层传递,导致根数据发生变化,根结果的比对可以作为构建树的数据的比对;
  3. 反过来,根节点变化,可以根据逐层往下查找变动的节点,直到找到最终的叶子节点;
  4. SHA-256散列函数算法总体比较简单高效,可以保证处理过程的高效性。

正是由于这些特点,Merkle树有多种用途:

  • 可以用于确保数据完整性的校验
  • 可以快速比较大量数据(将两组相同数据量的数据排序后,构建Merkle树,如果两个树的根相同,则两组数据是相同的)
  • 散列计算非常快速,可以带来完整性保障校验和数据比对计算性能的优势
  • 可以快速定位修改
  • 可以作为零知识证明 (zero-knowledge proof)使用来证明交易发生过但无需提供交易数据,具体请参考《Merkle树与SPV验证》、《Merkle树和SPV机制》)。

因此Merkle树和Merkle根才被区块链用于保障交易的完整性和防篡改。

更多关于区块链的内容请见老猿专栏《零基础学区块链》或《零基础学区块链专栏文章目录》。

跟老猿学Python、学5G!

☞ ░ 前往老猿Python博文目录 ░

区块链学习1:Merkle树(默克尔树)和Merkle根相关推荐

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

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

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

    Merkle Tree 默克尔树是一种二叉树,由一个根节点.一组中间节点和一些叶子节点组成.形状如下: D0.D1.D2和D3是叶子节点包含的数据,也就是叶子节点的value.继续往上看,N0.N1. ...

  3. 区块链 — 默克尔树

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

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

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

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

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

  6. 区块链学习笔记(2)难度整定,区块形成,区块体,Merkle树,Merkle Proof默克尔证明

    难度的调整 是在每个完整节点中独立自动发生的.每2016个区块,所有节点都会按统的公式自动调整难度,这个公式是由最新2016个区块的花要时长与期望时长(期望时长为20160分钟,即两周,是按每10分钟 ...

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

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

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

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

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

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

最新文章

  1. vs2010 静态使用 opencv 2.46 库
  2. 下载数据CityEngine示例数据(Tutorial)配套视频教程(英文)
  3. oracle 存储过程 ,触发器练习
  4. PHP 常用函数及其它功能
  5. LeetCode MySQL 1821. 寻找今年具有正收入的客户
  6. 使用pytorch自定义DataSet,以加载图像数据集为例,实现一些骚操作
  7. Python高能小技巧:用海象操作符减少重复代码
  8. 详解CSS position属性
  9. Spring的9种设计模式(三)总结
  10. CentOS系统如何修改语言
  11. 基于SSM实现高校应届生就业管理系统
  12. 字符串查找工具 批量搜索文件的文本内容工具
  13. 【电脑使用】修改注册表——让有密码的电脑开机自动登录
  14. android 后台自动拍照,怎么实现后台拍照功能,求解
  15. 类的组合在什么情况下使用_什么情况下选择使用圆锥滚子轴承?(原创轴承外贸写作素材)...
  16. 豆瓣FM产品分析 | 纯粹极简的听歌APP
  17. ES系列四、ES6.3常用api之文档类api
  18. 常用淘宝api 地址
  19. 6000字干货分享:数据中台项目管理实践分享
  20. joa运行oracle,蚂蚁金服自研数据库OceanBase登顶全球第一,打破Oracle维持九年的世界纪录...

热门文章

  1. python37降到36原来的包还可以用吗_Python学习之路37-使用asyncio包处理并发
  2. 计算机应用技术的论文怎么写,计算机应用技术论文摘要怎么写 计算机应用技术论文摘要范文参考...
  3. 3D游戏引擎Unreal的价格
  4. I/O流--切割合并mp3文件
  5. 转 IE 下载docx xlsx 文件另存为zip文件
  6. 大学班歌《为梦飞翔》(改编自《和你一样》原创哟~~~)
  7. eshop4-tomcat 安装
  8. Android 图片框架的比较
  9. 做网站是否一定需要seo
  10. python里import bs4是什么意思_from bs4 import BeautifulSoup报错