智能合約中的隨機數生成演算法

智能合約中的隨機數生成演算法

來自專欄拉普達記11 人贊了文章

周末花了點時間又複習了一下 eos 上的智能合約開發,和 @NecoKeine 一起開發了一個 EOS 上的老虎機小遊戲。目測目前看起來是 EOS 上第一個同類型的作品。

  • 遊戲官網:happyeosslot.com
  • 合約地址:MyEOSKit - EOS Tracker & Tools
  • 合約代碼:github.com/Andoromeda-F
  • 前端代碼:Andoromeda-Foundation/Project-Eolt 。

命令行小工具:

查詢玩家餘額cleos -u https://api.eosnewyork.io:443 get table happyeosslot happyeosslot player查詢當前玩家的投注 cleos -u https://api.eosnewyork.io:443 get table happyeosslot happyeosslot offer

爆率表格,https://docs.google.com/spreadsheets/d/1AqSJ8uMKcUam4mpnfdZD6UnGYWz4hRWcvTCv1JIflBg/edit#gid=0

隨機數生成器是遊戲製作過程中的一個重要工具。一般來說,智能合約中生成隨機數的方法有以下三種:

  • 根據一些鏈上信息,取隨機數,例如 blockhash、區塊高度、etc。
  • 使用第三方的 Oracle,例如 etheroll。
  • 使用 DAORNG。

其中第三種方法一般也是以太坊官方推薦的,最符合區塊鏈精神的方法。不過在 EOS 上目前還沒有這樣的 DAO 合約。所以還有一種方案三的簡化版本,就是讓遊戲雙方分別給出一個 seed,並利用 hash 進行加密,最後再統一揭示。例如 以太坊官方教程中的的盲拍 以及 EOS 官方合約中的擲骰子。

合約中有三張 table,

  • global 記錄全局信息,如遊戲當前 seed。
  • player 記錄玩家的信息,每個玩家的籌碼。
  • order 記錄每個玩家下注的隊列。

每當後台檢測到有玩家下注,我們就調用一次 reveal 方法,清空當前 order 隊列,並順便設置下一局遊戲的 seed。

最後說一下這個遊戲的風險,理論上,遊戲官方作為最後一步揭示 seed 的參與者,是可以提前預測到 roll 出的結果的,因此可以拒絕開獎或者大量作弊套現離場。另一種可能是雖然玩家 roll 到 100 倍的 BTC 是小概率事件(我們自己測試的時候第一把就 roll 到了 btc,我們還一度以為是合約的 bug。。。),但是一旦發生可能會造成短時間內產生大量擠兌,導致合約入不敷出。


推薦閱讀:

最近應該是踩狗翔了 2018.08.14
2018EOS、ETH的最強挑戰者——梵塔網路PNT
幣圈一年賺9倍的操作方法,原來如此簡單!
每日復盤 | 下跌目標精確到位,EOS「給足面子」翻開新篇章
fcoin驚現賬戶被盜!這是要涼?

TAG:隨機數 | 智能合約 | EOS |