前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用composer写一个简单的区块链互助保险应用

使用composer写一个简单的区块链互助保险应用

作者头像
区块链大本营
发布2018-05-10 10:34:42
1.5K0
发布2018-05-10 10:34:42
举报
文章被收录于专栏:区块链大本营

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的架构:

  • .cto定义资产、用户角色、交易模式;
  • .js 定义业务 一般新建一个名为logic的目录,里面放置实现业务逻辑的合约代码
  • .acl 定义访问权限
  • .qry 定义复杂查询

完成以上内容后,执行打包命令生成.bna文件,然后可以使用Composer Playground将bna部署到Hyperledger Fabric,并通过 Web页面测试业务逻辑。

3

Composer本地环境部署

(本文主要写如何编写一个智能合约,详细的部署大家可以看原文档:https://hyperledger.github.io/composer/introduction/introduction.html)

1.环境依赖:

  • Operating Systems: Ubuntu Linux 14.04 / 16.04 LTS (both 64-bit), or Mac OS 10.12
  • Docker Engine: Version 17.03 or higher
  • Docker-Compose: Version 1.8 or higher
  • Node: 6.x (note version 7 is not supported)
  • npm: v3.x or v5.x
  • git: 2.9.x or higher
  • Python: 2.7.x
  • A code editor of your choice, we recommend VSCode.

如果你之前安装过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)

  • 定义Member

participant Member extends User {

}

  • 定义MIAsset,确定参保的价格、建立日期、已赔付金额

asset MIAsset identified by assetId {

}

  • 定义MIList用来记录保单参与人以及赔付人

asset MIList identified by listId {

}

  • 定义Offer交易,参保人发起Offer交易后会将参保人信息加入到MIList里面去

transaction Offer {

}

  • 定义PayOut交易,参保人发起PayOut交易后,会给参保人按照指定的赔付金额进行赔付,赔付成功后,MIList记录每次的赔付记录,参保人账户会增加对应的赔付金额,MIAsset对应的保单会增加已赔付金额

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接口服务,可以很轻松的和业务系统进行集成。

作者简介:唯品会区块链研究小组 组长 余小平

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-09-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 区块链大本营 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档