Dapp开发

转载—DAPP实战:从0到1全过程(1)

2018-08-06  本文已影响70人  03e9c48218c1

转载微信订阅号(区块链之录)文章:

DAPP实战:从0到1全过程(1)

大家好!从今天开始,本公众号将推出DAPP开发系列教程,以项目Forever bird(http://47.95.248.105)为例,详细讲解基于以太链的DAPP开发全过程,包括整体架构设计,智能合约编写、调用、发布,以及从前台到后台的整体开发流程。

在开始之前呢,先做一些准备工作,笔者所采用的开发语言和工具如下:

准备工作:

前端:react

后端:go、nodejs

web服务器:nginx

钱包:metamask

智能合约:solidity

智能合约发布工具:truffle/remix

以太坊客户端:testrpc/geth

工具:web3j

数据库:mysql

前后端开发语言可以根据自己的喜好自由选择,对于基础开发环境的搭建本文不再叙述。

Forever bird介绍

Forever bird是笔者已经开发完成的一套用于加密鸟的交易和养成DAPP。下面介绍系统的主要功能和玩法。

环境依赖:需要安装浏览器钱包Metamask插件,请使用pc端浏览器chrome或者firefox访问。

安装matamask(https://metamask.io/)需要访问应用市场,如果不能访问可以访问路径下载metamask包进行离线安装(https://github.com/MetaMask/metamask-extension/releases),如果安装过程有什么疑问请留言。

定义和主要功能

鸟:每只鸟是用户完全拥有且不会消失的区块链鸟,每只鸟具有力量、速度和体重(单位:盎司)三个重要属性。每周都会按照鸟的体重进行排序,前20bird可以参与平台盈利分红。

主要功能如下:

捉鸟 捉鸟,首先调用智能合约生成bird,一个bird对应一个token id,然后把对应的token id绑定到对应用户。因此,该用户就拥有了唯一、独有、永恒的bird。

鸟市 用户拥有bird之后,可以在鸟市进行交易,平台会收取3.5%的交易费,交易之后购买者就可以拥有bird的所有权。

PK 玩家可以选择其他人的bird进行pk,pk会按照bird的力量、速度、体重和随机因子进行计算,胜者可以获取失败者的体重(如何两者级别相差很大,胜者可能不会获取体重),但是胜者和失败者都会增加经验值。

经验增加到一定数值能够提高bird的等级,等级的提高会增加bird的力量、速度和体重。

0~10级:经验值增加50升一级。

11~30级:经验值增加100升一级。

31~80级:经验值增加200升一级。

80级以上:经验值增加300升一级。

每升一级,力量增加3%,速度增加3%。

吃水果 每个bird在一定时间可以吃一个水果,水果分三类:力量型、速度型和经验型。三类水果会对应提高bird的力量、速度和经验。

分红 分红的比重:平台周盈利的30%

排名方式:按照bird体重(盎司),如果盎司相同,按照id升序排序(创建时间越早优先级越高)。

奖励总数:排名前20名

奖励比例:

第一名:奖励金 * 20%

第二名:奖励金 * 15%

第三名:奖励金 * 10%

第4~10名:奖励金 * 5%

第11~20名:奖励金 * 2%

bird首页如下:

用户登录之后会进入“我的”页面,如下图所示:

排行榜会按照体重进行排序:

每周都会对前20的bird进行分红:

以上对forever bird的项目进行了介绍,下面讲一下总体设计架构

bird的架构模型如下:

在这个架构中,基于以太链的智能合约相当于部分功能的业务后台,与传统的service一起完成整体逻辑,下面介绍一下各模块的功能。

智能合约实现语言solidity,智能合约包含存储和逻辑两部分。

存储内容包括用户和bird token的对应关系,bird的详细信息,比如体重、力量等;还有一部分调用event存储的log。

逻辑包括bird基因生成、bird转移、pk、吃水果等改变状态的接口,获取bird基本信息、获取用户bird信息的查询接口。

service service包括go实现的业务后台,对web提供业务接口;以太链所有的交易都必须等待矿工打包确认,因此nodejs实现的定时脚本,用户查询智能合约,同步bird信息。

web展示时如果直接以太链读取交易数据会比较耗时,同时还要做大量的数据处理,因此确认的交易打包的数据会存储于service数据库。本系统nodejs通过web3j来获取合约里已经完成的交易数据,最终把交易数据存到mysql数据库里。

web端 web端要和智能合约、service进行交互,因为智能合约和service相当于两个业务后台,要保证用户数据的正确性和一致性。

首先要有统一的账户认证,本系统统一使用metamask钱包作为账户认证。web端使用浏览器钱包Metamask(生成用户以太链账户,存储用户私钥),使用metamask提供的web3j接口与以太链智能合约交互,后端service要确认用户登录,需要用户使用私钥对信息进行签名,后端对前端传递的信息进行校验,校验通过则可以保证用户的本人操作,关于如何进行签名校验,请参考一下链接:

https://medium.com/metamask/the-new-secure-way-to-sign-data-in-your-browser-6af9dd2a1527

其次要保证数据传输的完整性。为了防止数据传输过程被篡改,调用智能合约的关键接口(会变更状态的业务接口)都加入了签名校验。

最后为了确保智能合约与后台行为一致性,对bird使用了状态控制。bird的状态变迁图如下所示:

在开发阶段,系统使用了testrpc和geth搭建私链。使用testrpc(内存操作)能够快速测试功能,使用geth能模拟真实以太坊环境。发布测试公链使用remix编译发布。

下章将会为大家讲解:智能合约的编写,敬请期待。

上一篇 下一篇

猜你喜欢

热点阅读