如何在BSN上创建基于FISCO BCOS的应用?

4月25号,由国家信息中心进行顶层设计的区块链服务网络BSN正式启动全球商用,FISCO BCOS同期完成BSN适配工作,成为目前BSN中首个完成适配集成的国产联盟链底层框架。
目前,开发者可在BSN上使用FISCO BCOS区块链平台开发与部署应用,此外,FISCO BCOS也针对BSN适配需求进行了一系列特性和功能优化。
为方便开发者熟悉BSN上应用开发的流程,FISCOBCOS开源社区举办的《沙场练兵|写出高水准智能合约》线上直播Meetup上,社区核心开发者刘明臻现场进行实例演示,手把手分享如何在BSN上创建基于FISCO BCOS的应用。
我们整理了直播的精彩内容与提问,供大家交流学习,演讲PPT也全文提供给大家对照进行开发演练。
在BSN上创建新应用流程
开发前需要在BSN上创建一个新应用,创建的具体步骤如下。
第1步 :注册BSN账号并登录
BSN门户地址:https://www.bsnbase.com/
第2步 :创建新服务

路径如下:我发布的应用>我发布的服务>创建新服务。需按提示填写相关信息,如服务名称、服务类型、版本号等,在选择平台类型时需注意应选择fisco-2.4.0s-sm2。

第3步 :选择链码
创建区块链应用时,需上传提前备好的智能合约;这里,我们上传一个ok合约,用于接下来的实例演示。
第4步 :选择城市节点
城市节点即区块链节点,在BSN发布应用时,需选择应用运行在哪些城市节点。选择城市节点后,BSN会专门为该应用创建一个群组,后续该应用的智能合约和交易都会运行在群组里,各应用之间通过群组隔开。
选择城市节点时,需要先点击检索后才会出现下图所示列表。公测期最多可选择三个城市节点。

第5步 :提交审核
创建新应用请求提交之后将发送给BSN进行人工审核。如审核通过,BSN会部署智能合约,并在部署成功后通知开发者。
在BSN上开发实例演示
BSN是面向开发者提供基于区块链运行环境的基础设施网络,以互联网理念为客户提供公共区块链资源环境,帮助客户快速、低成本地开发、部署、运营和维护区块链应用(DApp)。
完整的区块链应用一般包含两部分:链上智能合约(应用服务链码DApp Service Chaincode)和链下业务系统(off-BSN system)。
链下业务系统通过服务网络公共城市节点(Public City Nodes 或 PCN)网关(gateway)调用在城市节点上部署的应用服务链码进行链上交易处理、数据写链和数据查询等操作。
服务发布者(Publisher)和参与方(Participant)可使用自己选择的 IDC 资源或云服务平台部署自己的链下业务系统,并通过互联网连接到城市节点网关访问应用服务链码。

· 合约链码简介
前面提到,在上传链码包时需要将提前备好的智能合约代码上传。在此我们上传的是一个简单的ok合约做实例演示。

合约部署、发布成功后将进入下一阶段:编写应用逻辑代码来调用智能合约(完成整个区块链应用的链下开发)。
接下来我们将演示在BSN上建立一个区块链应用的整体流程,包括配置替换、编写调用代码、调用合约等。
· 开发前准备
查阅资料
· BSN门户上查看开发者手册、开发实例,这是学习使用BSN开发区块链应用的重要途径。

· 下载FISCO BCOS开发示例及预置智能合约包
资料获取路径:
BSN开发者手册>下载《FISCO BCOS开发示例》
BSN门户开发实例 >下载《FISCO BCOS预置智能合约包》
配置替换
下载《FISCO BCOS开发示例》并导入到IDE里,需要先进行配置替换后才能连上BSN网关发送交易。
需要替换的配置有三个:证书、网关地址、用户信息。
· 替换证书。因为通讯采用ssl加密方式,所以需要替换资源文件中的证书文件,如下图所示,找到所有证书进行替换,需要注意以下特殊替换规则:
gateway_public_cert <—> gayeway_public_cert_(secp/sm2)(这里选sm2)
bsngate_https <—> bsn_gateway_https

· 替换网关地址。如下图所示找到网关地址,填写ip和端口。

· 替换用户信息和合约名称。调用应用时首先要有对应的用户信息,因此需要填写userCode和appCode;合约名称可以从「我参与的服务信息」里查看。

配置替换到这里就全部完成。
· 编写调用代码
首先,在应用服务接入配置参数中查看需要调用的链码名称和合约地址,这里用到智能合约函数主要有get函数和trans函数。

其次,在com.reddate.contract.controller.WorkController添加okTrans接口。
添加代码如下图:

此处说明下ok合约里trans函数调用方式:
· 构造一个访问合约的参数和被访问合约的函数名;
· 把参数、函数名及userId封装成合约请求包发往网关;
· 网关把信息转发给Front docker;
· Front docker组成一个区块链交易包并签名,再把签名交易发送给真正的节点;
· 节点共识,返回执行结果;
· 解析执行结果获得:交易哈希、block哈希以及合约的返回值。
okGet接口调用流程和上述trans函数调用流程一致,区别在于设置的参数不同。如需调用其他接口,可以构造对应参数列表、不同的函数名,选择不同用户(角色)来调用即可。

· 调用演示
下面演示合约调用,测试调用代码是否正确、网关是否联通等。
启动服务
启动FISCO BCOS预置智能合约包,它是一个web服务,可通过8100端口访问,我们构造http请求,使用postman进行调用。
查看服务是否正常
发送getBlockHeight请求块高,通过查看块高来确定服务是否正常。将请求发到链上后,会返回一个结果说明块高;如果能正常收到返回,证明该服务已启动成功,并已连接上BSN网关,群组和节点也正常。

注册user
BSN中FISCO BCOS目前采用私钥托管模式。发交易时,首先需要调用registUser接口创建用户,用户创建实际就是在BSN中为用户生成一个私钥并进行托管的过程,后续该用户发交易时,就可以使用托管私钥来签名交易。

调用交易接口okTrans
我们传入已创建的userId和数目8888,按照下图所示发至网关,正常情况会收到交易回执。如需查询交易是否生效,可调用okGet接口查询合约交易是否执行成功。

调用查询接口okGet
调用okGet接口,传入userId后正常会返回一个处理成功回执,并将函数返回值返回在queryInfo。本示例中返回值为8988,而非之前创建时的8888,是因为已经调用过一次接口,数值发生了变化。
小结
今天主要跟大家分享了如何在BSN上创建区块链应用的技巧,包括如何修改配置、连接BSN网关,实例演示了如何调用区块链的块高接口和合约接口等。开发者也可前往BSN门户体验创建基于FISCO BCOS的应用。