1
背景
16年上半年 某互助保险平台的CEO发了一条微博:“…基于场景化大数据和区块链技术打造的解决民众面对重大疾病医疗资金问题的互助社群….”
我们来简单了解下互助保险模式:用户花费9元加入互助保险,患病申请互助最高可赔30万元;这30万元是从参与此次互助的所有会员里面平台费用,假设30万个会员则每个人均摊1元。
我们不清楚此互助平台具体哪些业务流程采用了区块链,也不发表意见此模式是否更有效率或公信力。仅仅针对这类模式的业务,分析如何使用composer来完成超级账本的智能合约开发。
从上面的场景来看,业务简单划分为: 参保、申请互助及审核(涉及人工参与不在此文讨论范围)、赔付;角色划分:参保人。
2
Composer简单了解
Composer github地址:
https://github.com/hyperledger/composer
Composer是基于HyperLedger fabic的开发框架,目前已经支持fabric 1.0。
先来看一张图:
这张图,简单的说明了composer的架构:
完成以上内容后,执行打包命令生成.bna文件,然后可以使用Composer Playground将bna部署到Hyperledger Fabric,并通过 Web页面测试业务逻辑。
3
Composer本地环境部署
(本文主要写如何编写一个智能合约,详细的部署大家可以看原文档:https://hyperledger.github.io/composer/introduction/introduction.html)
1.环境依赖:
如果你之前安装过Fabric或composer,请先删除,执行以下命令:
docker ps -aq | xargs docker rm -f
docker images -aq | xargs docker rmi -f
2.执行以下命令部署composer,此脚本会部署好composer和fabric:
curl -sSL https://hyperledger.github.io/composer/install-hlfv1.sh | bash
如果没有错误的话,当前目录下会有 composer.sh这个文件,以后你可以用它来启动 ./composer start 或 停止./composer stop
3.浏览器访问http://localhost:8080,看到以下界面就说明成功了
4.安装用来启动restful服务的全局命令(npm用cnpm替换会快点)
npm install -g composer-cli
npm install -g generator-hyperledger-composer
npm install -g composer-rest-server
npm install -g yo
接下来,让我们进入实际的demo操作吧,使用yo命令:
接下来就是具体的代码编写,根据上面的提示,我们需要编辑的文件有model、logic;acl、qry以及test目录下的文件此次不涉及。本文附带源码文件mi.bna
4
Model编写(models\com.bcdemo.mi.cto)
participant Member extends User {
}
asset MIAsset identified by assetId {
}
asset MIList identified by listId {
}
transaction Offer {
}
transaction PayOut {
}
5
Logic编写(lib\logic.js)
编辑Offer交易逻辑
MakeOffer对应transaction Offer的Model
function makeOffer(offer) {
将参数offer人员信息加入到MIList里面的offers列表
}
function payOut(payOut) {
1. 按payOut参数指定保单Id, 获取保单信息:参与人数、已赔付金额
2. 按payOut参数指定的赔付金额,给指定赔付人赔付的金额
3. 更新保单Id对应的MIList 赔付人员列表
}
打包测试
执行命令:
composer archive create -a demo.bna -t dir -n mi
将生成demo.bna文件,如果没有问题,你将看到如下输出:
回到浏览器页面http://localhost:8080,点击”Let’s Blockchian!”,进入以下My Wallet界面
点击 Deploy a new business network,进入新的页面
点击Drop here to upload or Browser, 然后选择上面命令行生成的demo.bna
点击deploy后,回到My Wallet页面
点击Connect now,进入Web编辑&测试页面
点击Test,进入Test页面,然后让我们分别输入Member、MIAsset、MIList,这里图示Member的输入,其他两个一样
点击Member -> 点击 Create New Participant,进入“Create New Participant”页面
在输入框内输入:
{
"$class": "com.bcdemo.mi.Member",
"IDCard": "",
"phone": "",
"balance": 0,
"email": "email:1111",
"name": ""
}
点击”Create New ”后,再次创建第二个Member
进入Member的列表页,显示”1111”和”2222”用户
接下来依次完成MIAsset、MIList
然后让我们发起参保交易,给刚才创建的保险档期“listId:1111”加入参保人
在Web编辑&测试页面,点击”Submit Transaction”,进入发起交易的页面
输入信息,点”Submit”提交信息,接着再次发起Offer交易将 member”2222”也加入参保人里面去
成功后可以在MIList看到对应的Offer加入的“1111”“2222”信息,接下来让我们来测试一下给“1111”发起一笔赔付交易吧
点击”Submit Transaction”,在交易界面选择PayOut类型的交易,输入以上信息,点”Submit”提交,然后让我们分别看下用户”1111”账户的balance是否增加、MIAsset里面的used是否增加、MIList里面的PayOutList是否记录了”1111”此次赔付交易
测试完成,最后一步就是如何部署成rest形式的接口,给其他系统调用服务了
测试rest接口服务
在linux里面的demo.bna目录输入命令 :
composer network deploy -p hlfv1 -a demo.bna -i PeerAdmin -s adminpw
在linux里面输入命令 :
composer-rest-server -p hlfv1 -n mi -i admin -s adminpw
现在,你可以在浏览器里面输入 http://localhost:3000来进行 rest 接口测试了!
有了rest接口服务,可以很轻松的和业务系统进行集成。
作者简介:唯品会区块链研究小组 组长 余小平