
之前一段时间忙于写区块链教材,疏于更新内容了,请广大读者见谅。本次推出Fabric1.0.3最新的版本,和基于新版本上的两个应用,一个是IBM的Node.js Marbles弹珠应用,一个是Java的Pos回单应用,欢迎大家学习实践。
我们还是采用docker容器的方式启动fabric的各个节点,首先看整体的节点架构图。

我们的时序器采用kafka消息中间件实现交易的全序排序,采用最少的3个kafka节点进行部署,为简便起见我们只部署了一个时序节点,可以在此基础上扩展部署多个时序节点。存在两种类型的客户端,一种是node.js客户端marbles应用,一种是java客户端posslip应用。存在两个组织org1和org2,org1、org2分别部署两个背书节点,每个背书节点都使用couchdb进行账本的db索引。每个组织都使用自己的ca进行用户的管理,ca为本机构的用户提供证书签名。
我们依然采用docker-compose启动各个容器,容器使用到了如下images:
blockchain101/fabric-ca:1.0.3
blockchain101/fabric-peer:1.0.3
blockchain101/fabric-orderer:1.0.3
blockchain101/fabric-couchdb:1.0.3
blockchain101/fabric-kafka:1.0.3
blockchain101/fabric-zookeeper:1.0.3
hyperledger/fabric-ccenv:x86_64-1.0.3
blockchain101/fabric-cli:1.0.3
blockchain101/fabric-hfc:1.0.3
blockchain101/fabric-hfcj:1.0.3
上述images都已经上传到docker hub: https://hub.docker.com/r/blockchain101/, 可以自行下载,也可以在执行docker-compose up时下载。

而相关docker-compose文件和资源都已经上传git hub了,https://github.com/blockchain101/fabricdocker1.0.3,请直接通过git clone下来。
步骤很简单,通过依次执行如下命令,就可以完成fabric1.0.3环境的运行,marbles chaincode的安装和node.js应用的运行,同时也执行posslip chaincode的安装和java应用的调用执行。
1
$ git clone https://github.com/blockchain101/fabricdocker1.0.3.git

2
$ fabricdocker1.0.3/fabric-testnet-docker/dockercomposefiles/
$ chmod +x scripts/*.sh

3
$ CHANNEL_NAME=ch1 doc -f docker-compose-marblesv4-tls-withcli-withhfc-withcouchdb-kafka.yaml up
第一次运行时,会自动从docker hub同步images

启动需要一会儿,等待启动和初始化完毕

4
打开marbles应用
http://your-machine-ip:3001 org1
http://your-machine-ip:3002 org2

5
按照提示执行必要的步骤,进行marbles的用户的创建,系统启动时默认已经由cli创建了Dummy0(United Marbles)和Dummy1(eMarbles)用户



输入一个用户,如alice,点击“create”,创建指定的新用户

可以看到属于组织org1(United Marbles),org2(eMarbles)的所有用户,如果是3001端口访问的,当前用户只能操作org1(United Marbles)中的用户的弹珠。如果是3002端口访问的,当前用户只能操作org2(eMarbles)中的用户的弹珠。


你可以在3001的界面操作,3002的界面会实时接收event通知更新结果,反之亦然。
6
查看pos回单java客户端应用的执行结果
$ docker logs hfcj0.org1.bctrustmachine.cn




可以看到应用不停进行重试,等待orderer服务可用,channel资源建立,chaincode部署,初始化后才开始执行chaincode的调用,最后调用chaincode成功。
基于以上的步骤,我们完成了整个fabric1.0.3环境的搭建和运行,chaincode的部署和两种客户端类型(Node.js, Java) app的运行。