如何使用智能合約生成隨機數

非對稱熵 (Asymmentropy)git

非對稱熵可用於運行去中心化的博彩應用。非對稱化的博彩與其餘博彩系統不一樣,由於它是不可能被操縱的。這是由於沒有人知道能中彩票的號碼,這就防止了人們經過操縱結果來選擇中獎號碼。這能夠經過把彩票分紅兩部分來實現。第一部分用戶選擇一個數字,並使用非對稱加密算法將這個數字的哈希值和其餘一些數據一塊兒提交到區塊鏈。其次,他們選擇的數字會被不加密地提交到區塊鏈中,而後使用開源算法和從用戶輸入中衍生出來的隨機性來生成獲獎的數字。這個過程被稱爲「非對稱熵」,由於它使用了「非對稱加密」和用戶輸入的「熵」來隨機生成數據並去中心化地選擇獲獎數字。下面詳細介紹了這個過程。github

摘要算法

傳統上,去中心化的應用程序(Dapps)依賴於將來的區塊哈希值來實現隨機性。 這種方法已經受到質疑,由於區塊鏈的記帳員能夠在生成新的區塊時經過過濾或從新排序交易來肯定隨機結果而不會破壞任何規則。這個問題在NEO中尤爲明顯,由於咱們如今只有四個記帳節點。這個遊戲提供了產生真正隨機性的機制。咱們將博彩做爲這種系統概念的證實,並但願它能爲其餘NEO開發者提供一些靈感。該系統將分兩輪進行,確保獲勝者是徹底隨機選擇出來的。步驟是:app

設置框架

要玩彩票,用戶須要有一個包含NEO和GAS的錢包。區塊鏈

第一輪測試

用戶將填寫一份包含3條數據的表格:加密

  1. 選擇4個字節的號碼(0 – 4,294,967,296)。
  2. 他們但願購買的彩票入場券總數所需的GAS數量
  3. 公鑰

完成後,用戶點擊「提交」,而後須要在他們的NEO錢包客戶端批准用於購買彩票的GAS數量的交易。而後,GAS將經過智能合約被髮送到一個去中心化的地址。spa

(例如,1 GAS = 1張票)翻譯

一旦交易得到批准,用戶的計算機將經過咱們的客戶端生成一個隨機數。這個數字將經過散列(選擇的數字,公鑰,系統時間)生成與用戶選擇的數字相同範圍內的隨機數。

生成的隨機數稱爲「隱藏號碼」。系統如今將使用開源算法對隱藏號碼進行散列,並生成稱爲「隱藏號碼的哈希值」的方法

如下5條信息會被提交到區塊鏈。

  1. 遊戲ID
  2. 玩家的公鑰(PK)
  3. 玩家所選擇的號碼
  4. 支付的GAS數量=購買的彩票數
  5. 隱藏號碼的哈希值

第一輪完成後,系統將關閉向區塊鏈提交任何新項。此時系統不會再出售彩票。

圖片描述

第二輪

全部隱藏的號碼會和如下的數據一塊兒從用戶的錢包中發佈到區塊鏈上:

  1. 遊戲ID
  2. 隱藏號碼

圖片描述

肯定獲勝者

這能夠確保用戶保持匿名。 而後使用全部隱藏號碼的平均值,將隱藏號碼的平均值與用戶選中的中獎號碼相匹配來肯定彩票的中獎者。

爲了使號碼與用戶匹配,經過開放算法對中獎號碼進行散列,若是用戶的隱藏號碼的哈希值與獲獎號碼相匹配,彩票的收益就會和原始項一塊兒提交給他們的公鑰。

Check(遊戲ID, 玩家地址, 匹配所選的號碼)

圖片描述

結論

這個彩票應用的目標是運行一個徹底去中心化的系統,它基於用戶的提交建立隨機性。 經過利用提交的彩票號碼的匿名性,系統能夠對這些數字進行計算並沒有偏地肯定獲勝者。

感謝

感謝Neunity @ https://github.com/norchain/N... 提供運行博彩智能合約的測試環境。沒有您的框架,咱們沒法完成智能合約的開發。 還要感謝dprat0821一塊兒熬夜討論纔會有非對稱熵的產生。特此受權他將「Asymmentropy」一詞翻譯成中文「非對稱熵」。

原文連接:https://github.com/generalkim...

翻譯:包子

NEOFANS:neofans.org
NEOFANS 微博:https://www.weibo.com/neofans...
NEOFANS telegram羣:https://t.me/NEOfansCN

相關文章
相關標籤/搜索