安装链码
示例网络中是将/home/go/src/github.com/hyperledger/fabric-samples/first-network/chaincode
目录挂载到docker容器的/opt/gopath/src/github.com/chaincode/
目录下。而且/opt/gopath/src/
需要去掉不写。
peer chaincode install -n 链码名称 -v 链码版本 -l 链码语言 -p 链码路径(需要对应文件夹)
peer chaincode install -n usercc -v 1.0.0 -l golang -p github.com/chaincode/user
通过docker exec -it cli /bin/bash
命令进入到命令行中,默认的参数是peer0.org1.example.com
节点参数,可以通过更改参数来实现切换节点的目的。
# 切换到peer0.org1.example.com节点安装链码
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected]/msp
CORE_PEER_ADDRESS=peer0.org1.example.com:7051
CORE_PEER_LOCALMSPID="Org1MSP"
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
peer chaincode install -n usercc -v 1.0.0 -l golang -p github.com/chaincode/user
# 切换到peer1.org1.example.com节点安装链码
CORE_PEER_LOCALMSPID="Org1MSP"
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected]/msp
CORE_PEER_ADDRESS=peer1.org1.example.com:8051
peer chaincode install -n usercc -v 1.0.0 -l golang -p github.com/chaincode/user
# 切换到peer0.org2.example.com节点安装链码
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/[email protected]/msp
CORE_PEER_ADDRESS=peer0.org2.example.com:9051
CORE_PEER_LOCALMSPID="Org2MSP"
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
peer chaincode install -n usercc -v 1.0.0 -l golang -p github.com/chaincode/user
# 切换到peer0.org2.example.com节点安装链码
CORE_PEER_LOCALMSPID="Org2MSP"
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/ca.crt
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/[email protected]/msp
CORE_PEER_ADDRESS=peer1.org2.example.com:10051
peer chaincode install -n usercc -v 1.0.0 -l golang -p github.com/chaincode/user
初始化链码
peer chaincode instantiate -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 usercc -l golang -v 1.0.0 -c '{"Args":["initLedger"]}' -P 'AND ('\''Org1MSP.peer'\'','\''Org2MSP.peer'\'')'
升级链码
升级链码需要先在各个节点安装完成之后(需要修改链码的版本号),运行如下命令升级链码
peer chaincode upgrade -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 usercc -l golang -v 1.0.0 -c '{"Args":["initLedger"]}' -P 'AND ('\''Org1MSP.peer'\'','\''Org2MSP.peer'\'')'
调用链码的查询接口
peer chaincode query -C 通道名称 -n 链码名称 -c 接口的参数
# 我这里QueryMemberList为接口名称,这个需要根据链码中的逻辑去写
peer chaincode query -C mychannel -n usercc -c '{"Args":["QueryMemberList","{\"username\":\"1\", \"flag\": 1, \"relation\": -1}"]}'
调用链码的操作接口
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 usercc --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 --peerAddresses peer0.org2.example.com:9051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"Args":["QueryInfoByPhone","{\"phone\":\"123\", \"source\": 1}", "memberId1", "familyId1"]}'