私有数据

从v1.2开始,Fabric 提供了创建私有数据集合的功能,它允许在通道上定义的组织子集能够背书、提交或查询私有数据,而无需创建单独的通道。

产生的原因:一个通道上的一组组织需要对该通道上的其他组织保持数据私有

原来的办法:可以选择创建一个新通道,其中只包含需要访问数据的组织

原来办法的缺点:

  • 在每种情况下创建单独的通道会产生额外的管理开销(维护链码版本、策略、MSP等)
  • 不能在保留一部分数据私有的同时,可以让所有通道参与者看到该事务。

故产生了私有数据这一个概念。

私有数据集合

私有数据集合是两个元素的集合:

  1. 实际的私有数据,通过 Gossip 协议点对点地发送给授权可以看到它的组织。私有数据保存在被授权的组织的节点上的私有数据库上,它们可以被授权节点的链码访问。排序节点不能影响这里也不能看到私有数据。注意,由于 gossip 以点对点的方式向授权组织分发私有数据,所以必须设置通道上的锚节点,也就是每个节点上的 CORE_PEER_GOSSIP_EXTERNALENDPOINT 配置,以此来引导跨组织的通信。
  2. 该数据的 hash 值,该 hash 值被背书、排序之后写入通道上每个节点的账本。Hash 值作为交易的证明用于状态验证,并可用于审计

下面的图表分别说明了被授权和未被授权拥有私有数据的节点的账本内容。

什么时候使用一个通道内的组织集合,什么时候使用单独的通道

  • 当必须将整个账本在属于通道成员的组织中保密时,使用通道比较合适。
  • 当账本必须共享给一些组织,但是只有其中的部分组织可以在交易中使用这些数据的一部分或者全部时,使用集合比较合适。此外,由于私有数据是点对点传播的,而不是通过块传播的,所以在交易数据必须对排序服务节点保密时,应该使用私有数据集合。

fabric 私有数据 官方示例 Marbles

该官方示例在fabric-samples/chaincode/marbles02_private中

打开看看其中的代码

打开链码查看:

在marble数据库中 price字段只有org1中的节点可以访问。

私有数据集合的定义:

在collections_config.json中

接下来我们开始搭建环境并安装链码:

打开test-network网络

./network.sh up

创建通道

./network.sh createChannel

配置环境变量

export PATH=${PWD}/../bin:$PATHexport FABRIC_CFG_PATH=$PWD/../config/

创建链码包

peer lifecycle chaincode package marblep.tar.gz --path ../chaincode/marbles02_private/go/ --lang golang --label marblep_1

初始化成员org1节点

export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
export CORE_PEER_ADDRESS=localhost:7051

在org1的节点上安装链码

peer lifecycle chaincode install marblep.tar.gz 

初始化成员org2节点

export PATH=${PWD}/../bin:$PATH
export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org2MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
export CORE_PEER_ADDRESS=localhost:9051

在org2的节点上安装链码

peer lifecycle chaincode install marblep.tar.gz 

将获得的packageId 配置环境变量

export CC_PACKAGE_ID=marblep_1:065bc0804f121c7b4881e00f9409c7529e0860f114e630df62b5eec488c9dcbd

order CA 证书配置环境变量

export ORDERER_CA=${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

提交链码(org1和org2都要进行操作

注意:这里要将私有数据的配置文件通过--collections-config配置到这个地方来

peer lifecycle chaincode approveformyorg -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls true --cafile "$ORDERER_CA" --channelID mychannel --name marblep --version 1.0 --collections-config ../chaincode/marbles02_private/collections_config.json  --package-id $CC_PACKAGE_ID --sequence 1

查看一下链码是否就绪

注意:这里也要有--collections-config

peer lifecycle chaincode checkcommitreadiness --channelID mychannel --name marblep --version 1.0  --collections-config ../chaincode/marbles02_private/collections_config.json --sequence 1 --tls true --cafile "$ORDERER_CA" --output json

提交链码(org1或者org2提交一次即可)

注意:这里也要有--collections-config

peer lifecycle chaincode commit -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name marblep --version 1.0 --sequence 1 --tls true --collections-config ../chaincode/marbles02_private/collections_config.json --cafile "$ORDERER_CA" --peerAddresses localhost:7051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt

初始化链码

export MARBLE=$(echo -n "{\"name\":\"marble1\",\"color\":\"blue\",\"size\":35,\"owner\":\"tom\",\"price\":99}" | base64 | tr -d \\n)peer chaincode invoke -o localhost:7050 \
>   --ordererTLSHostnameOverride orderer.example.com  \
>   --tls --cafile "$ORDERER_CA"  \
>   -C mychannel  \
>   -n marblep  \
>   --transient "{\"marble\":\"$MARBLE\"}" \
>   --peerAddresses localhost:7051  \
>   --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt"  \
>   --peerAddresses localhost:9051   \
>   --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt"  \
>   -c '{"function":"InitMarble","Args":[]}'

测试

在 org1中 查询链码中的数据

peer chaincode query -C mychannel -n marblep -c '{"Args":["readMarble","marble1"]}'

在 org1中 查询链码中的私有数据

peer chaincode query -C mychannel -n marblep -c '{"Args":["readMarblePrivateDetails","marble1"]}'

在org2中 查询链码中的数据(将身份改为org2)

peer chaincode query -C mychannel -n marblep -c '{"Args":["readMarble","marble1"]}'

在 org2中 查询链码中的私有数据

peer chaincode query -C mychannel -n marblep -c '{"Args":["readMarblePrivateDetails","marble1"]}'

更换marble资产人

export MARBLE_OWNER=$(echo -n "{\"name\":\"marble1\",\"color\":\"red\",\"size\":35,\"owner\":\"Alice\",\"price\":99}" | base64 | tr -d \\n)peer chaincode invoke -o localhost:7050 --tls --cafile $ORDERER_CA -C mychannel -n marblep -c '{"Args":["transferMarble"]}' --transient "{\"marble_owner\":\"$MARBLE_OWNER\"}"

(Fabric 学习六)Fabric2.0 私有数据 使用marbles官方示例相关推荐

  1. 超级账本Fabric学习(二)Fabric1.0.0网络搭建(中)无业务逻辑处理的Fabric网络

    整合三个有依赖关系的yaml文件 1:docker-compose-cli.yaml文件源码解析 2:docker-compose-base.yaml文件源码分析 3:peer-base.yaml文件 ...

  2. 《自然语言处理实战入门》 深度学习组件TensorFlow2.0 ---- 文本数据建模流程

    文章大纲 一,准备数据 二,定义模型 三,训练模型 四,评估模型 五,使用模型 六,保存模型 参考文献 文本处理的建模流程,使用清华发布的新闻分类数据集: 中文文本分类数据集THUCNews THUC ...

  3. 转载:Asp.net 2.0 GridView数据导出Excel文件(示例代码下载)

    作者: Maco   发布日期: 2006-8-28 11:09:28 (一) . 运行示例图 1. 待导出数据的GridView图: 2. 生成的Excel文件 (二). 代码 1. 前台页面 Gr ...

  4. C# 4.0 的 Visual Studio 2010 官方示例

    http://code.msdn.microsoft.com/cs2010samples C# 4.0 的 Visual Studio 2010 示例 我们将 C# 示例分为两种不同的类别: 语言示例 ...

  5. (七)Fabric2.0智能合约实践-设置背书策略

    总目录: (0) 如何利用区块链保护知识产权 (一)HyperLedger Fabric 2.0-release测试网络部署 (二)Fabric2.0 first-network 生成配置说明 (三) ...

  6. (九)Fabric2.0 通道实践-更新通道配置(修改区块交易数量)

    总目录: (0) 如何利用区块链保护知识产权 (一)HyperLedger Fabric 2.0-release测试网络部署 (二)Fabric2.0 first-network 生成配置说明 (三) ...

  7. (Fabric 学习二)测试fabric2.0 test-network使用basic链码

    这是更新,上一次写的错误很多,这次来更新一下! 以下是参考: Hyperledger 学习(二):超级账本链码部署及调用(上:官方示例测试)_王三三的博客-CSDN博客 尝试链码编写及部署测试_rou ...

  8. Hyperledger Fabric 私有数据(2)操作流程

    1. 私有数据资产转移的案例 collections_config.json文件定义了3个私有数据集合定义:assetCollection.Org1MSPPrivateCollection和Org2M ...

  9. 第六章 Cesium学习入门之添加Geojson数据(dataSource)

    从0开始的Cesium 第一章 Cesium学习入门之搭建Vite+Vue3+Cesium开发环境 第二章 Cesium学习入门之搭建Cesium界面预览和小控件隐藏 第三章 Cesium学习入门之地 ...

最新文章

  1. SLAM之特征匹配(三)————RANSAC------LO-RANSAC Algorithm
  2. CentOs下手动升级node版本
  3. 卷积神经网络minst的verilog实现
  4. Tensorflow官方文档---起步 MNIST示例
  5. .net core实践系列之短信服务-Api的SDK的实现与测试
  6. 泰安高考2021成绩查询,泰安高考成绩查询入口2021
  7. IOC操作Bean管理注解方式(组件扫描配置)
  8. iOS 对arc的一点深入理解
  9. 【JVM】JVM 调优之 -XX 参数
  10. CentOS7 基于http服务搭建本地yum仓库
  11. [Teamcenter 2007 开发实战] 获取错误或提示信息
  12. 黑马程序员vue前端基础教程-4个小时带你快速入门vue
  13. JAVA/JSP小区物业管理系统
  14. 民生银行java 面试_2019民生银行招聘面试试题及答案解析
  15. 【专家推荐】保姆级开源工具推荐,一用一个爽,非常劲爆(收藏系列)
  16. 零线和地线的区别、示波器如何测量市电
  17. PointNet论文翻译
  18. Java咖啡馆(4)——品味第一杯咖啡
  19. 高通骁龙X55 5G modem信息图和骁龙X55调制解调器简介
  20. 2019世界智能网联汽车大会10月召开

热门文章

  1. 【RDMA】RDMA编程
  2. 线性代数(三十九) :格拉姆-施密特正交化与标准正交基
  3. 什么是X window
  4. ON DUPLICATE KEY UPDATE 作用及一句SQL实现批量修改
  5. vscode terminal主题配色
  6. android 小米闹钟,闹钟
  7. 八皇后问题——列出所有的解,可推至N皇后
  8. 微信小程序checkbox被挤压变形解决办法
  9. 【社区周会】2021-03-23 内容概要
  10. 前端代码 录音样式 类似微信发送语音