Hyperledger fabric: 使用dev模式调试链码(chaincode)

fabric的链码开发是比较痛苦的,主要是调试起来特别繁琐。在不使用dev模式的情况下,写好chaincode之后不能在本地测试,必须将代码部署到docker, 然后再install,instantiate,这样peer节点会在新的容器中启动你的chaincode。更可怕的是,你只能通过docker logs查看chaincode日志,没有任何办法调试,只能靠打日志的方式debug。更更可怕的是,每当你修改完golang代码后,你都要重新再跑一遍上面的这些流程

使用dev模式启动peer节点虽然还是需要安装、初始化链码,但区别在于你只需要执行一次这个步骤就可以了,并且chaincode可以运行在本地(比如直接在IDE启动),这样就允许我们使用IDE的调试功能。此外,当修改了代码后,直接在IDE中编译运行就能看到修改后的chaincode了。

要使用dev模式,首先修改运行peer的容器的启动命令,添加--peer-chaincodedev参数,例如在docker-compose.yaml中:

command: peer node start --peer-chaincodedev=true

然后要注意将7052端口映射到宿主机端口:

ports:
      - 7052:7052

这个端口就是我们在本地启动chaincode连接peer节点时使用的端口。注意,这里使用的是fabric 1.1版本,如果是1.0版本,这个端口是7051,可以通过修改core.yaml文件修改默认端口。
接下来,登陆cli容器,向往常一样install, instantiate链码:

peer chaincode install -n 链码名 -v 1 -p xxx.com/xxxapp
peer chaincode instantiate -o orderer.example.com:7050 -C mychannel -n 链码名   -v 版本号 -c '{"Args":[""]}' -P "OR ('Org1MSP.member','Org2MSP.member')"

上面命令中的-P(背书策略)根据实际情况进行调整。

下一步我们准备在IDE中直接运行chaincode。在此之前要先配置两个环境变量:

CORE_PEER_ADDRESS=127.0.0.1:7052
CORE_CHAINCODE_ID_NAME=链码名:版本号

然后就可以启动链码了,调试效率大大提升。

你可能感兴趣的:(区块链)