Dapp开发文档(粗略版)

设计文档


设计目标


基于以太坊平台设计一款答题益智类Dapp,参与者可通过答题赢得奖金并且完善知识面。

总体功能与流程概述


  1. 开始答题前,参与者首先根据自己的喜好选择相应的题库,题库类型分为:文学、历史、社科、数学…

  2. 题库选择完毕,参与者继续选择答题模式:闯关赛或是挑战赛。

  3. 参与者根据所选答题模式支付相应的挑战金或闯关金(挑战金或闯关金会进入奖金池)即可开始进入答题。

  4. 若参与者选择挑战赛,立即加载题目并且连续答题若干道,并记录答题时长。一段时间后统计成绩,排名靠后的40%所支付的挑战金会掉入奖金池,排名靠前的60%挑战金会返还并且会分得奖金池中一定比例的奖金(排名越靠前能够分得越多,答对同样数量题目的用时短的获胜)。

  5. 若参与者选择闯关赛,立即加载题目并连续答题若干道。一段时间后统计所有参与者成绩,若错误率在40%以上,闯关赛的闯关金会掉入奖金池,反之会退还闯关金并且分得奖金池中一定比例的奖金(错误率越小能够分得越多,答对同样数量题目的用时短的获胜)。

整体框架


功能视图

在这里插入图片描述

  • 前端
  1. 使用web3.js建立与智能合约的交互。
  2. 将必要的数据传输到后端进行处理。
  3. 统计参与者答题时间,并且与参与者地址对应,用来决定当错误率相同时谁胜谁负。
  4. 页面展示,包括选择答题模式、题库类型、切换答题页面以及提供参与者答题过程中所需的操作页面等。
  • 后台
  1. 根据参与者的选项加载不同类型的题目。
  2. 将必要数据写入数据库并在需要时进行加载。
  3. 接收前端数据,计算出参与者排名,反馈给前端。
  4. 记录参与者历史答题记录,避免加载到相同的题库。
  • 智能合约
  1. 从奖金池中将胜者奖金退还。
  2. 将挑战金或闯关金存入奖金池。
  3. 完成胜者奖金退还后,胜者按照一定的比例分配奖金池中的奖金。

开发语言

  • 应用前端:Html5 + CSS + JS,使用Sublime作为开发工具。
  • 应用后端:以太坊智能合约(Solidity)作为程序语言,与前端建立交互。
  • 服务器端:采用Golang作为开发语言,MySql作为数据库,使用Liteide作为开发工具。

代码规范


注释规范
  1. 文件头注释(每一个文件的文件头都必须做文件头注释)
/*
 * 文件名:LoadingLibrary
 * 描  述:加载题库
 * 作  者:
 * 时  间:
*/ 
  1. 方法注释(每一个成员方法都必须做方法头注释)
/*
 * 方法名: ReadFile(filename)
 * 功  能:读取文件
 * 参  数:filename 文件名
 * 返回值:无
*/ 
  1. 块语句注释
//循环遍历字符串,并将其存储在...中
for(i = 0;i < s.length;i ++){
	#code
}
  1. 变量注释
var flag;   //一个标识位
var numer;  //题目的数量
命名规范
  1. 文件名:每个单词首字母大写
SwitchLibrary.go
  1. 包文件、html、css、js、图片文件等: 全部小写,单词之间用-隔开
util
chart-showcase.html
home.css
common.js
animal-cat.jpg
  1. 常量:全部大写,单词间用_隔开
const NUMBER = 1;
const SHOW_LIBRARY = true;
  1. 方法、变量命名:驼峰法命名,首单词小写,其他单词大写
function getValue(){
	#code
}

var webUrl = "http://..."

设计上存在的问题

  1. 答题过程中参与者将题目复制后从网上寻求答案?
    解决:在禁止浏览器的复制行为的前提下。题目长度在可接受范围内尽可能加长,答题限定时长。

  2. 参与者多次参与答题后遇到相同的题目?
    解决:在题库题量尽可能大的前提下。记录参与者的答题记录,确保每次加载到的题目不同。

  3. 挑战赛一次不会有很多参与者在线,如何处理结果?
    解决:当只有少数参与者在线时,他们可以开始挑战赛,后面的参与者也可立即加入挑战赛,即使其他人已经完成比赛。当系统统计有足够多的人参与过本次挑战赛才会计算出最后的结果,进行奖金分配。

  4. 挑战赛与闯关赛队奖金池中的奖金如何分配(怎样的比例)?
    解决:影响因素较多,具体分配原则要多方面考虑。初步考虑,挑战赛会分的奖金池多数奖金,因为参与者付出代价较大,具体挑战赛与闯关赛的奖金分配比例有待进一步考虑。

  5. 参与者参加答题需要支付的挑战金与闯关金应该如何选择?
    解决:同上,综合考虑多方面因素,如参与人数、以太币市价等。

备注

  • 奖金池中的奖金会有一部分进入开发者账户,作为酬劳。
  • 隐形的激励政策:参与者为了赚取奖励会首先选择闯关模式(看起来更容易获得利益),这样下去的结果就是奖金池中累积的金额越来越少,参与者为了赚取更多奖励会主动参与挑战模式,由此形成资金链的循环。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值