1. 引言

Merkle tree相关前序博客有:

  • Merkle tree及其在区块链等领域的应用
  • Merkle tree proof【基于Merkle tree的membership proof,或existenceProof】

基于Merkle tree的non-membership proof或NonExistenceProof 相关代码实现见:

  • github.com/confio/ics23
//
//NonExistenceProof takes a proof of two neighbors, one left of the desired key,
//one right of the desired key. If both proofs are valid AND they are neighbors,
//then there is no valid proof for the given key.
type NonExistenceProof struct {Key   []byte          `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`Left  *ExistenceProof `protobuf:"bytes,2,opt,name=left,proto3" json:"left,omitempty"`Right *ExistenceProof `protobuf:"bytes,3,opt,name=right,proto3" json:"right,omitempty"`
}

基于Merkle tree的membership proof复杂度为O(log⁡n)O(\log n)O(logn)。
若Merkle tree未排序,则证明non-membership proof的复杂度为O(n)O(n)O(n),但是,若采用sorted Merkle tree,则可仅查找non-element相邻的2个叶子节点,并证明这2个叶子节点是邻居,即可证明non-element不再该sorted Merkle tree中。

2. Merkle tree

以对数字集{6,3,9,0,8,4,7,2}\{6,3,9,0,8,4,7,2\}{6,3,9,0,8,4,7,2}的Merkle tree为例:

            R/       \N12          N34/ \           / \N1    N2     N3     N4/  \   / \    / \    / \
6   3   9  0  8   4  7   2

N为Merkle tree中的节点,每个节点为其底层2个节点的拼接值哈希,有 N=hash(N_left | N_right)。R为该Merkle tree的root hash,可作为该数据集的commitment值发布。
为了证明某元素在该数据集内,仅需要公开某些哈希值。如证明0在该数据集内:

           R/       \N12           N34/ \N1     N2/ \9   0

proof中仅需包含9、N1、N34即可重构出root hash R。【仅公开一个该数据集内的一个元素和相应的一个branch】

3. Sorted Merkle tree

将第2节中的数据集先排序构建的的即为Sorted Merkle tree,可用于证明某元素不在该数据集内。
仍然以对数字集{6,3,9,0,8,4,7,2}\{6,3,9,0,8,4,7,2\}{6,3,9,0,8,4,7,2}为例,相应的Sorted Merkle tree为:

            R/       \N12          N34/ \           / \N1     N2     N3    N4/  \   / \    / \    / \
0   2   3  4  6   7  8   9

为证明1不在该数据集内:

            R/       \N12          N34/ \           N1     N2    /  \
0   2

proof中仅需包含0、2、N2、N34,由于0<1<2,且0和2相邻,因此可证明1不在该数据集内。【最佳情况下是仅公开该数据集内的2个元素和相应的一个branch】

当证明5不在该数据集内时:【最差情况下,需公开该数据集内的4个元素和相应的2个branch。】

           R/       \N12        N34/ \         / \N1   N2      N3  N4/ \   / \3   4 6   7

参考资料

[1] Sorted merkle tree as solution to issue #693
[2] Proof of membership and non-membership in Merkle tree (Hash-tree)

Merkle tree for non-membership proof相关推荐

  1. Solidity实现默克尔树 Merkle Tree

    ​​Merkle Tree​​​,也叫默克尔树或哈希树,是区块链的底层加密技术,被BTC和Ethereum区块链广泛采用.​​Merkle Tree​​​是一种自下而上构建的加密树,每个叶子是对应数据 ...

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

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

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

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

  4. 以太坊Eth2 deposit merkle tree

    1. 引言 以太坊2.0(Eth2)采用sharded PoS协议,在早期阶段(名为Phase 0),与现有的PoW链(名为Eth1链)并行运行.Eth1由miners驱动,而PoS链(又名Beaco ...

  5. Sparse Merkle Tree

    1. 引言 前序博客有: Merkle tree及其在区块链等领域的应用 Merkle tree proof 2. Merkle tree Merkle tree可看成是对一组数据的密码学承诺,类似: ...

  6. 什么是Merkle Tree(默克尔树)

    强迫症居中了图片哈哈哈~~~ 觉得这篇文章写得很清晰,也转载分享给大家看看mua~ Merkle Tree概念 Merkle Tree,通常也被称作Hash Tree,顾名思义,就是存储hash值的一 ...

  7. 【区块链 | Merkle】使用Merkle Tree空投,白名单验证

    Merkle Tree在高效验证数据的同时减少了链上计算和存储,因为非常适合基于区块链的白名单验证,空投,IDO等需要验证数据的业务. Merkle Tree介绍 默克尔树,在区块链出现前,曾广泛用于 ...

  8. Polygon zkEVM中的Merkle tree

    1. 引言 前序博客有: Merkle tree及其在区块链等领域的应用 以https://github.com/0xPolygonHermez/pil-stark为例,Polygon zkEVM中实 ...

  9. Merkle Tree 实现细节及(不)存在性证明

    Merkle Tree in BitCoin & BitCoin Cash Merkel Tree是Bitcoin的核心组件,其相关资料已经非常丰富,所以本文档偏重于介绍Merkle Tree ...

  10. 理解区块链背后的Merkle Tree

    你可以在Github上获取最新的源代码(C#) 目录 简介 本文中的术语 Merkle Tree被应用在哪里? 数字货币 全球供应链 保健行业 资本市场 Git 和 Mercurial 为什么使用Me ...

最新文章

  1. 猜一个介于1-10之间的数字,反复执行直到猜中为止
  2. 让Flash背景透明兼容Firefox、IE 6和IE 7的代码
  3. Postfix配置文档
  4. MIT华人博士研究新冠遭学术霸凌!斯坦福诺奖得主:“你论文少,别说话!”...
  5. 有空时深入阅读这两篇文章
  6. 网站如何接入第三方登录,微信登录和QQ登录:注册认证篇
  7. Spring MVC控制器JUnit测试
  8. 对二分法思想的体会 及 结队编程情况汇报
  9. LeetCode 106. 已知中序后序 求二叉树
  10. 如何在同一台服务器上安装多套通达OA
  11. 【转-Andrew_qian】stm32中断嵌套全攻略
  12. 在ListView中使用DropDownList绑定数据……好麻烦
  13. python生成字符画_通过python将图片生成字符画
  14. 大数据带来的安全隐患有哪些
  15. Matlab 2015b安装教程
  16. 《HTTP权威指南》读书笔记---HTTP概述
  17. docker curl: (56) Recv failure: Connection reset by peer问题解决方法
  18. 系统逻辑架构图怎么画
  19. 一篇文章带你了解系统流程图和业务流程图的区别
  20. centos1-修改ip地址、更换密码

热门文章

  1. 可以删除电脑文件的c语言程序,win7c盘哪些文件可以删除?其删除方法介绍
  2. mac无法安装dmg文件,报无可装载系统错误
  3. centos linux引导修复_Linux 引导修复
  4. 安装易飞ERP打开出错的两例
  5. centos 加密解密
  6. python 吉他_Python中用于比较吉他弦的Matplotlib幅值_频谱单位
  7. 【STM32f10】MDK编译报错:Undefined symbol TIM3_PWM_Init (referred from main.o)
  8. intel 服务器芯片型号怎么看,Intel CPU编号详解
  9. 伤病缠身仍愿竭力而战 澳网一别穆雷何时再见?
  10. word2016从某一页开始插入新的起始页码