☞ ░ 前往老猿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. 区块链~Merkle Tree(默克尔树)算法解析~转载

    转载~Merkle Tree(默克尔树)算法解析 /*最近在看Ethereum,其中一个重要的概念是Merkle Tree,以前从来没有听说过,所以查了些资料,学习了Merkle Tree的知识,因为 ...

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

    章节 区块链 – 介绍 区块链 – 发展历史 区块链 – 比特币 区块链 – 应用发展阶段 区块链 – 非对称加密 区块链 – 哈希(Hash) 区块链 – 挖矿 区块链 – 链接区块 区块链 – 工 ...

  3. 区块链入门到实战(12)之区块链 – 默克尔树(Merkle Tree)

    目的:解决由于区块链过长,导致节点硬盘存不下的问题. 方法:只需保留交易的哈希值. 区块链作为分布式账本,原则上网络中的每个节点都应包含整个区块链中全部区块,随着区块链越来越长,节点的硬盘有可能放不下 ...

  4. Merkle Tree(默克尔树)算法解析

    Merkle Tree概念 Merkle Tree,通常也被称作Hash Tree,顾名思义,就是存储hash值的一棵树.Merkle树的叶子是数据块(例如,文件或者文件的集合)的hash值.非叶节点 ...

  5. 转 Merkle Tree(默克尔树)算法解析

    Merkle Tree概念  Merkle Tree,通常也被称作Hash Tree,顾名思义,就是存储hash值的一棵树.Merkle树的叶子是数据块(例如,文件或者文件的集合)的hash值.非叶节 ...

  6. Merkle Patricia Tree (MPT) 以太坊中的默克尔树

    本篇博文是自己学习mpt的过程,边学边记录,很多原理性内容非自己原创,好的博文将会以链接形式进行共享. 一.什么是mpt MPT是以太坊中的merkle改进树,基于基数树,即前缀树改进而来,大大提高了 ...

  7. 014-数据结构-树形结构-基数树、Patricia树、默克尔树、梅克尔帕特里夏树( Merkle Patricia Tree, MPT)

    一.基数树 Radix树,即基数树,也称压缩前缀树,是一种提供key-value存储查找的数据结构.与Trie不同的是,它对Trie树进行了空间优化,只有一个子节点的中间节点将被压缩.同样的,Radi ...

  8. [转帖]MerkleDAG全面解析 一文读懂什么是默克尔有向无环图

    MerkleDAG全面解析 一文读懂什么是默克尔有向无环图 2018-08-16 15:58区块链/技术 MerkleDAG作为IPFS的核心数据结构,它融合了Merkle Tree和DAG的优点,今 ...

  9. 区块链学习笔记:D03 区块链在各行业领域的应用(一)

    今天主要是学习了区块链在金融和供应链领域的应用,重点体现了区块链多方参与.透明可信.防篡改防抵赖的技术优势 区块链的应用场景最早是在金融行业应用较多,后续逐步扩展到传统行业,如:供应链.政务服务.物联 ...

随机推荐

  1. SQL SERVER数据库常用命令

    创建数据库: 命令:create database 数据库名: 示例:create database student: 删除数据库: 命令:drop database 数据库名: 示例:drop da ...

  2. Loadrunner11简单压测接口教程

    一.需求 使用Loadrunner压测目标接口,要求支持1000并发数. 目标接口:https://www.xxx.com/digitaldata/api/signer/1.0/signerRegis ...

  3. tensorflow-gpu2.1.0报错 so returning NUMA node zero解决办法

    >>> print('Default GPU Device: {}'.format(tf.test.gpu_device_name()))2020-06-06 10:14:08.92 ...

  4. 3.2spring源码系列----循环依赖源码分析

    首先,我们在3.1 spring5源码系列--循环依赖 之 手写代码模拟spring循环依赖 中手写了循环依赖的实现. 这个实现就是模拟的spring的循环依赖. 目的是为了更容易理解spring源码 ...

  5. 使用Selenium爬取京东电商数据(以手机商品为例)

    进入京东(https://www.jd.com)后,我如果搜索特定的手机产品,如oppo find x2,会先出现如下的商品列表页: 如果点击进入其中一个商品会进入到如下图所示的商品详情页,可以看到用 ...

  6. 对pipe downstream的思考&分析

       回到ngx_http_upstream_send_response,如果是buffering,就会进入后面的处理过程,准备一个ngx_event_pipe_t结构的数据,这个结构可以通过upst ...

  7. nginx&http 第三章 ngx 事件event accept epoll /init

    tcp 三次握手成功后,listen fd  可读,在process_event_timer 中调用rev->handler(rev)处理: 其回调函数为: ngx_event_accept / ...

  8. gdb调试入门(上)

    一.什么是gdb:gdb是GNU debugger的缩写,是编程调试工具二.gdb功能:1.启动程序,可根据用户要求随心所欲的运行程序(比如带参数)2.可让被调试的程序在用户指定的调试的断点处停住3. ...

  9. 命名管道FIFO及其读写规则

    一.匿名管道的一个限制就是只能在具有共同祖先的进程间通信命名管道(FIFO):如果我们想在不相关的进程之间切换数据,可以使用FIFO文件来做这项工作注意:命名管道是一种特殊类型文件.利用命令:$ mk ...

  10. seaborn库中柱状图绘制详解

    柱状图用于反映数值变量的集中趋势,用误差线估计变量的差值统计.理解误差线有助于我们准确的获取柱状图反映的信息,因此打算先介绍一下误差线方面的内容,然后介绍一下利用seaborn库绘制柱状图. 1.误差 ...