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個命令的用途以及命令執行時的引數結構就能很好的掌握鏈碼的開發測驗,對鏈碼運行架構的理解也很有好處,鏈碼的簡單管理和測驗就到這里啦,過兩天再更新鏈碼的開發與實踐,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/195013.html
標籤:其他
