Merkle tree for non-membership proof
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(logn)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相关推荐
- Solidity实现默克尔树 Merkle Tree
Merkle Tree,也叫默克尔树或哈希树,是区块链的底层加密技术,被BTC和Ethereum区块链广泛采用.Merkle Tree是一种自下而上构建的加密树,每个叶子是对应数据 ...
- Merkle Tree(梅克尔树)算法解析
Merkle Tree概念 Merkle Tree,通常也被称作Hash Tree,顾名思义,就是存储hash值的一棵树.Merkle树的叶子是数据块(例如,文件或者文件的集合)的hash值.非叶 ...
- Merkle Tree(默克尔树)原理解析
Merkle Tree(默克尔树)原理解析 一.Merkle Tree 1.1 Merkle Tree的特点 二.Hash list 三.Merkle tree VS Hash list 四.Merk ...
- 以太坊Eth2 deposit merkle tree
1. 引言 以太坊2.0(Eth2)采用sharded PoS协议,在早期阶段(名为Phase 0),与现有的PoW链(名为Eth1链)并行运行.Eth1由miners驱动,而PoS链(又名Beaco ...
- Sparse Merkle Tree
1. 引言 前序博客有: Merkle tree及其在区块链等领域的应用 Merkle tree proof 2. Merkle tree Merkle tree可看成是对一组数据的密码学承诺,类似: ...
- 什么是Merkle Tree(默克尔树)
强迫症居中了图片哈哈哈~~~ 觉得这篇文章写得很清晰,也转载分享给大家看看mua~ Merkle Tree概念 Merkle Tree,通常也被称作Hash Tree,顾名思义,就是存储hash值的一 ...
- 【区块链 | Merkle】使用Merkle Tree空投,白名单验证
Merkle Tree在高效验证数据的同时减少了链上计算和存储,因为非常适合基于区块链的白名单验证,空投,IDO等需要验证数据的业务. Merkle Tree介绍 默克尔树,在区块链出现前,曾广泛用于 ...
- Polygon zkEVM中的Merkle tree
1. 引言 前序博客有: Merkle tree及其在区块链等领域的应用 以https://github.com/0xPolygonHermez/pil-stark为例,Polygon zkEVM中实 ...
- Merkle Tree 实现细节及(不)存在性证明
Merkle Tree in BitCoin & BitCoin Cash Merkel Tree是Bitcoin的核心组件,其相关资料已经非常丰富,所以本文档偏重于介绍Merkle Tree ...
- 理解区块链背后的Merkle Tree
你可以在Github上获取最新的源代码(C#) 目录 简介 本文中的术语 Merkle Tree被应用在哪里? 数字货币 全球供应链 保健行业 资本市场 Git 和 Mercurial 为什么使用Me ...
最新文章
- 猜一个介于1-10之间的数字,反复执行直到猜中为止
- 让Flash背景透明兼容Firefox、IE 6和IE 7的代码
- Postfix配置文档
- MIT华人博士研究新冠遭学术霸凌!斯坦福诺奖得主:“你论文少,别说话!”...
- 有空时深入阅读这两篇文章
- 网站如何接入第三方登录,微信登录和QQ登录:注册认证篇
- Spring MVC控制器JUnit测试
- 对二分法思想的体会 及 结队编程情况汇报
- LeetCode 106. 已知中序后序 求二叉树
- 如何在同一台服务器上安装多套通达OA
- 【转-Andrew_qian】stm32中断嵌套全攻略
- 在ListView中使用DropDownList绑定数据……好麻烦
- python生成字符画_通过python将图片生成字符画
- 大数据带来的安全隐患有哪些
- Matlab 2015b安装教程
- 《HTTP权威指南》读书笔记---HTTP概述
- docker curl: (56) Recv failure: Connection reset by peer问题解决方法
- 系统逻辑架构图怎么画
- 一篇文章带你了解系统流程图和业务流程图的区别
- centos1-修改ip地址、更换密码
热门文章
- 可以删除电脑文件的c语言程序,win7c盘哪些文件可以删除?其删除方法介绍
- mac无法安装dmg文件,报无可装载系统错误
- centos linux引导修复_Linux 引导修复
- 安装易飞ERP打开出错的两例
- centos 加密解密
- python 吉他_Python中用于比较吉他弦的Matplotlib幅值_频谱单位
- 【STM32f10】MDK编译报错:Undefined symbol TIM3_PWM_Init (referred from main.o)
- intel 服务器芯片型号怎么看,Intel CPU编号详解
- 伤病缠身仍愿竭力而战 澳网一别穆雷何时再见?
- word2016从某一页开始插入新的起始页码