可驗證機率
GodPack 的可驗證機率機制,會為每一批隨機結果產生一個介於 0 與 2^53 - 1 之間的整數。畫面或系統使用的機率值,是以這個整數除以 2^53 得出,因此每個結果都能以原始整數重新計算,不需要依賴四捨五入後的小數。
「可驗證」表示結果產生後會留下能夠重新計算與核對的證據。它不代表任何人能預先知道結果,也不改變卡包頁面所公告的卡牌內容與機率。
GodPack 的可驗證機率機制,會為每一批隨機結果產生一個介於 0 與 2^53 - 1 之間的整數。畫面或系統使用的機率值,是以這個整數除以 2^53 得出,因此每個結果都能以原始整數重新計算,不需要依賴四捨五入後的小數。
「可驗證」表示結果產生後會留下能夠重新計算與核對的證據。它不代表任何人能預先知道結果,也不改變卡包頁面所公告的卡牌內容與機率。
每一筆隨機結果都包含全域序號、批次編號、批次中的位置、原始隨機整數、建立時間、上一筆紀錄的雜湊值,以及本筆紀錄的雜湊值。同一批結果會取得連續的序號,並與批次收據及當時的鏈結頂端一起寫入資料庫。
系統只會在整批紀錄完成寫入後回傳結果。若請求途中斷線,服務可以使用同一個冪等識別碼取回原本的批次,不會因重試而產生另一組結果。
每一筆紀錄的 SHA-256 雜湊值,都是依固定順序將版本、序號、批次資料、原始隨機整數、上一筆雜湊值與建立時間一起計算。下一筆紀錄再引用這個雜湊值,形成從第一筆開始連續相接的公開鏈結。
如果過去任一筆紀錄的數值或內容遭到修改,該筆雜湊值就會改變,後續所有鏈結也會無法通過驗證。驗證程式可以從起始值依序重新計算每一筆紀錄,再與目前公布的鏈結頂端比較。
完整核對一次開包時,需要同時檢查兩類資料:第一類是隨機服務留下的序號、原始整數與雜湊證據;第二類是該次開包所使用的卡池快照、各卡牌對應的機率區間,以及最後選中的卡牌。
原始隨機整數可以重新換算為 [0, 1) 之間的機率值,再對照當時已確定的卡池區間。只要隨機證據、卡池快照及區間邊界一致,就能重新算出相同結果。未被使用的隨機值仍會保留在鏈上,不會因未產生卡牌結果而消失。
GodPack 將 RNG 服務的原始碼與驗證協定公開於 GitHub,讓任何人都能檢查亂數的產生方式、雜湊欄位順序、資料格式、錯誤處理及驗證程式。公開原始碼是這套設計的一部分,並非只提供內部查閱。
公開的驗證程式會讀取鏈結頂端與每一頁紀錄,重新計算所有雜湊值及機率值。驗證成功代表所公布的紀錄從起始點到指定鏈結頂端保持連續,而且內容與雜湊證據一致。
#01843
fd09…71bc
#01844
71bc…2ea6
起始
0000…0000
結果 1
8a31…fd09
結果 2
fd09…71bc