Fabric支持開發模式,在開發者模式下,調試智能合約比較方便。但是這僅僅適用Fabric1.4,鏈碼安裝在peer節點上。
Fabric2.0雖然保留了開發者模式,但是鏈碼容器獨立運行,作為獨立的Docker容器,這種模式就不一定靈光了。
本文目的是記錄下探索Fabric鏈碼調試方法過程的嘗試及錯誤排查,最終的結果是沒有成功。
結論是,鏈碼盡管可能需要調試但是鏈碼開發者模式並不適用。
建議: 鏈碼編寫過程中小心點兒,搭建本地測試網絡,進行合約測試,沒有問題再部署到生產網絡。
一、測試環境
deepin 20.1
二、依賴條件
1. 克隆倉庫到本地: https://github.com/hyperledger/fabric-samples.git
三、調試環境搭建
1. 測試網絡搭建(第1個shell窗口)
1. 切換到如下目錄 cd chaincode-docker-devmode
執行如下命令,啟動docker容器
docker-compose -f docker-compose-simple.yaml up
以上命令實現了,啟動如下4個容器:
orderer --排序節點,交易排序
peer --對等節點,賬本存儲
cli --鏈碼交互容器
chaincode --鏈碼容器,運行鏈碼
執行完成,容器如下:
2. 編譯鏈碼並運行(第2個shell窗口)
(1)執行 docker exec --user root -it chaincode sh,進入容器
(2) ls 查看目錄,abstore是我們要使用合約的目錄
切換到目錄/opt/gopath/src/chaincode/abstore/go
編譯報錯 go build -o abstore
原因,國內網絡環境問題,需要設置go proxy代理
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct
然后再次執行go build -o abstore,編譯成功。
執行 go mod vendor,項目依賴遷移到工程目錄vendor下。
運行鏈碼
CORE_CHAINCODE_ID_NAME=mycc:0 CORE_PEER_TLS_ENABLED=false ./abstore -peer.address peer:7052
啟動鏈碼服務。
2. 鏈碼交互測試容器(第3個shell窗口)
(1)執行 docker exec -it cli bash,進入容器
peer chaincode install -p /opt/gopath/src/chaincodedev/chaincode/sacc -n mycc -v 0
報錯如下,原因還是go proxy需要設置下。
再次安裝 peer chaincode install -p /opt/gopath/src/chaincodedev/chaincode/sacc -n mycc -v 0
2021-04-01 01:34:27.264 UTC [chaincode.platform.util] WriteFileToPackage -> DEBU 231 Writing file to tarball: src/vendor/google.golang.org/grpc/vet.sh
2021-04-01 01:34:27.264 UTC [chaincode.platform.util] WriteFileToPackage -> DEBU 232 Writing file to tarball: src/vendor/modules.txt
2021-04-01 01:34:27.652 UTC [msp.identity] Sign -> DEBU 233 Sign: plaintext: 0AC4070A5C08031A0C08A3C694830610...7FBFFC0E0000FFFF578D45CD00688B01
2021-04-01 01:34:27.652 UTC [msp.identity] Sign -> DEBU 234 Sign: digest: C917D88A1FB2335A5B89DC8ACE6FDA0A2DF60382684432E62DE0C0C3B94635DC
2021-04-01 01:35:35.005 UTC [chaincodeCmd] submitInstallProposal -> INFO 235 Installed remotely: response:<status:200 payload:"OK" >
實例化 peer chaincode instantiate -n mycc -v 0 -c '{"Args":["a","10"]}' -C myc
報錯
Error: error getting channel (myc) orderer endpoint: error bad proposal response 500: Requested function GetChannelConfig not found.
探索到此為止,進行不下去了。。。。
猜測原因:可能是Fabric2.0的鏈碼實例化步驟去掉了,或修改了規則。 總之教程不適用了。
測試版本 Fabric 2.3.0
參考文章: https://blog.csdn.net/weixin_43839871/article/details/107002767
四、常見問題
1. cli容器啟動失敗
1. 切換到如下目錄 cd chaincode-docker-devmode
cli容器日志 docker logs cli
出現以上問題,說明docker目錄有殘留。執行docker-compose -f docker-compose-simple.yaml down -v ,然后重新docker-compose -f docker-compose-simple.yaml up就可以了。