我们在插入账本上插入数据时,数据块需要根据背书策略进行相应的签名,才能真正的插入数据,下面举例说明

下面是我的链码 及背书策略

peer chaincode upgrade -o orderer.example.com:7050 -C mychannel -n mychaincode01 -v 2.0 -c '{"Args":[]}' -P "AND ('Org1MSP.member','Org2MSP.member')"

可以看到背书策略为 "AND ('Org1MSP.member','Org2MSP.member')"  

意思是说,如果想要修改数据需要Org1 的peer 任何一个和Org2 的peer的任何一个进行签名才能提交修改数据

下面是我的修改请求:

peer chaincode invoke -o orderer.example.com:7050 -C mychannel -n mychaincode01 --peerAddresses peer0.org2.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt -c '{"Args":["addOne","9","cat","class6","77","汉江路"]}'

修改时需要指定要通知的order节点地址(必须指定),以及org1 peer 的地址(必须指定),org1 peer的tls ca.crt(必须指定)和 org2 peer的地址(必须指定),org2 peer的tls ca.crt,因为我的背书策略是org1和org2的成员的任意一个即可,所以需要他们都同意(这里的通以就是用tls ca.crt去签名),完成后才能真正的提交数据 到账本,本组织的节点及别的组织的节点才能同步到数据,

来看看结果,以下是org1和org2共用的couchdb 端口号是5984,实际生产中我们不建议组织之间公用couchdb,而是每个组织一个couchdb或每个组织的peer各一个couchdb,这样在一个peer down了以后能保证服务的正常运行:

 

 

 在来看看org3用到的couchdb 端口号是6984的内容:

 

 

下面我们举个不能够正常插入的例子

还是以上面的链码及背书策略为例:

peer chaincode invoke -C mychannel -n mychaincode01 -c '{"Args":["addOne","10","cat","class7","99","大海路"]}'

 

 

看看执行添加学生时操作成功,也没报什么错误,但是当我们查询时却不能查到数据:

 

刷新couchdb的页面看看数据是否插入也没有插入:

 

 

我们再将添加操作的命令改成下面的命令:

peer chaincode invoke -o orderer.example.com:7050 -C mychannel -n mychaincode01 --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt -c '{"Args":["addOne","11","cat","class8","100","天津路"]}'

执行结果如下:

 

 可以看到还是没能将数据插入到账本中,虽然执行成功,但是没能提交,来看看peer0.org1节点的后台日志:

 

从内容当中可以看到校验时发现提交家的数据跟背书策略不符。

再看看couchdb:

 

 

 

还是一样数据没能插入进去

 

下面我们再正常插入数据看看:

peer chaincode invoke -o orderer.example.com:7050 -C mychannel -n mychaincode01 --peerAddresses peer0.org2.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt -c '{"Args":["addOne","12","cat","class12","67","正常路"]}'

 

peer0.org1日志:

 

couchdb:

 

 

可以看到正常插入了数据也同步到了另外的couchdb中即peer的账本中。

 

这里我只是讲了一种背书策略,大家可以参考下面的文档了解更多的背书策略写法:

https://blog.csdn.net/weixin_43988498/article/details/109129127

 

"AND ('Org1MSP.member','Org2MSP.member')"
posted on 2021-01-29 10:55  EZgod  阅读(111)  评论(0编辑  收藏  举报