為什么EOSBet不敢開源?

你好,我是不羈,一名程序員,帶你玩轉EOS智能合約開發。如果你對EOS智能合約感興趣,歡迎關注我的專欄。

簡介:我是一個一直以來倡導智能合約開源的人,不過最近看到EOSBet竟然不開源,甚是驚嘆!竟然有那么多用戶在玩一個無法自證公平的游戲!所以本文就和大家探討一下項目方不開源的原因。

EOSBet是“誰”?

EOSBet是一個基于EOS做博彩類的團隊,目前只有一個dice項目。

dice就是擲骰子游戲,但可別小看這個項目,它每天參與游戲的資金達到100萬EOS以上,給EOSBet團隊每天帶來2萬EOS的利潤。真可謂日進斗金。

為什么博彩類游戲在EOS上會這么火呢?如果你問一個玩dice游戲的人,“你為什么玩這個dice游戲?”,我相信他會這么回答你:

  • 第一,每個人都有以小博大的僥幸心理
  • 第二,它是基于區塊鏈的,透明公平,不像其他的賭博網站,站長可以幕后操縱結果

是的,人們認為區塊鏈是透明可信的,所以只要基于區塊鏈的游戲,就是透明公平的。

真的是這樣嗎?

答案是否定的。

每一個dapp都有一個與之交互的智能合約,我們在區塊鏈瀏覽器上可以看到和智能合約的所有交互過程,而智能合約內部是一個黑匣子。以EOSBet的dice游戲為例來看,我們所能看到的是,我們給eosbetdice11合約轉賬,并在memo里填上2到96之間的任意一個數字,假設我們填的是50,過了一段時間,智能合約告訴我們說,隨機生成的數字是51,我們這局輸了。但我們是怎么輸的?“不知道,只能從他們的官網上看到,他們會進行一些隨機數的運算,但這些隨機數怎么運算的,我們也不知道”。

這就是問題所在了,因為智能合約是個黑匣子,也就給了項目方藏匿貓膩的空間:

  • 他們可以在智能合約里,把我們的盈利概率減少3-5個百分點,而我們卻毫無察覺
  • 即便我們統計一下歷史記錄,可以得出智能合約把玩家的盈利概率減少了3-5個點,官方也完全可以說“這是隨機樣本誤差本來就存在,3-5點的誤差很正常”;
  • 如果項目方在智能合約里,增加小賭注玩家盈利的概率,而減少大賭注玩家盈利的概率,那么采用統計學來判斷項目方有沒有在智能合約里藏有貓膩的方法,也失效了。

總之,如果智能合約沒有開源,我們根本無法判斷一個dapp項目是否公平。

其實,在一個月以前,我聽說EOSBet將要上線的時候,我想它一定會開源的,因為博彩類項目搬移到區塊鏈上,相對于傳統網上博彩游戲的優勢,就是項目方可以通過開源以及源碼驗證的方式向用戶自證清白,這樣,人們可以不用去拉斯維加斯和澳門,就能玩公平的博彩游戲。

所以,當我發現EOSBet竟然沒有開源,我幾乎驚呆了。
要知道,博彩類游戲的隨機性設計對于玩家的利益來說至關重要,它應該被精心設計并且公開出來,如果這么重要的部分都沒有開源,玩家的利益還有何保障可言?與玩傳統的網上博彩類游戲又有何區別?

那么EOSBet為什么不開源呢?

不開源的原因

我想,項目方可能有如下三點考慮:

  • 第零,很可能項目方本身就想藏貓膩。關于這點我們就不展開了,總之,只要不開源,這種可能性總是存在的。
  • 第一,怕被人發現漏洞
  • 第二,怕代碼公開了之后,別人抄襲
  • 第三,存在不可公開的算法,怕開源之后,黑客利用該算法產生不利于項目方的結果

先說第一點,如果智能合約代碼開源了,黑客發現漏洞就更容易了。如果代碼真的存在漏洞,而黑客沒有告知項目方,而是偷偷了利用這個漏洞盈利,那么項目方就損失了。

其實我覺得這個情況,可以通過機制設計來解決。

  • 首先,智能合約應該設計安全檢測能力,當發生異常情況時,應該自動鎖住合約,暫停游戲。
  • 其次,應該在上線之前,對發現漏洞的同學給予懸賞,這樣,即便黑客在發現漏洞之后,就會有動力告知項目方,如果他想把漏洞隱瞞不報,那么其他的人報了,獎賞就會被其他人領走,所以各個“黑客以及白客”之間,就會產生一種良性的競爭關系。最終大家共同受益,黑客拿到了賞金,項目方提前修復了漏洞,避免了損失。

第二點顧慮,很可能是項目方最主要的顧慮,不過我覺得其實沒太大必要,有沒有源代碼,都可以一樣被“抄”,沒有代碼,可以抄界面,抄交互設計,只是抄的速度慢一點而已。就EOSBet而言,技術上沒有多少難點,形成不了門檻,真正形成門檻的是運營和社區認同。EOSbet的營銷做的很到位,但因為沒有開源,我預計社區認同會越來越弱。

再說項目方的第三點顧慮。你可能會驚訝,“還存在這種漏洞?”。是的,是存在的;當然解決方案不是沒有,只是項目方可能沒想到,或者擔心用戶使用起來太復雜。

要解釋這個顧慮,需要費一番功夫,我們一步步來看。

隨機數之“傷”

我們就以隨機數的生成為例吧。隨機數生成算法幾乎對于各類游戲來說,都是至關重要的。
好的隨機數,有兩個主要特點:

  • 結果是零散的
  • 結果是不可預測的

其實,準確來說,第二個特點包含著第一個特點。不可預測性是優良的隨機數的基本特征,這里的不可預測,不僅指任何人都無法對每次結果進行精準預測,還包括任何人都不能對每個結果的傾向性進行預測。就像仍硬幣,如果仍的人有個習慣性動作,這個動作能讓你在他仍硬幣之前,就能判斷出結果是正面的概率大于50%,那么此人仍硬幣的過程,就不是一個好的隨機過程。

你可能會說,“生成隨機數嗎?so easy,C++上面有一堆生成隨機數的庫,拿過來用就好了!”,

對不起,在EOS智能合約上用不了。智能合約中能夠使用的C++接口都是通過webassembly虛擬機提供的,暫時沒有random接口。另一方面,因為區塊鏈產生的每個區塊,都要求是可被其他的節點驗證的,也就是說,一個智能合約的執行結果,在不同的節點上執行,結果必須是相同的,這種確定性與隨機數的不可預測性存在一定的沖突

一個隨機數的例子

我在stackoverflow上搜索到了這樣一個內容,是EOS knight實現的一個隨機數生成器:

Screen Shot 2018-09-20 at 11.13.52.png

我去EOS knight的github中搜索了一下,現在已經沒有這部分代碼了,也沒有任何其他的智能合約部分的源碼了。

這部分代碼很好懂,我就不解釋了。你可以看到,它生成的隨機數的確是零散的,但并不能滿足不可預測性。
為什么呢?
因為這個隨機過程的結果完全依賴于當前的時間和玩家的賬戶,那么我就可以在交易產生之前,提前預測某個時間,該隨機過程產生的隨機結果。你可能會說,“這個current_time()返回的是毫秒級別的,你怎么可能把你的交易時間控制的那么準確?剛好就在你預測的時間完成交易呢?”。

實際上current_time()是秒級別的,雖然文檔中說返回的毫秒,但后面都帶有3個0。
即便將來EOS可以精確返回毫秒級別的結果了,我也可以跟就上面算法,預測某一秒鐘內,所產生的結果的傾向性,或者說,可以預測產生的結果在什么范圍之內,這樣我就可以利用這個特點來盈利了。

再回到EOSBet的dice游戲,如果它采用了上面的隨機數生成器,對于普通玩家來說,沒有任何問題,這個隨機過程挺好的,很零散。但黑客就可以根據時間提前預測骰子的點數的概率,從而穩定盈利了。這樣的話,項目方就虧損了。

EOS knight最初應該也是把智能合約開源了的,后來又不開源了,想必也是這個原因吧。

的確,在智能合約上產生一個不可預測的隨機數是一個難題,不過不代表項目方必須把智能合約藏起來,其實可以通過在機制上解決隨機數的生成問題,早前在ETH上人們就想出了解決辦法,不過解決辦法不是很完美,但完全能應對dice合約的需求了。至于如何做,我們明天再聊。

留一個問題給大家思考,學過C++的都知道,向系統請求開辟一塊內存時,該內存的地址是不確定的,那你覺得可以利用這個特點,在智能合約中生成隨機數嗎?

歡迎留言探討。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,443評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,530評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,407評論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,981評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,759評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,204評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,263評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,415評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,955評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,782評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,222評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,650評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,892評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,675評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,967評論 2 374

推薦閱讀更多精彩內容