一、参考:
https://github.com/hyperledger/fabric-samples/tree/release-1.3/chaincode-docker-devmode
https://hyperledgercn.github.io/hyperledgerDocs/chaincode_developers_zh/#chaincode_7
http://www.zhayujie.com/fabric/chaincode-test.html
但是得注意docker-compose-simple.yaml中peer节点的命令,并将原来的注释掉,不然可能会报错(可能是我fabric的bin命令用的是1.2版本,而此处fabric-samples用的是1.3版本)。
二、编写自动化脚本简化调试流程(注意叫脚本的权限)。
1、在终端1执行启动脚本命令./startFabric.sh
(目录:fabric-samples/chaincode-docker-devmode)。脚本代码如下
#!/bin/bash
set -e
docker-compose -f docker-compose-simple.yaml up
输出如下表示网络启动成功
2、在终端2执行链码运行环境脚本./chaincode.sh
(目录:fabric-samples/chaincode-docker-devmode)。脚本代码如下
#!/bin/bash
set -e
docker exec -it chaincode ./chaincode.sh
执行完此命令将进入容器chaincode的工作目录(volume映射:./../chaincode:/opt/gopath/src/chaincode
),并执行该目录下的./chaincode.sh(目录:fabric-samples/chaincode)。脚本代码如下
#!/bin/bash
set -e
cd mychaincode
go build -o ehr
CORE_PEER_ADDRESS=peer:7052 CORE_CHAINCODE_ID_NAME=ehr:0 ./ehr
输出如下表示链码运行环境搭建成功
3、在终端3执行链码安装并实例化的脚本./client.sh
(目录:fabric-samples/chaincode-docker-devmode)。脚本代码如下
#!/bin/bash
set -e
docker exec cli peer chaincode install -p chaincodedev/chaincode/mychaincode -n ehr -v 0
printf "chaincode installed successfully!\n\n"
docker exec cli peer chaincode instantiate -n ehr -v 0 -c '{"Args":["init","a","100","b","200"]}' -C myc
printf "chaincode instantiated successfully!\n\n"
printf "you can run 'peer chaincode [function]...' to invoke chaincode function!\n\n"
docker exec -it cli bash
执行完此步之后链码ehr((目录:fabric-samples/chaincode/mychaincode/ehr.go)已经安装并实例化成功。
实例化过程中会执行链码中的Init函数,在终端2会打印出语句fmt.Printf("")的结果
链码中的Init函数如下
4、终端3调用
调用invoke函数
peer chaincode invoke -n ehr -c '{"Args":["invoke","a","b","10"]}' -C myc
结果
终端2打印
调用query函数
peer chaincode query -n ehr-c '{"Args":["query","a"]}' -C myc
结果
终端2打印
三、修改chaincode再次调试步骤(不用关闭3个终端窗口)
1、先在终端3中执行exit
退出容器
然后再执行脚本./stopFabric.sh
关闭网络,脚本代码如下
#!/bin/bash
set -e
docker rm -f $(docker ps -aq)
docker network prune -f
docker volume prune -f
2、编写链码,然后按照步骤二执行。