鏈碼可以看成是在Hyperledger Fabric上的智慧合約,本文可以在簡單瞭解鏈碼的概念之後在fabric-samples中進行鏈碼測試。
首先啟動網路,進入CLI容器,檢查節點是否已經加入通道:
peer channel list ##不出意外應該加入了mychannel的通道中
設定環境變數:
export CHANNEL_NAME=mychannel
使用install命令安裝鏈碼:
peer chaincode install -n mycc -v 1.0 -p github.com/chaincode/chaincode_example02/go/
使用instantiate命令範例化鏈碼(引數、背書策略):
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 $CHANNEL_NAME -n mycc -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -P "OR ('Org1MSP.peer','Org2MSP.peer')"
使用query命令查詢:(查詢引數a的值)
peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}'
使用invoke命令呼叫鏈碼:(相比之前的範例化,不需要-v版本號)
peer chaincode invoke -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 $CHANNEL_NAME -n mycc -c '{"Args":["invoke","a","b","10"]}'
執行成功後就可以用查詢命令檢視a、b的賬戶餘額,應該是90、110。
鏈碼部署除了1中所述的方式之外,還可以採用先打包、再簽名、最後進行安裝。
對於一個已經編寫完成的鏈碼,可以使用package命令進行打包:
peer chaincode package -n exacc -v 1.0 -p github.com/chaincode/chaincode_example02/go/ -s -S -i "AND('Org1MSP.admin')" ccpack.out
使用signpackage命令進行簽名:
peer chaincode signpackage ccpack.out signdccpack.out
peer chaincode install signdccpack.out
然後可以按照1中的方法進行範例化與測試,這裡就不贅述了。
隨著需求場景的變化,鏈碼也需要實時做出修改,首先隨修改之後的鏈碼進行安裝(修改後應該為2.0版本):
peer chaincode install -n mycc -v 2.0 -p github.com/chaincode/chaincode_example02/go/
使用upgrade命令升級鏈碼:
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 $CHANNEL_NAME -n mycc -v 2.0 -c '{"Args":["init","a","100","b","200"]}' -P "OR ('Org1MSP.peer','Org2MSP.peer')"
注意:升級時inti函數會重置資料資訊
上述的測試過程加入大量引數,十分繁瑣,下面介紹一種快速測試的方法,dev模式下,鏈碼由使用者構建並啟動。這部分我們需要三個終端視窗。
首先檢查Docker映象資訊:
sudo docker images
關閉之前的網路環境:
sudo docker-compose -f docker-compose-cli.yaml down
進入chaincode-docker-devmode目錄:
cd ~/hyfa/fabric-samples/chaincode-docker-devmode
該目錄下包含網路、通道、初始區塊等相關的內容,使用docker-compose-simple.yaml檔案(網路啟動依賴的組態檔)來啟動網路:
sudo docker-compose -f docker-compose-simple.yaml up -d
開啟一個新的終端2視窗,進入chaincode容器:
sudo docker exec -it chaincode bash
進入目錄編譯鏈碼:
cd chaincode_example02/go/
go build
啟動並執行鏈碼:
CORE_PEER_ADDRESS=peer:7052 CORE_CHAINCODE_ID_NAME=mycc:0 ./go
開啟一個新的終端3視窗,首先進入cli容器:
sudo docker exec -it cli bash
安裝鏈碼:
peer chaincode install -p chaincodedev/chaincode/chaincode_example02/go -n mycc -v 0
範例化鏈碼:
peer chaincode instantiate -n mycc -v 0 -c '{"Args":["init","a","100","b","200"]}' -C myc
查詢鏈碼:
peer chaincode query -n mycc -c '{"Args":["query","a"]}' -C myc
執行事務:
peer chaincode invoke -n mycc -c '{"Args":["invoke","a","b","200"]}' -C myc
其實不難看出鏈碼的測試管理主要是由鏈碼生命週期中的5個命令構成的:
熟悉這5個命令的用途以及命令執行時的引數結構就能很好的掌握鏈碼的開發測試,對鏈碼執行架構的理解也很有好處。鏈碼的簡單管理和測試就到這裡啦,過兩天再更新鏈碼的開發與實踐。