详解区块链服务——业务层区块链应用开发

开发业务层区块链应用

[Hyperledger fabric(https://www.huaweicloud.com/product/bcs.html) 目前支持java,nodejs,go和python语言的sdk,供用户选择用不同的语言开发上层应用,使用相应的sdk调用部署在区块链上的链码。以下示例中我们选择使用go语言开发业务层应用。

步骤1:配置fabric sdk
Hyperledger fabric官方提供了我们需要的go sdk文件包,下载地址是:
https://github.com/hyperledger/fabric-sdk-go 目前BCS服务使用的版本commit号是035e4f9。

我们需要为fabric sdk生成相应的配置文件和访问区块链节点的组织证书。SDK配置文件主要包括要访问的链码名称/版本、证书解压的目录位置、实例化链码的通道,安装链码的节点组织/名称。在订购的区块链服务状态中的点击图18中的“下载SDK配置“会弹出图19配置窗口,完成sdk配置。
详解区块链服务——业务层区块链应用开发

图18 SDK配置文件下载界面
详解区块链服务——业务层区块链应用开发

图19 配置SDK文件下载界面

在订购的区块链服务状态列表页面上可以查看每个节点的状态以及相应的证书下载功能,我们需要下载相关的证书到sdk的配置文件所指定目录中,使得业务应用可以和区块链节点正常的进行通讯。图20显示了orderer节点和peer节点的证书下载链接。

详解区块链服务——业务层区块链应用开发

图20 orderer节点和peer节点的证书下载

步骤2:编写业务应用代码
合理配置sdk与区块链节点peer的通信后,业务层应用代码仅需对接链码的invoke和query的方法。以下示例中我们使用sdk提供的接口ChannelClient,即先通过加载sdk配置文件生成一个sdk实例,然后传入通道名称和用户信息生成一个ChannelClient对象,最后使用该ChannelClient发起一笔执行链码的交易。

详解区块链服务——业务层区块链应用开发
图21 ChannelClient初始化过程

在业务应用代码中定义好一个链码的数据结构ChainCodeSpec,包括ChannelClient对象、 用户信息和链码名称等,在ChannelClient初始化时给其赋值。将链码的invoke和query方法定义成结构体方法,可以很简单的在发起交易的时候完成数据传递如图22所示。

详解区块链服务——业务层区块链应用开发
图22 调用链码的invoke和query方法

步骤3:测试业务应用代码
下面我们简单的定义一个main方法如图23来测试一下我们的代码。首先声明之前在链码管理网站实例化的链码信息,即链码名称chaicodetest,实例化的通道名称testchannel,用户使用的是组织内的普通用户。其次,定义两个测试方法创建测试用例和查询测试用例。

创建测试用例create_testcases需要按顺序传入4个参数即项目名称、模块名称、测试用例名称和测试用例描述,调用invoke方法将一次交易写入区块链。查询测试用例query_testcases方法传入项目名称和模块名称,查询测试用例信息。
详解区块链服务——业务层区块链应用开发
图23 业务应用调用链码实现端到端测试

之后我们使用go run来执行这个测试用例,如图24我们可以看到已经生成testchannel实例并与区块链节点建立连接。为了确认交易是否正常,链码是否正确保存之前用例的复合键值索引,我们登陆区块链节点并用“docker logs <容器id>”命令我们可以看到如图25中为每笔交易创建的区块。图26链码容器也可检查我们之前链码打印的日志来确定是否可以正确查询测试用例。

详解区块链服务——业务层区块链应用开发
图24 SDK代码执行结果

详解区块链服务——业务层区块链应用开发
图25 查看区块链节点peer中的运行结果

详解区块链服务——业务层区块链应用开发
图26 链码运行结果

详解区块链服务——业务层区块链应用开发
本文通过一个简单的例子介绍如何通过华为云提供的区块链服务快速的开发和搭建起一个应用,用户可以根据所需的场景,基于本文的示例部署区块链服务,开发链码和业务层应用。
本文只阐述了部分代码的实现,完整的代码下载地址是:https://github.com/cloud1230/testsystem,供开发人员参考

点击下方链接即可体验区块链服务 BCS!
https://www.huaweicloud.com/product/bcs.html?utm_source= zjqd&utm_medium=mediafree&utm_campaign=bcs&utm_content=article-0727-1

猜你喜欢

转载自blog.51cto.com/13831707/2151035