×

基于迅雷链的DAPP开发实战分享

标签: 暂无标签
迅雷链足球竞猜产品是在世界杯期间由迅雷团队开发的基于迅雷链智能合约的足球竞猜产品,在开发过程中我们的工程师积累了一些经验,我们从使用迅雷链开发的角度,做了一份总结,分享给各位开发者。

一、系统架构

1.jpg

系统分为四层,其中上面三层为应用开发者需要开发的部分,第四项为迅雷链提供的平台服务。

1、智能合约
提供世界杯竞猜关键数据的存储和查询逻辑处理、权限控制。如投注、开奖、管理员发奖等操作。所有投注和竞猜数据全部存储在合约里。

2、业务后台
对接智能合约层,与区块链直接交互,连接前端应用和区块链智能合约。前端的投注和查询操作,通过业务后台封装的接口,实现合约函数和参数的编码解码,转换为智能合约的执行和查询操作。

3、ToC端应用和运营平台
ToC端应用将合约的执行和查询转换为可视化界面操作,并实现调起链克口袋和扫码的过程。运营平台结合服务器钱包(可选),实现合约管理员账户权限操作。

4、迅雷链平台
迅雷链为开发者提供的平台服务:区块链平台,开放平台,迅雷链测试环境,链克口袋(服务器钱包)。

二、开发流程总结

1、智能合约开发
1)开发阶段
使用truffle搭建项目结构,引入openzeppelin依赖库,使用SafeMath和Ownerable。使用本地remix调试。

2.jpg

2)迅雷链测试环境调试阶段
首先根据迅雷链开放平台开发文档指引(https://open.onethingcloud.com/site/docopen.html#52),
注册迅雷链测试环境用户,给测试账户充值,在测试环境部署合约。上述步骤用户可通过通过API请求或文档提供的apiary(https://thunderchain.docs.apiary.io/#)来解决。

开发者可能遇到的问题:
1)测试环境合约的查询和执行
在测试模拟用户投注时,使用测试环境链克口袋扫描二维码执行合约。二维码由测试环境提供的生成扫码支付url的接口提供。但是在请求生成扫码支付url接口时,需要将执行合约的函数和参数编码data作为请求参数。同样,在合约查询时,返回的result也需要通过解码得到返回值的具体意义。这里开放平台文档提供了编码解码的参考库(ether.js或web3.eth.abi),开发者需要将编码解码过程与执行和查询的过程封装到一起。
迅雷链开放平台团队将于近期提供可视化查询和执行合约的开发工具。同时,开发对应的库将此过程封装到合约查询和执行的流程里,已纳入近期的需求规划中。

2)测试环境链克口袋的错误提示
刚开始做迅雷链足球竞猜的合约开发时,使用测试版链克口袋,错误码与错误详情不够完善,但是迅雷链开放平台的小伙伴快速进行2个迭代,目前已逐步完善合约执行的错误信息,比如开发者签名不正确、gas不足等等,为竞猜合约应用的开发提供了很大的便利。

3)合约升级
此次合约开发时,考虑到合约数据和逻辑关联性太强,且本身业务简单,拆分为数据和逻辑两个合约的意义不大,所以使用的是单合约结构。同时考虑到世界杯竞猜合约是短期活动,保留了对外数据读取接口,并未使用合约本身升级的逻辑。如出现紧急情况,可实现紧急关闭竞猜,新建合约导入数据,从业务平台更换新的合约地址实现升级。
合约升级理论上并不符合区块链去中心化的需求设计和原理,但升级的需求是不可避免的,导致了当前合约升级的痛点。所以具体解决方案,需要开发者结合自身业务实际情况来实现。基础的操作如数据与逻辑分离、业务层更换合约地址、保留合约数据读写接口等。

2、合约与后台业务对接
后台业务与合约之间只有两个接口:
1)ethcall 合约查询接口
2)call 合约执行接口
后台业务通过这两个接口查询和执行不同的合约函数,区别在于参数不同。
通常情况下合约可以理解为数据库,与数据库不同的是,数据库单纯的存储数据结构,由后台定制不同的查询和执行语句操作数据库;合约则不仅定义数据的存储结构,还要提供对外的查询和执行逻辑函数,所以业务层并不能自由的组合查询和执行数据库的语句,只能在合约对外提供的接口基础上组合出有限的操作。
所以在实际开发中,如果合约和后台的开发角色是分开的话,还需要两个角色提前对接对外业务的理解。

开发者可能遇到的问题:
1)编码解码
目前阶段参考以太坊的js依赖包
未来迅雷官方会提供通用库支持。如开发者有任何疑问,都可以在社区与迅雷链开发团队交流:
http://wanke.onethingcloud.com/forum.php?mod=forumdisplay&fid=53

2)Event支持
event可以作为外围系统的通知或非依赖数据的记录依据。将会在八月中旬上线Event支持方案。

3)迅雷链回调业务后台
世界杯竞猜,用户投注后的回调逻辑,当前使用的是回调后台,然后前端轮询后台结果的方式。此处可以使用合约event事件结合事件查询回调来优化。

3、业务平台与 To C 应用端和运营平台
由于合约异步执行方式,使得前端调用业务平台接口发送执行合约的调用请求后,返回值是合约执行交易的hash,实际合约执行情况(成功或失败)并不能实时返回,开发中需要注意这种异步方式带来的问题。实际执行合约后数据状态的变化,需要通过合约数据查询或根据合约事件监听来确定结果。

开发者可能遇到的问题:
Web端的DAPP通过otst方式调起链克口袋,主流浏览器(包括华为、UC等)是可以正常跳转的,但是微信浏览器及百度浏览器可能存在不支持的情况。
这种情况仅限于Web端区块链应用,如果是Android和iOS的APP是可以正常跳转的。

4、迅雷链开放平台
合约的交易记录(转入和转出)都可以通过迅雷链开放平台

3.jpg

以上是我们使用迅雷链开发应用的经验总结,希望对开发者能够有所帮助。目前,迅雷链足球竞猜仍在持续运营中,涵盖国际冠军杯等热门足球赛事,欢迎大家参与~

思桦

写了 23 篇文章,拥有财富 276,被 11 人关注

反对反对
回复

使用道具

B Color Link Quote Code Smilies

成为第一个吐槽的人

Archiver|手机版|小黑屋|迅雷链开发者社区
Copyright©2018 onethingcloud.com All Rights Reserved 深圳市网心科技有限公司版权所有 粤ICP备14008884号-23
返回顶部