Fabric2.0 使用开发模式(dev 模式)测试

dev模式

  dev模式不是Fabric 2.0引入的,1.x版本就已存在的。对于Fabric 2.0来说,可以构建外部的链码容器,对于运维和开发调试来说,变得越来越方便。在2.0版本之前,链码是通过节点执行和维护的。开发模式在链码“编码/编译/运行/调试”的开发生命周期中很有用。本节不考虑外部链码的情形,后续会有博客去介绍外部链码。

基础环境

  确保已下载Fabric2.0版本镜像及二进制工具;已克隆fabric-samples。

实践

  fabric-samples 目录下执行:

cd chaincode-docker-devmode

  测试过程需要开启3个shell窗口,假设为shell1 ,shell2,shell3

shell1启动网络

  fabric-samples/chaincode-docker-devmode目录下执行:

docker-compose -f docker-compose-simple.yaml up

  上边的命令启动了一个网络,网络的排序模式为 SingleSampleMSPSolo ,并且以“开发模式” 启动了 peer 节点。它还启动了另外两个容器 :一个是链码环境,另一个是和链码交互的 CLI。值得注意的一点是Peer 节点不会使用 TLS 因为 dev 模式不支持 TLS。

shell2编译并启动链码

  fabric-samples/chaincode-docker-devmode目录下执行:

docker exec -it chaincode sh

  执行成功,应该看到/opt/gopath/src/chaincode $
继续输入命令:

cd sacc
go build

  此时可能报错:
/opt/gopath/src/chaincode/sacc $ go build
go: github.com/hyperledger/fabric-chaincode-go@v0.0.0-20190823162523-04390e015b85: Get https://proxy.golang.org/github.com/hyperledger/fabric-chaincode-go/@v/v0.0.0-20190823162523-04390e015b85.mod: dial tcp 34.64.4.81:443: i/o timeout
  这是因为由于被墙无法下载依赖。这里设置go代理为阿里云并重新执行 go build:

export GOPROXY=http://mirrors.aliyun.com/goproxy/
go build

  运行链码:

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

  链码从 peer 节点启动并且日志表示链码成功注册到了 peer 节点上。注意,在这个阶段链码没有关联任何通道。这个过程通过 instantiate 命令的之后的步骤完成。

shell3使用链码

  即使在 --peer-chaincodedev 模式下,仍然需要安装链码,这样链码才能正常地通过生命周期系统链码的检查。这个需求能会在未来的版本中移除。

  进入 CLI 容器来执行这些调用:

docker exec -it cli bash
peer chaincode install -p chaincodedev/chaincode/sacc -n mycc -v 0
peer chaincode instantiate -n mycc -v 0 -c '{"Args":["a","10"]}' -C myc

  现在执行一个调用来将 “a” 的值改为 20

peer chaincode invoke -n mycc -c '{"Args":["set", "a", "20"]}' -C myc

  最后,查询 a ,返回结果:20

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

Fabric2.0 使用开发模式(dev 模式)测试

测试新链码

  前面测试过程中,使用的是fabric-samples/chaincode/sacc下的链码,实际测试时可以通过更改挂载路径,以便测试不同链码。

上一篇:Hyperledger Fabric从源码分析链码实例化过程


下一篇:Bitorrent protocol