一個簡單的基於 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
