Fabric private data入门实战
Hyperledger Fabric private data是1.2版本引入的新特性,fabric private data是利用旁支数据库(SideDB)来保存若干个通道成员之间的私有数据,从而在通道之上又提供了一层更灵活的数据保护机制。本文将介绍如何在链码开发中使用fabric private data。
fabric private data利用SideDB来保存私有数据,相当于在通道之上又提供了一层更细粒度的数据隐私保护机制。本文将介绍fabric private data的引入目的、基本概念与应用场景。
什么是fabric private data?
目前在Hyperledger Fabric中实现数据隐私的方法是使用通道。但是官方并不孤立为了实现数据的隐私保护而在大型网络中创建大量通道,因为这会带来额外的开销,例如管理策略、链码版本以及成员服务提供(MSP)等。在一个通道中,所有的数据要么是公开的,要么是私有的。因此如果你想要将资产转给通道外的成员会很麻烦。这就是Hyperledger Fabric引入私有交易的原因。farbic private data允许基于策略创建私有数据集,来定义通道中的哪些成员可以访问数据。可以简单地通过添加策略来管理fabric private data。这使得可以将某些数据仅对部分成员公开。
考虑一下Hyperledger Fabric的marbles示例。所有的marble数据都可以公开,除了其持有人以及价格信息,这两个数据是不能对别人公开的,价格不应该被别人了解。可能你需要跟踪这个数据,因为你需要验证在销售marble的人是否是真正的持有人。一个假想的marble审计公司可以作为你的合伙人来验证这一点。如果你使用通道,那么所有的你的行为将记录在账本状态中,而任何人都看得到。
fabric private data是如何解决上述问题的?
在上图中,第一个集合,Channel Read-Write Sets”
是没有引入fabric private data时的架构,每一个交易都记录其状态和历史。
第二个集合,private state partition 1
则显示了在两个分属不同机构的节点之间的一个共享私有状态。这个状态是根据预先的策略在节点间复制得到的。
第三个集合,private state partition 2&3
则显示了fabric private data的真正为例。数据集可以被某些成员忽略。这意味着你可以为每一个marble卖家和审计者单独设立私有数据集。这些数据集允许添加一些额外的数据,主要的数据还是保存在主状态和账本中。
被授权的节点将可以看得到在主账本上的数据哈希,以及在私有数据库中的真实数据。未得到授权的节点将不会同步私有数据库,只能看到在主账本上的数据哈希。由于哈希是不可逆的,因此这些未授权的节点无法看到真实的数据。
从更高的层面看,fabric private data解决的问题看起来是这样:
fabric private data用例
我们使用Hyperledger Fabric中经典的fabcar案例来展示如何使用私有数据集。initLedger函数将在我们的数据集中创建10个新车。所有的这些车辆可以被网络中的任何人查看。现在让我们创建一个私有数据库,而这个数据将只和我们持有的另一个成员车库共享。
fabric private data数据集配置
我们首先需要一个数据集配置文件collections_config.json,它包含了私有数据集名称和访问策略。访问策略类似于背书策略,这允许我们使用已经存在的策略逻辑,例如OR、AND等。
[ { "name": "carCollection", "policy": "OR ('Org1MSP.member','Org2MSP.member')", "requiredPeerCount": 0, "maxPeerCount": 3, "blockToLive":1000000 } ]
修改链码以支持fabric private data
下面是原始的createCar函数:
async createCar(stubHelper: StubHelper, args: string[]) { const verifiedArgs = await Helpers.checkArgs<any>(args[0], Yup.object() .shape({ key: Yup.string().required(), make: Yup.string().required(), model: Yup.string().required(), color: Yup.string().required(), owner: Yup.string().required(), })); let car = { docType: 'car', make: verifiedArgs.make, model: verifiedArgs.model, color: verifiedArgs.color, owner: verifiedArgs.owner }; await stubHelper.putState(verifiedArgs.key, car); }
要把数据加入私有数据集carCollection,我们需要指定目标数据集:
await stubHelper.putState(verifiedArgs.key, car, {privateCollection: 'carCollection'});
接下来,要查询车辆的话,我们也需要指定目标私有数据集:
async queryPrivateCar(stubHelper: StubHelper, args: string[]) { const verifiedArgs = await Helpers.checkArgs<any>(args[0], Yup.object() .shape({ key: Yup.string().required(), })); const car = await stubHelper.getStateAsObject(verifiedArgs.key, {privateCollection: 'carCollection'}); if (!car) { throw new NotFoundError('Car does not exist'); } return car; }
同样,对于删除和更新操作,都需要指定要操作的目标私有数据集。
fabric private data链码最佳实践
当然,我们的数据中有一部分是Hyperledger Fabric网络中的任何人都看得到的。但是,其中某些数据是私有的,并且保存在私有数据集中,因此只能被数据集配置文件中定义的对等节点访问。
我们建议在公开和私有数据集中使用相同的键来保存数据,以便更易于数据的提取操作。
如果要快速掌握hyperledger fabric区块链的开发,推荐汇智网的在线互动实战教程:
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Fabric Kafka入门
Hyperledger Fabric推荐Kafa用于生产环境。Kafa是一个分布式、具有水平伸缩能力、崩溃容错能力的日志系统。在Hyperledger Fabric区块链中可以有多个Kafka节点,使用zookeeper进行同步管理。本文将介绍Kfaka的基本工作原理,以及在HyperledgerFabric中使用Kafka和zookeeper实现共识的原理,并通过一个实例剖析Hyperledger Farbic中Kafka共识的达成过程。 如果希望快速掌握Fabric区块链的链码及应用开发,建议访问汇智网的在线互动课程: Fabric区块链Java开发详解 Fabric区块链NodeJs开发详解 一、Kafka工作原理 Kafka本质上是一个消息处理系统,它使用的是经典的发布-订阅模型。消息的消费者订阅特定的主题,以便收到新消息的通知,生产者则负责消息的发布。 当主题的数据规模变得越来越大时,可以拆分为多个分区,Kafka保障在一个分区内的消息是按顺序排列的。 Kafka并不跟踪消费者读取了哪些消息,也不会自动删除已经读取的消息。Kafka会保存消息一段时间,例如一天,或者直到数据规...
- 下一篇
AutoML数据增广
DeepAugment是一个专注于数据扩充的自动化工具。 它利用贝叶斯优化来发现针对您的图像数据集定制的数据增强策略。 DeepAugment的主要优点和特点是: 降低CNN模型的错误率(WRN-28-10显示CIFAR10的错误率降低了60%) 通过自动化流程可以节省时间 比谷歌之前的解决方案——AutoAugment——快50倍 完成的包在PyPI上。你可以通过运行以下命令来在终端上安装它: $ pip install deepaugment 你也可以访问项目的自述文件或运行谷歌Colab笔记本教程。要想了解更多关于我是如何构建这个的,请继续阅读! 引言 数据是人工智能应用中最关键的部分。没有足够的标记数据常常导致过度拟合,这意味着模型将无法归纳为未发现的示例。这可以通过数据扩充来缓解,数据扩充可以有效地增加网络所看到的数据的数量和多样性。它是通过对原始数据集(如旋转、裁剪、遮挡等)应用转换,人为地生成新数据来实现的。然而,确定哪种增强对手头的数据集最有效并不是一项简单的任务。为了解决这个问题,谷歌去年发布了AutoAugment,它通过使用强化学习发现了给定数据集的优化增强。 由...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Hadoop3单机部署,实现最简伪集群
- 设置Eclipse缩进为4个空格,增强代码规范
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16