Fabric2.0测试网络部署链码
1. 启动测试网络
1.1 进入test-network目录
cd test-network
1.2 启动测试网络
./network.sh up
1.3 创建通道并加入peer
./network.sh createChannel
1.4 部署链码 deployCC 二进制文件中有默认的链码
./network.sh deployCC
1.5 测试链码
首先确保自己位于test-network目录下,执行如下的方式来临时配置。
export PATH=${PWD}/../bin:$PATH
此外还需要配置一下config所在的目录。
export FABRIC_CFG_PATH=$PWD/../config/
这样准备工作就做好了。
设置如下的环境变量,可以使得你作为Org1来操作peer命令。
# Environment variables for Org1
export CORE_PEER_TLS_ENABLED=true export CORE_PEER_LOCALMSPID="Org1MSP" export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp export CORE_PEER_ADDRESS=localhost:7051
CORE_PEER_TLS_ROOTCERT_FILE
和CORE_PEER_MSPCONFIGPATH
两行指明了Org1的加密所用的信息。
可以使用如下的命令来查看channel的账本中的汽车列表,这个列表是刚才使用deployCC参数时添加的。
peer chaincode query -C mychannel -n fabcar -c '{"Args":["queryAllCars"]}'
当然chaincode也可以在网络中的某个成员想要转移或者更新资产的时候调用,利用如下的命令可以调用fabcar chaincode来修改账本中的某一辆车的拥有者。
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 fabcar --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":"changeCarOwner","Args":["CAR9","Dave"]}'
如果出现"Chaincode invoke successful. result: status:200 "的字样,说明更新成功。
为了查看调用是否成功,可以使用另一个chaincode的查询,这里我们可以利用Org2来执行peer命令进行查询,首先需要设置如下环境变量。
# Environment variables for Org2 export CORE_PEER_TLS_ENABLED=true export CORE_PEER_LOCALMSPID="Org2MSP" export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp export CORE_PEER_ADDRESS=localhost:9051
然后可以使用如下命令来查看CAR9在账本中的情况。
peer chaincode query -C mychannel -n fabcar -c '{"Args":["queryCar","CAR9"]}'
可以看到车辆已经被转移给了Dave,即刚才的更新成功了,说明:测试网络搭建完成
2. 部署新的链码
2.1 . 打包链码
本文章使用test-network提供的一个链码
进入test-network的上一级目录有chaincode的文件夹
cd ../chaincode
链码打包:创建一个打包文件(tar格式),其中包含Fabric链码以及一些元数据。
cd test-network
peer lifecycle chaincode package sacc.tar.gz --path ../chaincode/sacc/ --lang golang --label sacc_1
2.2 安装链码包
安装:将打包的Fabric链码文件安装在指定的peer节点上。和之前的版本一样, 只有需要接受链码调用的节点才需要安装链码。在这个节点,Fabric链码还不可用, 因为还没有提交到通道中。
peer lifecycle chaincode install ./sacc.tar.gz
注:测试网络有两个peer,每个peer都要执行一次安装链码包,切换peer用户可参考1.5中的测试链码
2.3
查看链码安装情况
peer lifecycle chaincode queryinstalled
2.4 审批链码
peer lifecycle chaincode approveformyorg -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls true --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem --channelID mychannel --name sacc --version 1 --init-required --package-id sacc_1:f18557d5390324c3f949bf0face6abfd40ac94d27ffb95bb9800a6631a41c858 --sequence 1
其中:sacc_1的值换成2.3 执行获取的值
2.5查看链码的审批状态
peer lifecycle chaincode checkcommitreadiness --channelID mychannel --name sacc --version 1 --sequence 1 --output json --init-required
注:测试网络有两个peer,每个有peer都要审核链码,切换peer用户可参考1.5中的测试链码。查看链码的审批状态 都要显示true
2.6提交链码
peer lifecycle chaincode commit -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls true --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem --channelID mychannel --name sacc --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 --version 1 --sequence 1 --init-required
2.7查看链码的提交状态
peer lifecycle chaincode querycommitted --channelID mychannel --name sacc
2.8初始化链码
peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls true --cafile /root/fabric-samples/test-network/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n sacc --peerAddresses localhost:7051 --tlsRootCertFiles /root/fabric-samples/test-network/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles /root/fabric-samples/test-network/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt --isInit -c '{"function":"set","Args":["213"]}'
2.9调用链码的方法
set 方法
peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls true --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n sacc --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":"set","Args":["username1","test"]}'
get 方法
peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls true --cafile /root/fabric-samples/test-network/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n sacc --peerAddresses localhost:7051 --tlsRootCertFiles /root/fabric-samples/test-network/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles /root/fabric-samples/test-network/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"function":"get","Args":["username1"]}'