Hyperledger Fabric鏈碼測試紀錄檔

2020-10-28 20:00:54

Hyperledger Fabric鏈碼測試紀錄檔

鏈碼可以看成是在Hyperledger Fabric上的智慧合約,本文可以在簡單瞭解鏈碼的概念之後在fabric-samples中進行鏈碼測試。

1. 鏈碼的安裝、範例化、查詢與呼叫

1.1 安裝鏈碼(呼叫鏈碼處理交易前,需要把鏈碼部署到Peer節點上,即安裝+範例化)

首先啟動網路,進入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/

1.2 範例化鏈碼

使用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')"

1.3 查詢鏈碼

使用query命令查詢:(查詢引數a的值)

peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}'

1.4 呼叫鏈碼,根據鏈碼函數給出相應引數(這裡的引數是讓a給b轉賬10)

使用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。

2.鏈碼的打包與升級

鏈碼部署除了1中所述的方式之外,還可以採用先打包、再簽名、最後進行安裝。

2.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

2.2 鏈碼的簽名

使用signpackage命令進行簽名:

peer chaincode signpackage ccpack.out signdccpack.out

2.3 鏈碼的安裝、範例化與測試

peer chaincode install signdccpack.out

然後可以按照1中的方法進行範例化與測試,這裡就不贅述了。

2.4 鏈碼的升級

隨著需求場景的變化,鏈碼也需要實時做出修改,首先隨修改之後的鏈碼進行安裝(修改後應該為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函數會重置資料資訊

3.鏈碼的dev開發測試模式

上述的測試過程加入大量引數,十分繁瑣,下面介紹一種快速測試的方法,dev模式下,鏈碼由使用者構建並啟動。這部分我們需要三個終端視窗。

3.1 啟動網路

首先檢查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

3.2 構建並啟動鏈碼

開啟一個新的終端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.3 呼叫鏈碼

開啟一個新的終端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個命令構成的:

  • install
  • instantiate
  • upgrade
  • package
  • signpackage

熟悉這5個命令的用途以及命令執行時的引數結構就能很好的掌握鏈碼的開發測試,對鏈碼執行架構的理解也很有好處。鏈碼的簡單管理和測試就到這裡啦,過兩天再更新鏈碼的開發與實踐。