小韦云链二次开发手册

Fabric2.0使用开发者模式调试智能合约

小韦云科技-区块链+小程序+公众号+商城+分销+直播+企业官网+外贸电商-为您提供优质的开发服务-电话/微信联系:18123611282

合约开发,调试是必须的,在开发过程一般使用Fabric提供的开发模式进行调试。和之前在Fabric1.4版本下的调试的教程一样,只是有些命令不同(下面有标注),首先需要先打开三个gitbash终端

准备工作

在启动之前先修改$GOPATH/src/github.com/hyperledger/fabric-samples/chaincode-docker-devmode/docker-compose-simple.yaml文件,把本机的GOPATH目录配置到docker中

在cli和chaincode的volumes配置中分别增加- /e/go:/opt/gopath这一行,其中/e/go是我本机的GOPATH目录,/opt/gopath是固定的,是docker里的GOPATH目录,修改如下图

然后把合约代码放到$GOPATH/src目录下,如

为了解决docker中下载国外依赖出错的问题,解决把合约需要的依赖先放到vendor目录,执行

go mod init
go env -w GOPROXY=https://goproxy.cn,direct
go build
go mod vendor

在1号终端启动开发网络

先删除之前旧的docker

docker stop $(docker ps -aq)
docker rm $(docker ps -aq)

最后启动开发网络

cd $GOPATH/src/github.com/hyperledger/fabric-samples/chaincode-docker-devmode
docker-compose -f docker-compose-simple.yaml up

在2号终端部署链码

要等1号网络启动成功后,才能执行下面的步骤

先进入 chaincode容器

winpty docker exec -it chaincode sh

在国内直接编译可能会报这个错误:Get https://proxy.golang.org/xxx .mod: dial tcp 172.217.160.113:443: connect: connection refused
这是golang.org这个地址辆被墙,应当先修改为国内可以支持的代理站点:

go env -w GOPROXY=https://goproxy.cn,direct

进入链码目录先编译

cd ../bsnBaseCC
go build

然后部署链码(注:这个命令与Fabric1.4的不同)

CORE_CHAINCODE_ID_NAME=mycc:0 CORE_PEER_TLS_ENABLED=false ./bsnBaseCC -peer.address peer:7052

部署成功后会处于监控模式,后面对链码的操作的日志会在这个终端里显示出来

在3号终端与链码交互

先进入cli容器

winpty docker exec -it cli bash
go env -w GOPROXY=https://goproxy.cn,direct

有时cil会启动失败,需要先清空docker再从第一步重新开始,如果成功即不用管它

docker stop $(docker ps -aq)
docker rm $(docker ps -aq)

先安装和实例化链码

peer chaincode install -p ../bsnBaseCC -n mycc -v 0
peer chaincode instantiate -n mycc -c '{"Args":["UserReg", "user_123"]}'  -v 0 -C myc

在我们的链码中,Init方法是不需要输入参数的,但如果不加-c参数的话实例化会出错,因此随便加一些参数就行

接下来就可以正式调试链码

用户注册测试

peer chaincode invoke -n mycc -c '{"Args":["UserReg", "user_123"]}' -C myc

验证下是否数据写入成功

peer chaincode query -n mycc -c '{"Args":["GetValue","user_123"]}' -C myc

活动注册测试

peer chaincode invoke -n mycc -c '{"Args":["EventReg", "event_7", "user_123", "1000", "0", "100", "{\"口令1\":[\"1590048003\",\"1590996481\"],\"口令2\":[\"1590048003\",\"1590996481\"]}", "1590048003", "1590996481", "0", "10", "20"]}' -C myc

验证下是否数据写入成功

peer chaincode query -n mycc -c '{"Args":["GetValue","event_7"]}' -C myc

用户报名参与活动

注册一个新用户,然后报名活动,然后看看用户和活动的数据变化

peer chaincode invoke -n mycc -c '{"Args":["UserReg", "user_456"]}' -C myc
peer chaincode invoke -n mycc -c '{"Args":["UserJoinEvent", "user_456", "event_7", "0"]}' -C myc
peer chaincode query -n mycc -c '{"Args":["GetValue","user_123"]}' -C myc
peer chaincode query -n mycc -c '{"Args":["GetValue","event_7"]}' -C myc

用户打卡操作

注册一个新活动,注意口令的时间,然后验证打卡时的各种条件限制是否起作用,最后看看用户和活动的数据变化

peer chaincode invoke -n mycc -c '{"Args":["EventReg", "event_8", "user_123", "1000", "0", "100", "{\"口令1\":[\"1590048003\",\"1591996481\"],\"口令2\":[\"1590048003\",\"1591996481\"]}", "1590048003", "1591996481", "0", "10", "20"]}' -C myc
peer chaincode invoke -n mycc -c '{"Args":["UserJoinEvent", "user_456", "event_8", "0"]}' -C myc
peer chaincode invoke -n mycc -c '{"Args":["UserClockIn", "user_456", "event_8", "口令2","1590048004"]}' -C myc
peer chaincode query -n mycc -c '{"Args":["GetValue","user_456"]}' -C myc
peer chaincode query -n mycc -c '{"Args":["GetValue","event_8"]}' -C myc

验证定时任务

活动开始前

peer chaincode invoke -n mycc -c '{"Args":["CronEndEvent", "1590048003"]}' -C myc

活动中

peer chaincode invoke -n mycc -c '{"Args":["CronEndEvent", "1590998481"]}' -C myc

活动结束

peer chaincode invoke -n mycc -c '{"Args":["CronEndEvent", "1591996681"]}' -C myc

本文由小韦云原创,转载请注明出处:https://www.bctos.cn/doc/11/1891,否则追究其法律责任

关键词:Fabric 智能合约 调试

广告位招商