solidity Dapp 基于merkle的选择性披露合约——我的还是我的
现在生活中,大家为了隐私,并不希望直接将个人信息给别人看,比如我们去住酒店时,需要登记姓名、身份证号信息,但是如果我们直接把身份证给前台人员的话,前台人员就可以看到我们的民族、住址等信息。那么我们有什么办法呢?用户属性的选择性披露能够降低风险。
1、生成属性默克尔树
关于Merkle Tree默克尔树的介绍,可以参考这篇文件。默克尔树能够将一个区块中的所有交易形成一个哈希值,并将这个哈希值放到区块头,任何对交易的篡改都会导致哈希值变化。我们可以将用户的属性作为交易,计算所有属性的默克尔树,比如我们要对个人的属性构建默克尔树:
下边是合约初始化时,构建merkle树。
2、生成proof
假如你现在要去网吧,网管要验证你的年龄大于18,你可以生成对应的proof(披露字段、merkleproof、披露字段index),其中只暴露年龄,其他身份属性不暴露,示例如下:
proof的组成:
哈希值路径,hash0,hash5
实际的年龄,例如19;
下边是生成用户的proof;
3、验证
网管在收到你提交的proof后,需要进行验证,主要包括以下步骤:
找到第三方的发布的权威合约,例如公安、民政等;
从合约里获取用户对应merkleroot;上图的蓝色部分;
3.使用披露字段(年龄)、字段序号index、MerkleProof、MerkleRoot等进行默克尔验证。
4.验证通过,显示可信的披露内容为true。
网管验证完成了你的年龄,但是并没有获得除了年龄之外的其他身份信息,从而实现了选择性披露。
总结
以上我们讲解了在用户身份中具有多个属性时,用户只选择性的暴露其中某个属性,
solidity Dapp 基于merkle的选择性披露合约——我的还是我的相关推荐
- 基于以太坊的智能合约开发教程Solidity modifier
基于以太坊的智能合约开发教程Solidity modifier pragma solidity ^0.4.0;contract modifierTest{address owner;uint publ ...
- 去中心化数字身份DID简介——三、用户属性的选择性披露
在上一篇文章中,我们以最简单的生成DID,颁发VC,验证VP流程介绍了DID的用法,但是在实际生活中,我们并不总是希望直接将整个证件VC亮给验证者看,比如我们去住酒店时,需要登记姓名.身份证号信息,但 ...
- Solidity 官方文档中文版 2_Ethereum 智能合约介绍
一个简单的智能合约 先从一个非常基础的例子开始,不用担心你现在还一点都不了解,我们将逐步了解到更多的细节. Storage contract SimpleStorage {uint storedDat ...
- 《如何五分钟创建自己的新币token 》Dapp开发 Web3+以太坊+智能合约开发 (一)
Dapp开发 Web3+以太坊+智能合约开发 (一)如何创建自己的新币token 前言 就是想开发一个Dapp,实现一下功能.未来有可能的话建立一下自己的社区.话不多说直接开始: 开发自己的ETH代币 ...
- 基于 Openzeppelin 的可升级合约解决方案的注意事项
基于 Openzeppelin 的可升级合约解决方案的注意事项 注意事项 构造函数 在编写可升级合约时请不要使用构造函数contructor(),我们知道可升级合约运行时逻辑与数据分离的,合约数据保存 ...
- 基于星云链的智能合约与Dapp(四)——编写并运行智能合约
一般智能合约需要以下几个步骤: 1.编写智能合约 2.部署智能合约 3.调用智能合约,验证合约执行结果 编写智能合约 Nebulas实现了NVM虚拟机来运行智能合约,NVM的实现使用了JavaScri ...
- 基于以太坊的拍卖系统-合约编写(一)
安装ganache-cli ganache-cli是以太坊节点仿真器软件ganache的命令行版本,可以方便开发者快速进行以太坊DApp的开发与测试. npm install -g ganache-c ...
- solidity开发以太坊代币智能合约
智能合约开发是以太坊编程的核心之一,而代币是区块链应用的关键环节,下面我们来用solidity语言开发一个代币合约的实例,希望对大家有帮助. 以太坊的应用被称为去中心化应用(DApp),DApp的开发 ...
- ApeWorX: 新的基于 Python 语言的智能合约开发框架
Brownie 是 Python 开发人员经常使用智能合约框架. 现在出现了一个 Brownie 的继任者,可以让 Python Web3 开发人员获得更好的体验. 在本文中,我将讨论这个 Brown ...
最新文章
- Android Q Labs| 结束演讲
- 018_Spring+ActiveMQ(消息中间件)
- mysql在mac下的data目录_Mysql在mac中目录结构用法命令
- Dockerfile----ubuntu-java
- 转:VC9(VC2008.net) 编译安装 boost 1.39 库
- 全局照明算法基础——从辐射亮度到渲染方程
- 基于事件驱动架构构建微服务第3部分:Presenters, Views和Controllers
- [JS-BOM]BOM_Window窗口对象
- 猜数游戏c语言编程_做游戏,学编程(C语言) 10 僵尸危机
- QT中如何实现Thread与GUI的主线程连通
- cocoachina上很酷的帖子
- 大熊君JavaScript插件化开发------(实战篇之DXJ UI ------ ItemSelector)
- WPF中Binding的验证
- spine基础以及骨骼动画的使用(1)
- 视频教程-使用 Pandas 与 Matplotlib 分析科比职业生涯数据-Python
- 常见linux软件下载地址
- 保证成功率的方案,首先要从实施维度入手
- Zemax操作--9(全局坐标设定及使用方法)
- 显示器偏色测试软件,显示器显示偏色
- 用Python自动清理系统垃圾,再也不用360安全卫士了