可驗證公平性全解析
什麼是「可驗證公平性」?
玩家常常擔心在網路遊戲中被作弊,
這是可以理解的,因為從技術層面來說,遊戲提供方要讓你輸是非常容易的事。
在 Jemlit,我們提出了解決方案:可驗證公平性(Provably Fair)。
這是一種工具,讓你(玩家)可以自行驗證每一次擲骰結果,
確保整個過程完全公平、無任何造假!
可驗證公平性的運作原理是什麼?
在這個系統中,每次擲骰結果都是由以下變數共同計算而得:
- 伺服器種子 - 由我們提供的一串隨機字元
- 用戶端種子 - 由你的瀏覽器產生,你可以自行修改
- Nonce 或 遊玩次數 - 每次你遊玩時會遞增的數字
你會在遊戲開始前拿到一組加密過的 Server Seed。
由於這是事先提供給你的,我們無法在之後更改。
不過它是加密狀態,所以你無法預先推算出結果(只有在日後獲得 未加密 的 Server Seed 時才能驗證)。
伺服器種子是透過 SHA512 雜湊演算法加密處理的。
你的瀏覽器會隨機產生一組 Client Seed,但你可以(也建議)在開始遊戲前手動修改, 這樣網站就無法預先得知你的 Client Seed。
當你第一次下注時,Nonce 會從 1 開始, 每進行一次遊戲,這個數字就會加 1。
擲骰結果是怎麼計算的?
現在來點技術內容!有3個步驟帶我們到達這個遊戲的最終擲骰結果。
步驟1 - 哈希處理變數
在這一步中,我們使用 HMAC 和 SHA512/256算法,將 Server Seed 作為 金鑰,並將 Client Seed 和 Nonce 作為 數據,並用 連字符 (-) 連接。
你可以自己計算;去 這裡,並運行以下代碼:
echo hash_hmac('sha512/256', 'your client seed-your nonce', 'server seed');
結果將是 38611068f6936027c4657138536fb5bb8f82a6cb2d883f1acb47cb24013f9e93
步驟2 - 將哈希轉換為數字
在第二步中,我們將上一個步驟中得到的結果轉換為數字;去 這裡,並運行以下代碼:
echo number_format(hexdec('38611068f6936027c4657138536fb5bb8f82a6cb2d883f1acb47cb24013f9e93'), 0, ".", "");
你將得到 25501016943689873370561741542489390377389678092728534236058081515070178721792,一個非常長的數字。
步驟3 - 計算最終的擲骰結果
由於我們希望擲出的是一個介於 0 和 100 之間的十進制數字,首先,我們將前一步中的數字除以最大可能數字,即 1664(64 是在步驟1中獲得的哈希字串的長度)。
最後,擲骰結果計算如下:
roll = 0 + 除後的數字 * 100.
在這個例子中,結果是 22.0231。
獎品是如何選擇的?
當你進入 eBox 頁面時,可以點擊
顯示機會 來切換中獎機率顯示,
也可以在頁面底部點擊 「查看開盒結果」 來查看歷史擲骰紀錄。
每個盒中物品都會顯示需要擲出的數字範圍,例如:95.54 到 97.22,
這表示若你擲出的數值 大於 95.54 且 小於或等於 97.22,就能贏得該獎品。
如何驗證一切公平?
為了驗證沒有作弊,只需按照前面提到的步驟操作。
當然,你只能在揭示 Server Seed 後驗證遊戲。
你可以在頁面頂部的 "Fairness" 彈出窗口中找到你的 Server Seed、Client Seed 和 Nonce(如果你在移動設備上訪問 JemLit,則可以在左上角的菜單中找到)。