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就可以了。