踩坑总结:
很多猿友们都是从网上copy的命令或者是chaincode文件 ,这样就无形中入坑了 如果没注意到,只会黏贴复制 ,你是怎么都弄不出来的。
安装,实例化话合约时 一点要看清楚自己服务器中的chaincode文件路径,chaincode文件名称是否与命令参数中一致,不一致的话你往死里搞都是报错。
触发合约的时候也是同理 ,看自己的背书节点的证书是否正确,使用的方法名称是否和自己chaincode文件中的名称一致 。
合约安装
peer chaincode install -n basicinfo -v 1.0 -p github.com/chaincode/basicInfo/
peer chaincode install -n record -v 1.0 -p github.com/chaincode/lxj1/
注:
-n chaincode文件名称,是你在创建chaincode时自己定义的名称
-p 创建好chaincode后,会自动帮你映射到你的docker容器内 (这个路径是你的docker-compose-cli.yaml配置文件中 ,字段volumes: 定义的路径)
peer chaincode list --installed 查看合约是否安装成功
合约实例化
peer chaincode instantiate -o orderer.example.com:7050 --tls --cafile /opct/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 basicinfo -v 1.0 -c '{"Args":["init"]}' -P "OR ('Org1MSP.peer')"
peer chaincode instantiate -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 record -v 1.0 -c '{"Args":["init"]}' -P "OR ('Org1MSP.peer')"
peer chaincode list --instantiated -C mychannel 查看是否实例化成功
--cafile 这里的证书是orderer的证书。开启tls检验。 -P 背书策略。 -C 你的通道名称。 -n 就合约的名称。
合约触发
peer chaincode invoke -o orderer.example.com:7050 --tls true --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 basicInfo --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":["save","110115","{\"name\":\"zhangsan\",\"identity\":\"110114\",\"mobile\":\"18910012222\"}"]}'
peer chaincode invoke -o orderer.example.com:7050 --tls true --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 record --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":["save","110115","{\"ndfdae\":\"zgsan\",\"identity\":\"110114\",\"mobile\":\"18910012222\"}"]}'
传入 orderer节点的证书 -- peerAddresses 指定需要背书的节点
这里的 “save” 是你chaincode编写时的方法名称 要更具个人编写中的实际情况来。
合约查询
peer chaincode query -C mychannel -n basicInfo -c '{"Args":["query","110115"]}'
peer chaincode query -C mychannel -n record -c '{"Args":["query","110115"]}'
合约升级
peer chaincode upgrade -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 basicinfo -v 2.0 -c '{"Args":["init"]}' -P "OR ('Org1MSP.peer')"