data-access-control-chaincode fabric 测试网络 DataContract & MemberContract 合约调用

206 阅读4分钟

MemberContract 合约调用

initMemberAttr

MemberAttrCmd Arg : 
 "{"age":30,"level":5,"roles":["Admin"]}" 

peer chaincode invoke -d -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n data-access-control-chaincode --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":"org.hepeng.dac.chaincode.contract.MemberContract:initMemberAttr","Args":["{"age":30,"level":5,"roles":["Admin"]}"]}'

image.png

updateMemberAttr


MemberAttrCmd Arg : 
 "{"age":30,"level":9999,"roles":["Admin","VIP","SVIP"]}" 

peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n data-access-control-chaincode --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":"org.hepeng.dac.chaincode.contract.MemberContract:updateMemberAttr","Args":[ "{"age":30,"level":9999,"roles":["Admin","VIP","SVIP"]}"  ]}'

image.png

image.png

getMemberAttr

peer chaincode query -C mychannel -n data-access-control-chaincode -c '{"function":"org.hepeng.dac.chaincode.contract.MemberContract:getMemberAttr", "Args":[""]}'

image.png


DataContract 合约调用

saveData

DataCmd Arg : 
 "{"key":"data-3","payload":"{\"xx\":\"dadsd\",\"ws\":\"dasdnaksdasjkd38\"}"}" 

DataAttrCmd Arg : 
 "{"level":5,"readers":["reader-member-key-1","reader-member-key-2"],"writers":["writer-member-key-1"]}" 

DacPolicyCmdArray Arg : 
 "[{"ageExpression":"clientMemberLevel>30","closeTimestamp":1662736374000,"levelExpression":"clientMemberAge>3","location":"上海","openTimestamp":1649427174000,"policyKey":"DACPolicy-1","roles":["Admin","VIP"]},{"ageExpression":"clientMemberLevel>19","closeTimestamp":1662736374000,"levelExpression":"clientMemberAge>3","location":"伦敦","openTimestamp":1649427174000,"policyKey":"DACPolicy-2","roles":["Admin","VIP"]}]" 


peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n data-access-control-chaincode --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":"org.hepeng.dac.chaincode.contract.DataContract:saveData","Args":["{"key":"data-3","payload":"{\"xx\":\"dadsd\",\"ws\":\"dasdnaksdasjkd38\"}"}" , "{"level":5,"readers":["reader-member-key-1","reader-member-key-2"],"writers":["writer-member-key-1"]}" , "[{"ageExpression":"clientMemberLevel>30","closeTimestamp":1662736374000,"levelExpression":"clientMemberAge>3","location":"上海","openTimestamp":1649427174000,"policyKey":"Policy-1","roles":["Admin","VIP"]},{"ageExpression":"clientMemberLevel>19","closeTimestamp":1662736374000,"levelExpression":"clientMemberAge>3","location":"伦敦","openTimestamp":1649427174000,"policyKey":"Policy-2","roles":["Admin","VIP"]}]"  ]}'

image.png

image.png

image.png


getData

DataQuery Arg : 
 "{"envArg":{"location":"伊斯坦布尔","time":1649588888836},"key":"data-1"}" 

peer chaincode query -C mychannel -n data-access-control-chaincode -c '{"function":"org.hepeng.dac.chaincode.contract.DataContract:getData", "Args":[ "{"envArg":{"location":"伊斯坦布尔","time":1649587484310},"key":"data-1"}" ]}'

image.png


updateData


DataCmd Arg : 
 "{"key":"data-3","payload":"{\"security\":\"CAS\",\"project leader\":\"Eren Jaeger\",\"service mesh\":\"istio\",\"MQ\":\"rabbitMQ\",\"blockchain\":\"fabric\",\"web\":\"react\",\"lang\":\"golang\",\"DB\":\"TiDB\",\"web server\":\"nginx\"}"}" 

EnvArg Arg : 
 "{"location":"芝加哥","time":1649589093730}" 

peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n data-access-control-chaincode --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":"org.hepeng.dac.chaincode.contract.DataContract:updateData","Args":[  "{"key":"data-3","payload":"{\"security\":\"CAS\",\"project leader\":\"Eren Jaeger\",\"service mesh\":\"istio\",\"MQ\":\"rabbitMQ\",\"blockchain\":\"fabric\",\"web\":\"react\",\"lang\":\"golang\",\"DB\":\"TiDB\",\"web server\":\"nginx\"}"}" ,  "{"location":"芝加哥","time":1649589093730}" ]}'

image.png

image.png

getDataAttr


dataKey Arg : "data-3"

peer chaincode query -C mychannel -n data-access-control-chaincode -c '{"function":"org.hepeng.dac.chaincode.contract.DataContract:getDataAttr", "Args":[ "data-3" ]}'

image.png

image.png

image.png


updateDataAttr


dataKey Arg : "data-3"

DataAttrCmd Arg : 
 "{"level":66,"readers":["writer-member-key-1","writer-member-key-2","writer-member-key-3"],"writers":["reader-member-key-1","reader-member-key-2","reader-member-key-3"]}" 


peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n data-access-control-chaincode --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":"org.hepeng.dac.chaincode.contract.DataContract:updateDataAttr","Args":[ "data-3" , "{"level":66,"readers":["writer-member-key-1","writer-member-key-2","writer-member-key-3"],"writers":["reader-member-key-1","reader-member-key-2","reader-member-key-3"]}"  ]}'


image.png

image.png


getDataAllPolicy


dataKey Arg : "data-3"

peer chaincode query -C mychannel -n data-access-control-chaincode -c '{"function":"org.hepeng.dac.chaincode.contract.DataContract:getDataAllPolicy", "Args":[ "data-3" ]}'


image.png

image.png

image.png


getDataPolicies

DACPolicyQuery Arg : 
 "{"dataKey":"data-3","policyKeys":["DACPolicy-2","DACPolicy-678","DACPolicy-3"]}" 

peer chaincode query -C mychannel -n data-access-control-chaincode -c '{"function":"org.hepeng.dac.chaincode.contract.DataContract:getDataAllPolicy", "Args":[ "{"dataKey":"data-3","policyKeys":["DACPolicy-2","DACPolicy-678","DACPolicy-3"]}"  ]}'

image.png


updateDACPolicy

dataKey Arg : "data-3"

DACPolicyCmd Arg : 
 "[{"ageExpression":"clientMemberLevel>30","closeTimestamp":1649593264084,"levelExpression":"clientMemberAge>3","location":"东京","openTimestamp":1649593264084,"policyKey":"DACPolicy-1","roles":["Admin","VIP"]},{"ageExpression":"clientMemberLevel>19","closeTimestamp":1649593264084,"levelExpression":"clientMemberAge>3","location":"洛杉矶","openTimestamp":1649593264084,"policyKey":"DACPolicy-2","roles":["Admin","VIP"]}]" 

peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n data-access-control-chaincode --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":"org.hepeng.dac.chaincode.contract.DataContract:updateDACPolicy","Args":[ "data-3" ,  "[{"ageExpression":"clientMemberLevel>30","closeTimestamp":1649593264084,"levelExpression":"clientMemberAge>3","location":"东京","openTimestamp":1649593264084,"policyKey":"DACPolicy-1","roles":["Admin","VIP"]},{"ageExpression":"clientMemberLevel>19","closeTimestamp":1649593264084,"levelExpression":"clientMemberAge>3","location":"洛杉矶","openTimestamp":1649593264084,"policyKey":"DACPolicy-2","roles":["Admin","VIP"]}]"  ]}'

image.png

image.png


removeDACPolicy


RemoveDACPolicyCmd Arg : 
 "{"dataKey":"data-3","policyKeys":["DACPolicy-1"]}" 

peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n data-access-control-chaincode --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":"org.hepeng.dac.chaincode.contract.DataContract:removeDACPolicy","Args":[  "{"dataKey":"data-3","policyKeys":["DACPolicy-1"]}"  ]}'

image.png

image.png


测试数据访问策略

调用账号换成 Org1 User1 账号调用

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

初始化 User1 成员属性

MemberAttrCmd Arg : 
 "{"age":30,"level":2,"roles":["User"]}" 

peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n data-access-control-chaincode --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":"org.hepeng.dac.chaincode.contract.MemberContract:initMemberAttr","Args":["{"age":30,"level":1,"roles":["User"]}"]}'

调用 getData

DataQuery Arg : 
 "{"envArg":{"location":"伊斯坦布尔","time":1649596234054},"key":"data-3"}" 

peer chaincode query -C mychannel -n data-access-control-chaincode -c '{"function":"org.hepeng.dac.chaincode.contract.DataContract:getData", "Args":[ "{"envArg":{"location":"伊斯坦布尔","time":1649596234054},"key":"data-3"}" ]}'

响应:

[root@localhost test-network]# peer chaincode query -C mychannel -n data-access-control-chaincode -c '{"function":"org.hepeng.dac.chaincode.contract.DataContract:getData", "Args":[ "{\"envArg\":{\"location\":\"伊斯坦布尔\",\"time\":1649596234054},\"key\":\"data-1\"}" ]}'
{"msg":"Access Denied:访问角色检查未通过"}

image.png

给 User1 赋予 VIP 角色 ,调用 updateMemberAttr


MemberAttrCmd Arg : 
 "{"age":30,"level":9999,"roles":["User" ,"VIP"]}" 

peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n data-access-control-chaincode --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":"org.hepeng.dac.chaincode.contract.MemberContract:updateMemberAttr","Args":[ "{"age":30,"level":9999,"roles":["User","VIP"]}"  ]}'

User1 具有了 "VIP" 角色 image.png

再次调用 getData

DataQuery Arg : 
 "{"envArg":{"location":"伊斯坦布尔","time":1649597275808},"key":"data-3"}" 

peer chaincode query -C mychannel -n data-access-control-chaincode -c '{"function":"org.hepeng.dac.chaincode.contract.DataContract:getData", "Args":[ "{"envArg":{"location":"伊斯坦布尔","time":1649597275808},"key":"data-3"}" ]}'

响应:

[root@localhost test-network]# peer chaincode query -C mychannel -n data-access-control-chaincode -c '{"function":"org.hepeng.dac.chaincode.contract.DataContract:getData", "Args":[ "{\"envArg\":{\"location\":\"伊斯坦布尔\",\"time\":1649596234054},\"key\":\"data-3\"}" ]}'
{"msg":"Access Denied:访问地点检查未通过"}

image.png

修改参数 location 后调用:



peer chaincode query -C mychannel -n data-access-control-chaincode -c '{"function":"org.hepeng.dac.chaincode.contract.DataContract:getData", "Args":[ "{"envArg":{"location":"上海","time":1649597275808},"key":"data-3"}" ]}'

image.png


测试访问数据读写集合

给 "data-3" 数据的读写集合增加 User1 成员

切换到 Org1 Admin 账号调用

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

测试网络下 User1 成员的 key : org.hepeng.dac.chaincode.data.MemberAttr:Org1MSP:x509::CN=User1@org1.example.com, OU=client, L=San Francisco, ST=California, C=US::CN=ca.org1.example.com, O=org1.example.com, L=San Francisco, ST=California, C=US

增加读集合:


peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n data-access-control-chaincode --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":"org.hepeng.dac.chaincode.contract.DataContract:updateDataAttr","Args":[ "data-3" , "{"level":66,"readers":["org.hepeng.dac.chaincode.data.MemberAttr:Org1MSP:x509::CN=User1@org1.example.com, OU=client, L=San Francisco, ST=California, C=US::CN=ca.org1.example.com, O=org1.example.com, L=San Francisco, ST=California, C=US" , "reader-member-key-1","reader-member-key-2","reader-member-key-3"],"writers":["writers-member-key-1","writers-member-key-2","writers-member-key-3"]}"  ]}'

image.png

调用 updateData 更新数据:


DataCmd Arg : 
 "{"key":"data-3","payload":"{\"security\":\"Spring Security\",\"project leader\":\"Eren Jaeger\",\"service mesh\":\"istio\",\"MQ\":\"rabbitMQ\",\"blockchain\":\"fabric\",\"web\":\"react\",\"lang\":\"golang\",\"DB\":\"TiDB\",\"web server\":\"nginx\"}"}" 

# 故意修改为不满足访问策略的 location
EnvArg Arg : 
 "{"location":"东京","time":1649596234054}" 

peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n data-access-control-chaincode --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":"org.hepeng.dac.chaincode.contract.DataContract:updateData","Args":[  "{"key":"data-3","payload":"{\"security\":\"Spring Security\",\"project leader\":\"Eren Jaeger\",\"service mesh\":\"istio\",\"MQ\":\"rabbitMQ\",\"blockchain\":\"fabric\",\"web\":\"react\",\"lang\":\"golang\",\"DB\":\"TiDB\",\"web server\":\"nginx\"}"}" ,  "{"location":"东京","time":1649596234054}" ]}'

日志内容:

15:06:29.565 [fabric-txinvoke:3] INFO  o.h.d.chaincode.contract.ACSentinel - 请求者身份未通过读写身份集合验证进行访问策略判定 , client identity member key org.hepeng.dac.chaincode.data.MemberAttr:Org1MSP:x509::CN=User1@org1.example.com, OU=client, L=San Francisco, ST=California, C=US::CN=ca.org1.example.com, O=org1.example.com, L=San Francisco, ST=California, C=US 

响应:

2022-04-10 11:06:29.595 EDT 0001 INFO [chaincodeCmd] chaincodeInvokeOrQuery -> Chaincode invoke successful. result: status:200 payload:"{"msg":"Access Denied:\350\256\277\351\227\256\345\234\260\347\202\271\346\243\200\346\237\245\346\234\252\351\200\232\350\277\207"}" 

image.png

image.png

写操作被拒绝,把 User1 增加到 data-3 写集合中:

切换到 Org1 Admin 账号调用

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

测试网络下 User1 成员的 key : org.hepeng.dac.chaincode.data.MemberAttr:Org1MSP:x509::CN=User1@org1.example.com, OU=client, L=San Francisco, ST=California, C=US::CN=ca.org1.example.com, O=org1.example.com, L=San Francisco, ST=California, C=US

增加写集合:


peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n data-access-control-chaincode --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":"org.hepeng.dac.chaincode.contract.DataContract:updateDataAttr","Args":[ "data-3" , "{"level":66,"readers":["org.hepeng.dac.chaincode.data.MemberAttr:Org1MSP:x509::CN=User1@org1.example.com, OU=client, L=San Francisco, ST=California, C=US::CN=ca.org1.example.com, O=org1.example.com, L=San Francisco, ST=California, C=US" , "reader-member-key-1","reader-member-key-2","reader-member-key-3"],"writers":["org.hepeng.dac.chaincode.data.MemberAttr:Org1MSP:x509::CN=User1@org1.example.com, OU=client, L=San Francisco, ST=California, C=US::CN=ca.org1.example.com, O=org1.example.com, L=San Francisco, ST=California, C=US" , "writers-member-key-1","writers-member-key-2","writers-member-key-3"]}"  ]}'

image.png

切换账号换成 Org1 User1 账号调用

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

调用 updateData 更新数据:


DataCmd Arg : 
 "{"key":"data-3","payload":"{\"security\":\"Spring Security\",\"project leader\":\"Eren Jaeger\",\"service mesh\":\"istio\",\"MQ\":\"rabbitMQ\",\"blockchain\":\"fabric\",\"web\":\"react\",\"lang\":\"golang\",\"DB\":\"TiDB\",\"web server\":\"nginx\"}"}" 

# 故意修改为不满足访问策略的 location
EnvArg Arg : 
 "{"location":"东京","time":1649596234054}" 

peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n data-access-control-chaincode --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":"org.hepeng.dac.chaincode.contract.DataContract:updateData","Args":[  "{"key":"data-3","payload":"{\"security\":\"Spring Security\",\"project leader\":\"Eren Jaeger\",\"service mesh\":\"istio\",\"MQ\":\"rabbitMQ\",\"blockchain\":\"fabric\",\"web\":\"react\",\"lang\":\"golang\",\"DB\":\"TiDB\",\"web server\":\"nginx\"}"}" ,  "{"location":"东京","time":1649596234054}" ]}'

响应:

2022-04-10 11:13:39.284 EDT 0001 INFO [chaincodeCmd] chaincodeInvokeOrQuery -> Chaincode invoke successful. result: status:200 payload:"{"msg":"ok","payload":{"payload":"{\"security\":\"Spring Security\",\"project leader\":\"Eren Jaeger\",\"service mesh\":\"istio\",\"MQ\":\"rabbitMQ\",\"blockchain\":\"fabric\",\"web\":\"react\",\"lang\":\"golang\",\"DB\":\"TiDB\",\"web server\":\"nginx\"}","key":"data-3"}}" 

image.png