一个简单的基于 Openzeppelin可升级框架彩票智能合约DAPP

一个简单的基于 Openzeppelin可升级框架彩票智能合约DAPP
https://github.com/xieyueshu/Lottery
一、需求分析:
a) 完成大致结构框架Openzeppelin 可升级智能合约:
i. 根据Openzeppelin 框架原理,通过Openzeppelin 插件来发布可升
级智能合约即可。需要注意的是,1 可升级智能合约不可以有
constructor,2 智能合约在后续升级只能增加存储变量,并且变量
只能放在旧版本变量下面增加。
b) 具体功能
完成一个简单的彩票
4 个兑奖数字
兑奖组合
4 个数字全部顺序符合
3 个数字顺序符合
传统的彩票机制是按照每期来进行,用户在某期时间段内下注,庄家最
后开奖,中奖用户分享池内的资金。用户持凭证兑奖。按照此方案开发的话,
系统复杂度较高。
而简单的区块链彩票玩法是一次下注实现下注、开奖和兑奖的功能。简
单的方案可能存在随机数安全问题。
这里采用简单的彩票玩法。首先,4 位数的组合,假设数字可以重复,
例如0011,1233,2244 都是合法的彩票数字;
每个用户address 只能下一注,每注金额1ETH;
合约系统生成随机四位数;
用户如果4 个数字全部顺序符合,则中一等奖成功匹配,则获得资金池
中最多不超过500ETH;
用户如果3 个数字顺序符合的,则二等奖成功匹配,则获得资金池中最
多不超过5ETH;
不中奖的资金滚入资金池。
c) Web3.js 的一个简单React 的兑奖页面
通过h5 网页方式调用web3.js 库,使用React 框架来实现与以太坊区块
链节点rpc 通讯调用智能合约,下注和查看结果。
包括可以查看下注是否成功;查看开奖结果;
为了简化功能,使用时不可以离开当前页面,避免前端数据丢失无法查
询下注,及开奖结果。
二、方案及架构
a) 可采用Hardhat 开发工具协助开发;轻松支持Web3.js、Ethers.js 插件,
OpenZeppelin 可升级智能合约插件等。由于Ethers.js 是Web3.js 的一个
简化版,本方案采用Ethers.js 作为Web3.js 与区块链节点rpc 交互。
b) 为了加速开发进度,引用网上开源项目。这里引入一个Hardhat 相关的
开源项目《https://github.com/nomiclabs/hardhat-hackathon-boilerplate》
作为本example 的一个项目框架。其中包含hardhat 工具及相关测试框
架和ethers.js,及一个Create-React-App 前端代码;在其基础上可以很
容易引入Openzeppelin 插件。
c) 合约中数据存储主要包括:storage 存储资金池数量、parameter 用户输
入下注号码、memory 系统自动生成随机号码、event 输出用户开奖结
果;
d) 系统自动生成随机码方法设计:
通过区块时间戳哈希,对其求模(10000)得出中奖号码。
e) 其他,先以功能实现为主,暂时不考虑内存溢出,攻击等安全问题。
三、功能界面
提示用户连接metaMask 钱包
如果钱包余额不足1ETH 则提示
余额充足的界面
显示下注界面
用户输入4 位数字
调用metaMask 钱包
等待交易打包
显示中奖结果

 

 

BET(Bear Eldest Token)-熊大币详细介绍 - 大自然的流风 - 博客园
https://www.cnblogs.com/zdz8207/p/bet-info.html

posted @ 2021-05-24 05:03  大自然的流风  阅读(1231)  评论(0编辑  收藏  举报