本文重要描述使用hyperledger-composer开发基于fabric的商业网络(chaincode)的逻辑,对于fabric网络的搭建只进行简略的描述
架构图
1. 创建business network
导入business network的参考实例,在其上进行定制化的改写。
.通过下面的命令引入基本的样板,其中包含了model,participant,transaction,ACL,以及附加于transaction之上的回调函数
git clone https://github.com/hyperledger/composer-sample-networks.git
解压后进入下面的目录
➜ composer-sample-networks git:(master) ls
LICENSE README.md lerna.json node_modules package.json packages scripts
➜ composer-sample-networks git:(master) cd packages
➜ packages git:(master) ls
animaltracking-network bond-network digitalproperty-network perishable-network
basic-sample-network carauction-network marbles-network vehicle-lifecycle-network
以basic-sample-network为例查看如何定制化自身的商业网络
➜ basic-sample-network git:(master) ls
README.md dist header.txt jsdoc.conf logs node_modules permissions.acl config features index.js lib models package.json test
其中我们需要修改的文件主要有package.json(项目的启动测试命令,名称,依赖环境等),permissions.acl(CURD权限的限定),models/sample.cto(asset定义,asset操作者的定义,asset操作动作的定义(如交易)),lib/sample.js(asset操作动作执行之后需要执行的操作,类似回调函数)。
单元测试3中生成,修改后的商业网络逻辑
首先下载依赖库
➜ basic-sample-network git:(master) cnpm install
执行测试逻辑
➜ basic-sample-network git:(master) npm test
得到全部passing则为测试成功
打包上文中构建的商业网络
➜basic-sample-networkgit:(master) composer archive create -a dist/simple-network.bna--sourceType dir --sourceName .
➜distgit:(master) ls
basic-sample-network.bna
此文件即为生成的商业网络文件,包含了上述的各种配置
2. 构建测试环境
此时有两种选择,一种选择本地化部署local-play-ground,另一种选择为使用online-play-ground来进行部署测试. 具体的部署请参考蓝色的链接。
如下图所示,点击左下角的红圈,将上一步骤产生的bna文件进行导入。
导入后的结果如下图所示,可以看到我们之前主要定义的文件都在左侧有所显示。如果要进行测试,请点击Test按钮,可以进行模拟的测试。
最后需要说明的是,如果使用online-play-ground的话,所有的运行默认是跑在浏览器的内存中。在local-play-ground中,可以选择跑在浏览器的内存之中,也可以实际链接到某个区块链网络之中。如下图所示,通过点击右上角圆圈所示的按钮,进入到配置链接网络界面,左边方形按钮中列举了所有可用的fabric网络(web browser为在浏览器中模拟运行,hlfabric为导入的本地区块链网络),现在我们选择的是hlfabric的网络。在中间菱形的部分即为我们现在链接fabric网络的属性,包含order地址,MSPID,ca地址等等的信息。 如果要导入新的网络,左侧红色方框下方进行操作即可(导入什么?请看这里connection profile)
3. 启动本Fabric网络以及composer相关工具的安装
如何启动本地fabric网络,不是本文的重点,请参见下面的链接
https://hyperledger.github.io/composer/installing/development-tools.html
在部署之前,我们需要安装composer给我们提供的一些依赖包,从而方便的通过SDK与fabric网络进行交互
安装composer-cli
cnpm install -g composer-cli
包含了所有通过命令行进行商业网络构建的指令
安装generator-hyperledger-composer
cnpm install -g generator-hyperleger-composer
其实一个yoeman的插件,通过这个插件可以快速构造基于Rest的调用
安装composer-rest-server
cnpm install -g composer-rest-server
基于loopback的插件,基于其可以快速构建对于商业网络中model的rest格式调用,并以web页面的形式呈现
安装yoeman文件
cnpm install -g yo
其是一个能够快速生成application的工具(如angular),和generator-hyperledger-composer进行结合使用能够使得生成的application和商业网络进行交互。
4. 部署到Fabric网络之中
部署
测试完毕,Fabric网络搭建完毕以后,我们接下来要做的就是将我们的商业网络部署到其之上。
distgit:(master) composer network deploy -a my-network.bna -p hlfv1 -i admin -s adminpw
其中my-network.bna是我们在步骤1中创建的商业网络定义文件,hlfv1为我们在步骤3中创建的fabric本地网络,利用其生成的connection profile连接。
部署完毕后出现以下的内容表示成功
✔ Deploying business network definition. This may take a minute...
Command succeeded
5. 与部署到Fabric网络之中的商业逻辑(Chaincode)进行交互
在进行这一步之前,我们再来看一个逻辑图
通过这图我们可以看出,我们利用前端的restAPI接口调用中间层(play grouand等),然后中间层利用SDK与后端真实的Fabric网络进行交互。我们接下来解决的就是建立Restful接口,SDK会在相应的程序中自动加载。
1. 方案1建立angular前端应用以及Rest Server进行连接
➜basic-sample-networkgit:(master) yo hyperledger-composer
2. 只利用Rest-server
➜basic-sample-networkgit:(master) composer-rest-server
basic-sample-networkgit:(master)
composer-rest-server
参考:https://hyperledger.github.io/composer/tutorials/developer-guide.html