梅克尔-帕特里夏树 Merkel-Patricia Tree(MPT)

MPT是什么

  • Merkel Patricia Tree (MPT),翻译为梅克尔-帕特里夏树
  • MPT 提供了一个基于密码学验证的底层数据结构,用来存储键值对(key-value)关系
  • MPT 是完全确定性的,这是指在一颗 MPT 上一组键值对是唯一确定的,相同内容的键可以保证找到同样的值,并且有同样的根哈希(root hash)
  • MPT 的插入、查找、删除操作的时间复杂度都是O(log(n)),相对于其它基于复杂比较的树结构(比如红黑树),MPT 更容易理解,也更易于编码实现

从字典树(Trie)说起

  • 字典树(Trie)也称前缀树(prefix tree),属于搜索树,是一种有序的树数据结构
  • 字典树用于存储动态的集合或映射,其中的键通常是字符串

基数树(Radix Tree)

基数树又叫压缩前缀树(compact prefix tree),是一种空间优化后的字典树,其中如果一个节点只有唯一的子节点,那么这个子节点就会与父节点合并存储

基数树节点

在一个标准的基数树里,每个节点存储的数据如下:[i0, i1, … in, value]

  • 这里的 i0,i1,…,in 表示定义好的字母表中的字符,字母表中一共有n+1个字符,这颗树的基数(radix)就是 n+1
  • value 表示这个节点中最终存储的值
  • 每一个 i0 到 in 的“槽位”,存储的或者是null,或者是指向另一节点的指针
  • 用节点的访问路径表示 key,用节点的最末位置存储value,这就实现了一个基本的键值对存储

示例

  • 我们有一个键值对{ “dog”: “puppy” },现在希望通过键 dog 访问它的值;我们采用16进制的 Hex 字符作为字符集
  • 首先我们将 “dog” 转换成 ASCII 码,这样就得到了字符集中的表示 64 6f 67,这就是树结构中对应的键
  • 按照键的字母序,即 6->4->6->f->6->7,构建树中的访问路径
  • 从树的根节点(root)出发,首先读取索引值(index)为 6 的插槽中存储的值,以它为键访问到对应的子节点
  • 然后取出子节点索引值为 4 的插槽中的值,以它为键访问下一层节点,直到访问完所需要的路径
  • 最终访问到的叶子节点,就存储了我们想要查找的值,即“puppy”

基数树的问题

数据校验

  • 基数树节点之间的连接方式是指针,一般是用32位或64位的内存地址作为指针的值,比如C语言就是这么做的。但这种直接存地址的方式无法提供对数据内容的校验,而这在区块链这样的分布式系统中非常重要。

访问效率

  • 基数树的另一个问题是低效。如果我们只想存一个 bytes32 类型的键值对,访问路径长度就是64(在以太坊定义的 Hex 字符
    集下);每一级访问的节点都至少需要存储 16 个字节,这样就需要至少 1k 字节的额外空间,而且每次查找和删除都必须完整
    地执行 64 次下探访问。

梅克尔树(Merkel Tree)

也被称作哈希树(Hash Tree),以数据块的 hash 值作为叶子节点存储值。梅克尔树的非叶子节点存储其子节点内容串联拼接后的 hash 值。

快速学习-梅克尔-帕特里夏树相关推荐

  1. 区块链入门系列之梅克尔帕特里夏树

    区块链入门系列文章 区块链基本概念和名词解释 P2P 共识算法 梅克尔-帕特里夏树 从零开始搭建区块链 这里写自定义目录标题 区块链入门系列文章 前言 Merkle树 MPT 总结 前言 在讲基本概念 ...

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

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

  3. Merkle Tree(梅克尔树)算法解析

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

  4. Merkle Patricia Tree 梅克尔帕特里夏树(MPT)规范

    Merkle Patricia Tree 梅克尔帕特里夏树(MPT)规范 2017/4/15 posted in  Solidity深入浅出系列 Merkle Patricia Tree1,梅克尔帕特 ...

  5. Merkle Patricia Tree 梅克尔帕特里夏树(MPT)详细介绍

    Merkle Patricia Tree [1],梅克尔帕特里夏树,提供了一个基于加密学的,自校验防篡改的数据结构,用来存储键值对关系.后文中将简称为MPT.尽管在本规范范围内,我们限定键值的类型只能 ...

  6. Merkle Patricia Tree 梅克尔帕特里夏树(MPT)规范(笔记)

    Merkle Patricia Tree1,梅克尔帕特里夏树,提供了一个基于加密学的,自校验防篡改的数据结构,用来存储键值对关系.后文中将简称为MPT.尽管在本规范范围内,我们限定键值的类型只能是字符 ...

  7. 快速学习-帕特里夏树

    帕特里夏树(Patricia Tree) 如果一个基数树的"基数"(radix)为2或2的整数次幂,就被称为"帕特里夏树",有时也直接认为帕特里夏树就是基数树 ...

  8. 梅克尔树Merkle trees

    世人皆知区块链,却不知梅克尔树呀 最近,研究中本聪大神的论文,他提到了梅克尔树让我很好奇, 打算研究一下,谁知道网上各种乱天飞的文章几乎都定义成: 梅克尔树(Merkle trees)是区块链的基本组 ...

  9. java merkle树,梅克尔树Merkle trees

    世人皆知区块链,却不知梅克尔树呀 最近,研究中本聪大神的论文,他提到了梅克尔树让我很好奇, 打算研究一下,谁知道网上各种乱天飞的文章几乎都定义成:梅克尔树(Merkle trees)是区块链的基本组成 ...

最新文章

  1. Excution failed for task ':app:transformClassWithDexForDebug'
  2. 了解EF CodeFirst的Migrator功能与Migrator.Net对比
  3. zabbix 3.2安装部署(一)
  4. 九章算法 | 骑士的最短路线-BFS
  5. java treemap用法_JAVA作业,使用TreeMapK,V类
  6. 人工智能第二课:认知服务和机器人框架探秘
  7. 游戏桌面壁纸|英雄联盟,热爱游戏的朋友看这里
  8. string s=new string() 创建了几个对象_Java的String类5个常见面试题的解答过程和原理...
  9. 谈谈能带来高薪报酬的软件技术
  10. 10.一文了解JAVA反射超详尽知乎
  11. 压缩(minify)
  12. Java项目:JSP酒店客房管理系统
  13. 文档被administrator锁定怎么解除
  14. Qualcomm Ramdump debugging
  15. 个人邮箱怎么注册?手机怎么注册个人邮箱呢?
  16. 揭开Angular 7的神秘面纱
  17. 星号下三角形python答案_Python练习题:星号三角形
  18. 申请免费域名、配置域名以及https证书设置
  19. 翻译: 2.7. 如何利用帮助文档 深入神经网络 pytorch
  20. mysql学习记录之创建数据库指定编码

热门文章

  1. Transformer详解(二):Attention机制
  2. spark写表指定外部表_Spark SQL 之自定义删除外部表
  3. FFmpeg和Audacity噪声处理
  4. 定制自己的FancyBox
  5. Good Java idioms
  6. 【Bash百宝箱】认识git
  7. Android设计模式详解之观察者模式
  8. DELL戴尔灵越笔记本电脑Inspiron 15 3511原装出厂Windows10系统恢复原厂OEM系统
  9. Java设计模式--代理模式
  10. Linux基础(3)/用户及文件权限管理