1 MT(Merkle tree)

默克尔树是一种哈希二叉树,1979年由Ralph Merkle发明。与标准二叉树一样,由一组叶节点,一组中间节点和一个根节点构成。叶节点包含存储数据或其哈希值,中间节点是其两个子节点内容的哈希值,最上层的根节点同样也是由它的两个子节点内容的哈希值组成。

默克尔树的特点是,底层数据的任何变动,都会传递到其父亲节点,一直到树根。

默克尔树的典型应用场景包括:

  • 快速比较大量数据:当两个默克尔树根相同时,则意味着所代表的数据必然相同。
  • 快速定位修改:例如上例中,如果交易A中数据被修改,会影响到HA,HAB和HABCD。因此,沿着 Root –> HAB –> HA,可以快速定位到发生改变的交易A,时间复杂度O(lg(n))。
  • 零知识证明:如何证明某个数据(交易A……交易D)中包括给定内容交易A,构造一个默克尔树,公布交易A,HAB,HCD,HABCD,交易A拥有者可以很容易检测交易A是否存在,但不知道其它内容。

2 MPT(Merkle Patricia Tree)

MPT(Merkle Patricia Tree)就是默克尔树和压缩前缀树混合后的产物。压缩前缀树是一种更节省空间的树。对于基数树的每个节点,如果该节点是唯一的子节点的话,就和父节点合并。

以太坊中的状态树就使用了MPT树保存账户状态,将账户地址作为MPT树的索引,下图中列出了四个以太坊账户,分别存储了不同的余额。

从前面结构图可以看出,Merkle Patricia Tree有4种类型的节点:

  • **叶子节点(leaf)**表示为[key,value]的一个键值对。和前面的英文字母key不一样,这里的key都是16编码出来的字符串,每个字符只有0-f 16种,value是RLP编码的数据
  • **扩展节点(extension)**也是[key,value]的一个键值对,但是这里的value是其他节点的hash值,通过hash链接到其他节点
  • 分支节点(branch) 因为MPT树中的key被编码成一种特殊的16进制的表示,再加上最后的value,所以分支节点是一个长度为17的list,前16个元素对应着key中的16个可能的十六进制字符,如果有一个[key,value]对在这个分支节点终止,最后一个元素代表一个值,即分支节点既可以搜索路径的终止也可以是路径的中间节点。分支节点的父亲必然是extension node

3 默克尔证明

默克尔证明是一种经典技术,用于证明交易存在于区块链的某个区块中,是实现轻客户端的关键技术。我们以Wecross跨链项目中使用的数据互信机制来介绍默克尔证明。
假设两个用户甲和乙要在两条不同区块链上完成资产交换,那么必须要有一种机制来保证两个用户都真实拥有所宣称的资产,否则任何一方的用户都可以使用伪造的链上资产去兑换对方有效的链上资产。数据互信机制就是要解决这种跨链场景下的数据可信问题,它基于默克尔证明机制来实现,使得一方在不需要获取另一方区块链全量数据的情况下,仍然能够快速证明另一方区块链上特定数据的真实存在性。

假设上图是区块 X 的默克尔树结构,如果要验证交易D是否在区块X中,无需获取整个区块X,只需要提供交易D,H_AB,H_C,以及默克尔根则可。具体过程如下:

  • 根据交易 D 计算哈希,得到 H_D。
  • 根据 H_C 和 H_D 计算哈希,得到 H_CD。
  • 根据 H_AB 和 H_CD 计算哈希,得到 H_ABCD。
  • 对比 H_ABCD 和默克尔根,如果相同,则证明区块 X 存在交易 D,,否则说明不存在。

其他区块链技术请关注公众号(区块链技术空间)

默克尔树在区块链中的应用相关推荐

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

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

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

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

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

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

  4. 科普 | 什么是稀疏默克尔树多值证明

    译者注:以太坊网络是一台富状态(stateful)的世界计算机,其状态包括状态余额.交易流水号(nonce).合约代码及合约存储内容等.在技术上,这些状态数据是靠一种叫做 "默克尔树&quo ...

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

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

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

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

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

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

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

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

  9. 区块链 — 默克尔树

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

最新文章

  1. python扫描端口脚本_Python实现的端口扫描功能示例
  2. Python天天练2--面向对象+异常
  3. 为什么 Vista 使用过程中C盘用掉的空间迅速增大?
  4. 【总结整理】关于切图
  5. java lambda collect_45分钟学会Java8 - Lambda和Stream
  6. 论文笔记:Image Caption(Show and Tell)
  7. Excel电子表格输入技巧大比拼
  8. Android adb.exe程序启动不起来处理方法
  9. 多线程并发下的单例模式
  10. python csdn博客_利用Python抓取CSDN博客
  11. Spark函数详解系列--RDD基本转换
  12. zabbix加vm虚拟服务器,zabbix监控vmware exsi主机的图文步骤
  13. Teamcenter(Enterprise 2007) Admin 手法之 -- 移除relation
  14. C++总结:static_cast ,reinterpret_cast
  15. CSS:布局——伸缩布局flex
  16. EXP-00091: Exporting questionable statistics 问题处理方法
  17. java工程师容易秃头吗_程序员更容易秃头?原因是什么?
  18. 【蚂蚁链学习1】初识蚂蚁链的智能合约(solidity)
  19. 生物医学数据统计分析-两组或多组计量资料的比较
  20. (13) IFC格式说明 (Industry Foundation Class)

热门文章

  1. python 欠采样_欠采样-Python数据科学技术详解与商业项目实战精讲 - python自学网...
  2. word自动生成报告项目多页表头及页眉重复显示设置并总页码加减域代码编辑
  3. 前端向--BLOB文件处理及常用输入校验
  4. 计算机网络rip路由表题目,高级计算机网络练习题答案(完整版).pdf
  5. 【Seagate】希捷12代盘状态忙的修复流程
  6. [转]如何能成为一名真正电子工程师
  7. [数值计算-5]:一元二次非线性方程求解 - 解析法直接求解
  8. c 易语言 cpu序列号,易语言汇编取CPU序列号
  9. idea Java 读取rtf文件内容,解决中文乱码的问题。
  10. 内部版本7600无法安装ie9浏览器