《區塊鏈DAPP開發入門、代碼實現、場景應用》筆記5——區塊鏈福利彩票的設計
筆者一直強調,一定要利用區塊鏈的特點來解決行業存在的問題,并且該問題最好用區塊鏈解決或者說只能用區塊鏈解決。彩票行業就是個例子。
在講解代碼之前,首先講解一下業務設計,如圖6.15所示。

圖6.15 區塊鏈彩票業務流程
限于篇幅和業務復雜度,該系統并沒有按照現有的福彩邏輯來設計,而是本著講明白實現原理的目的,簡化了系統的設計,讀者可以根據自己的需求來設計符合自己需求的系統。首先在傳統的福彩流程中,用戶會花費人民幣購買彩票,然后福彩系統將相關的投注信息傳送到福彩中心。當投注日期截止后,通過機器搖號的方式決定中彩信息,工作人員記錄投注信息,為投注人兌獎。在這個過程中,搖號機器可以被認為操控,在巨大的利益密切,公證人員也形同虛設。
而在本系統的設計中,用戶投注的不再是人民幣,而是一個彩票token,該token需要通過數字貨幣ETH來購買,購買的方式和過程不需要人工參與,是通過智能合約來實現。上圖中的流程1,用戶將ETH發送到token智能合約,該合約會按照ETH與彩票token的比例,返回用戶一定量的token,然后用戶通過流程2,將手中的token與一定的投注信息發送給福彩管理合約,該合約接收福彩token并記錄用戶的投注信息。
流程3是在滿足一定條件時,管理員發起搖獎動作,凍結投注行為。通過一個公開透明的算法,選出幸運的中獎者,該過程也是通過智能合約實現,沒有任何人為的參與的可能。中獎結果產生后,智能合約自動將獎金發送給中獎者,這個兌獎過程也無需用戶參與的,而是通過智能合約的一個函數。只是與傳統對講把不同的是,傳統兌獎得到的是法幣,而本合約函數返回的是token。該兌獎過程是圖中流程4的動作,當然作為福彩的管理者,需要收取一定的資金用于公益事業,因此需要把獎金池中的token轉移給福彩管理員,這個工作在圖中流程5的動作中實現。
投注人在中獎后,可以繼續投注,也可以通過將token發送給token的智能合約,贖回ETH數字貨幣,這個過程就將彩票token變成了可以在現實世界中流通的數字貨幣。流程6是投注人將token兌換成ETH,流程7是管理機構將token兌換成ETH。
在了解基本的業務流程之后,接下來講解具體的頁面設計和代碼實現,首先是頁面的功能模塊,如圖6.16所示。

圖6.16 用戶投注界面
(1)首先是賬號信息,在MetaMask以非管理員身份登錄,會顯示如上圖頁面的元素,所謂的非管理員身份,即不是創建彩票token合約管理合約的賬號。賬號信息顯示的是當前賬號下的ETH的余額和當前賬號擁有的彩票token的數量。
(2)第二是購買token的區域,在輸入框中輸入愿意花費的ETH的個數,該動作會發送ETH到Token合約的購買接口。當購買成功之后,該賬號下的token就會發生變化,賬號信息會隨之刷新。本例中,彩票token的價格是1finney,也就是說1eth可以購買1000個彩票token,1 eth = 1000 finney。因此在購買輸入框中輸入1,表示花費1ETH購買彩票token。
(3)第三個區域是輸入投注組合區域,用戶輸入自己的彩票組合,并為該投注信息設定籌碼數量即token個數,1token表示1注。本例中,為了簡化邏輯,只允許輸入3個0~9之間數字的組合。點擊投注之后,彩票管理智能合約會記錄客戶的投注信息,并減少用戶賬號下的token數量。
(4)第四個區域是當期賬號已經投注的記錄,如圖6.17所示。

圖6.17 管理員界面
當用戶以管理員身份登錄之后,可以顯示管理員專用區域,該區域需要設置彩票token的購買和出售價格,默認是1 finney,同時管理員還需要鎖定投注并觸發搖獎動作。搖獎結束后,需要重新開始新一期投注。
2020區塊鏈各種應用都上馬了,跟我一起學《區塊鏈DAPP開發入門、代碼實現、場景應用》吧。


浙公網安備 33010602011771號