fabric链码初始化
先说一下背书策略
模拟交易被执行的过程
举例:
两个组织:
aaa:
peer0
peer1
bbb:
peer0
peer1
交易规则:
1.aaa组织的所有节点参与,bbb组织的所有节点也参与
2.只有aaa组织的节点参与交易
3.只有bbb组织的节点参与交易
在我们初始化链码的时候
就要把这些交易规则放进去
我们举几个背书规则的例子
1. Org1MSP,Org2MSP,Org3MSP中的用户共同验证交易
"AND ('Org1MSP.member', 'Org2MSP.member', 'Org3MSP.member')"
2. Org1MSP,Org2MSP,Org3MSP中的任何一个成员验证
"OR ('Org1MSP.member', 'Org2MSP.member', 'Org3MSP.member')"
3. Org1MSP某个成员进行验证, Org2MSP和Org3MSP成员共同
"OR ('Org1MSP.member', AND('Org2MSP.member', 'Org3MSP.member'))"
链码初始化
peer chaincode instantiate
常用参数:
-o --orderer orderer节点地址,orderer.abc.com:7050
-C --channelID 通道名字
-v --version 链码版本
-l --lang 链码语言
-n --name 链码名字
-c --ctor 链码调用,json格式调用
-P --policy 背书策略
--tls 加密
--cafile orderer的tls证书,/msp/tlscacerts/xxx.pem
执行一下
peer chaincode instantiate -o orderer.abc.com:7050 --tls --cafile $tlsfile -C abcchannel -n abccc -v 1.0 -P "AND ('Org1MSP.member', 'Org2MSP.member')" -c '{"Args":["init","a","100","b","200"]}'
peer chaincode instantiate
-o orderer.abc.com:7050
--tls
--cafile $tlsfile
-C abcchannel
-n abccc
-v 1.0
-P "AND ('Org1MSP.member', 'Org2MSP.member')"
-c '{"Args":["init","a","100","b","200"]}'
peer chaincode instantiate -o orderer.abc.com:7050 --tls --cafile $tlsfile -C abcchannel -n abccc -v 1.0 -P "AND ('OrgGO.member', 'OrgCpp.member')" -c '{"Args":["init","a","100","b","200"]}'
如果出错了
就重新来一遍
0.docker-compose -f docker-compose-cli.yaml down
1.docker volume prune
2.docker-compose -f docker-compose-cli.yaml up -d
3.docker exec -it cli bash
4.tlsfile=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/abc.com/msp/tlscacerts/tlsca.abc.com-cert.pem
5.peer channel create -o orderer.abc.com:7050 --tls true --cafile $tlsfile -c abcchannel -f ./channel-artifacts/channel.tx
6.peer channel join -b abcchannel.block
7.peer chaincode install -n abccc -v 1.0 -p github.com/chaincode
8.peer chaincode instantiate -o orderer.abc.com:7050 --tls --cafile $tlsfile -C abcchannel -n abccc -v 1.0 -P "AND ('OrgGO.member', 'OrgCpp.member')" -c '{"Args":["init","a","100","b","200"]}'
我们看一下这一系列操作的流程和结果
abc@abc:~/workspace/testfabric$ docker-compose -f docker-compose-cli.yaml down
Stopping cli ... done
Stopping peer1.orgcpp.abc.com ... done
Stopping peer1.orggo.abc.com ... done
Stopping peer0.orggo.abc.com ... done
Stopping orderer.abc.com ... done
Stopping peer0.orgcpp.abc.com ... done
Removing cli ... done
Removing peer1.orgcpp.abc.com ... done
Removing peer1.orggo.abc.com ... done
Removing peer0.orggo.abc.com ... done
Removing orderer.abc.com ... done
Removing peer0.orgcpp.abc.com ... done
Removing network testfabric_byfn
abc@abc:~/workspace/testfabric$ docker volume prune
WARNING! This will remove all local volumes not used by at least one container.
Are you sure you want to continue? [y/N] y
Deleted Volumes:
fabric_peer1.org1.abc.com
fabricdemo_peer0.org1.example.com
fabricdemo_peer1.org2.example.com
net_peer0.org2.example.com
043b2d54fdbc720d22399181d9680d5178e13caf92c59984a140cf0665961560
fabricdemo_peer0.org2.example.com
fabricdemo_peer1.org1.example.com
net_orderer.example.com
net_peer1.org2.example.com
testfabric_peer0.orgcpp.abc.com
testfabric_peer0.orggo.abc.com
testfabric_peer1.orgcpp.abc.com
testfabric_peer1.orggo.abc.com
0eeaa740cf0bc156854169a5b0c83594d72cfe50a1f029fa70ff712db888b50d
ee95545f8f094b68cb6a9ba3f2533adbb3884dccc9261e08c05d586271b42503
fabric_orderer.abc.com
fabric_peer0.org1.abc.com
fabric_peer0.org2.abc.com
fabric_peer1.org2.abc.com
net_peer0.org1.example.com
net_peer1.org1.example.com
683ffce923e85bfa1b5d2d6244f9fd123566540853f2f9e75cec3797ec23d93c
afec6e124ea7e35d5560808f5a25c8003d6b6447e0c90d44b9f770bd0fbaf19b
fabricdemo_orderer.example.com
testfabric_orderer.abc.com
3ff8fc500f2442f5753a510fe58a2c2749edd5061461918fdb4c8bad546cefbc
Total reclaimed space: 1.025MB
abc@abc:~/workspace/testfabric$ docker-compose -f docker-compose-cli.yaml up -d
Creating network "testfabric_byfn" with the default driver
Creating volume "testfabric_peer1.orggo.abc.com" with default driver
Creating volume "testfabric_peer0.orgcpp.abc.com" with default driver
Creating volume "testfabric_orderer.abc.com" with default driver
Creating volume "testfabric_peer0.orggo.abc.com" with default driver
Creating volume "testfabric_peer1.orgcpp.abc.com" with default driver
Creating peer1.orggo.abc.com ... done
Creating peer0.orgcpp.abc.com ... done
Creating orderer.abc.com ... done
Creating peer0.orggo.abc.com ... done
Creating peer1.orgcpp.abc.com ... done
Creating cli ... done
abc@abc:~/workspace/testfabric$ docker exec -it cli bash
root@44e649277a71:/opt/gopath/src/github.com/hyperledger/fabric/peer# tlsfile=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/abc.com/msp/tlscacerts/tlsca.abc.com-cert.pem
root@44e649277a71:/opt/gopath/src/github.com/hyperledger/fabric/peer# peer channel create -o orderer.abc.com:7050 --tls true --cafile $tlsfile -c abcchannel -f ./channel-artifacts/channel.tx
2019-04-15 03:38:24.498 UTC [channelCmd] InitCmdFactory -> INFO 001 Endorser and orderer connections initialized
2019-04-15 03:38:24.527 UTC [cli/common] readBlock -> INFO 002 Got status: &{NOT_FOUND}
2019-04-15 03:38:24.554 UTC [channelCmd] InitCmdFactory -> INFO 003 Endorser and orderer connections initialized
2019-04-15 03:38:24.758 UTC [cli/common] readBlock -> INFO 004 Received block: 0
root@44e649277a71:/opt/gopath/src/github.com/hyperledger/fabric/peer# ls
channel-artifacts crypto abcchannel.block
root@44e649277a71:/opt/gopath/src/github.com/hyperledger/fabric/peer# peer channel join -b abcchannel.block
2019-04-15 03:39:15.048 UTC [channelCmd] InitCmdFactory -> INFO 001 Endorser and orderer connections initialized
2019-04-15 03:39:15.170 UTC [channelCmd] executeJoin -> INFO 002 Successfully submitted proposal to join channel
root@44e649277a71:/opt/gopath/src/github.com/hyperledger/fabric/peer# peer chaincode install -n abccc -v 1.0 -p github.com/chaincode
2019-04-15 03:39:51.090 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 001 Using default escc
2019-04-15 03:39:51.090 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 002 Using default vscc
2019-04-15 03:39:51.396 UTC [chaincodeCmd] install -> INFO 003 Installed remotely response:<status:200 payload:"OK" >
root@44e649277a71:/opt/gopath/src/github.com/hyperledger/fabric/peer# peer chaincode instantiate -o orderer.abc.com:7050 --tls --cafile $tlsfile -C abcchannel -n abccc -v 1.0 -P "AND ('OrgGO.member', 'OrgCpp.member')" -c '{"Args":["init","a","100","b","200"]}'
2019-04-15 03:40:38.961 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 001 Using default escc
2019-04-15 03:40:38.961 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 002 Using default vscc
root@44e649277a71:/opt/gopath/src/github.com/hyperledger/fabric/peer#