fabric-私有数据

参照
https://hyperledger-fabric-cn.readthedocs.io/zh/1.2.0_zh-cn/private_data_tutorial.html
https://hyperledger-fabric.readthedocs.io/en/release-1.3/private-data-arch.html#using-indexes-with-collections

  • 定义结合
    集合定义描述了谁可以持久保存数据,数据分配到多少对等点,传播私有数据需要多少对等点,以及私有数据在私有数据库中保留多长时间,还有权限方面的设定。
项目Value
name集合名称
policy定义允许持久保存集合数据的组织peer,还有背书策略
requiredPeerCount作为背书的一个条件,私有数据被分发后,得到私有数据的peer数量。通常不建议设置为0,如果设置为0,当前节点不好用的话,数据没有在其他节点存储,会导致数据丢失。达不到规定的数量时,会向客户端返回错误。
maxPeerCount一种冗余的做法,允许有多少节点保存私有数据。
blockToLive以块为单位,存储这些私有数据的时间
  • 例子
  1. 定义文件
    在这里插入图片描述
    chaincode内部结构体
    在这里插入图片描述
    物理存储结构在这里插入图片描述
  2. 例子chaincode
    https://github.com/hyperledger/fabric-samples/blob/master/chaincode/marbles02_private/go/marbles_chaincode_private.go

读取存储私有数据

chaincode 方法chaincode api用处
readMarbleGetPrivateData用来查询[name, color, size and owner]这几个值
readMarblePrivateDetailsGetPrivateData用来查询[price]
initMarblePutPrivateData写私有数据
transferMarblePutPrivateData写私有数据
deleteDelPrivateData删除私有数据
  1. 实例化chaincode时需要指定定义的json文件
    注意–collections-config参数
peer chaincode instantiate -o orderer.example.com:7050 --tls --cafile $ORDERER_CA -C mychannel -n marblesp -v 1.0 -c '{"Args":["init"]}' -P "OR('Org1MSP.member','Org2MSP.member')" --collections-config  $GOPATH/src/github.com/chaincode/marbles02_private/collections_config.json
  1. 初始化私有数据,不是执行init而是执行invoke的initMarble
peer chaincode invoke -o orderer.example.com:7050 --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n marblesp -c '{"Args":["initMarble","marble1","blue","35","tom","99"]}'
  1. 在org1上查询私有数据
命令
peer chaincode query -C mychannel -n marblesp -c '{"Args":["readMarble","marble1"]}'
结果
{"color":"blue","docType":"marble","name":"marble1","owner":"tom","size":35}
命令
peer chaincode query -C mychannel -n marblesp -c '{"Args":["readMarblePrivateDetails","marble1"]}'
结果
{"docType":"marblePrivateDetails","name":"marble1","price":99}
  1. 在org2上查询私有数据
命令
peer chaincode query -C mychannel -n marblesp -c '{"Args":["readMarble","marble1"]}'
结果
{"docType":"marble","name":"marble1","color":"blue","size":35,"owner":"tom"}
命令
peer chaincode query -C mychannel -n marblesp -c '{"Args":["readMarblePrivateDetails","marble1"]}'
{"Error":"Failed to get private details for marble1: GET_STATE failed:
transaction ID: b04adebbf165ddc90b4ab897171e1daa7d360079ac18e65fa15d84ddfebfae90:
Private data matching public hash version is not available. Public hash
version = &version.Height{BlockNum:0x6, TxNum:0x0}, Private data version =
(*version.Height)(nil)"}"
  1. 删除数据
    私有数据可以复制到离线数据库中,同时,可以通过blockToLive这个属性指定产生几个块以后,删除私有数据,在链上只保存hash值。当数据被删除的时候,再查询数据时,会发生下面的错误
Error: endorsement failure during query. response: status:500
message:"{\"Error\":\"Marble private details does not exist: marble1\"}"
  1. 可以使用索引方便数据查询
    参照
    https://github.com/hyperledger/fabric-samples/blob/master/chaincode/marbles02_private/go/META-INF/statedb/couchdb/collections/collectionMarbles/indexes/indexOwner.json
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值