Kanıtlanabilir adalet
Her oyunun sonucu bahisten önce sabitlenir ve isteyen herkes tarafından yeniden hesaplanabilir — sözümüze güvenmeniz gerekmez.
Nasıl çalışır
Gerçek bir kumarhanede kartın çevrilişini, zarın düşüşünü, çarkın dönüşünü kendi gözünüzle görürsünüz. Çevrimiçi oyunda bunlar bir programın içinde olup biter — yani kontrol etmeniz gereken şey programdır.
Bahisten önce sunucu, gizli tohumunun SHA-256 özetini yayımlar. Tohumu sonradan değiştirmek imkânsızdır: özet bunu ele verir. Tohum çifti değiştirildiğinde eski sunucu tohumu açıklanır — ve o çiftle yapılmış her atış aşağıdaki formülle yeniden hesaplanabilir.
Kasa komisyonu %1’dir. Ödeme, bahis × 99 ÷ yüzde cinsinden şans olarak hesaplanır; yani beklenen değerin %99’u oyuncuya geri döner. Oyunu adil bir yazı turadan ayıran tek şey budur; başka hiçbir kesinti yoktur.
Tohumlar
Tohum çiftinin biri sizin, biri bizim. Sunucu tohumunu rastgele üretir ve özetini hemen gösteririz: tohumun kendisi çift değişene kadar gizli kalır, aksi hâlde gelecekteki atışlar önceden bilinirdi. İstemci tohumunu siz belirlersiniz ve o olmadan atış hesaplanamaz — sonuç iki tarafa birden bağlıdır.
Üçüncü bileşen nonce: bahsin, içinde bulunduğu çiftteki sıra numarası. Her oyunda bir artar, bu yüzden aynı çiftle yapılan iki atışın girdisi aynı olamaz.
Sayı nasıl elde edilir
Sunucu tohumu, istemci tohumu ve nonce bir HMAC-SHA512 içinde birleştirilir. Çıkan 128 hex karakteri beşerlik pencereler hâlinde okunur: 1 000 000’dan küçük ilk değerin 10 000’e bölümünden kalan alınır — böylece 0 ile 9999 arasında, yani 0.00 ile 99.99 arasında bir atış çıkar.
Eleme eşiği adalet için gereklidir: beş hex karakterlik bir pencere 1 048 575’e kadar sayı verir ve bu aralık 10 000’e tam bölünmez — eleme olmasaydı küçük sonuçlar büyüklerden daha sık çıkardı. 1 000 000 tam bölünür, dolayısıyla 10 000 sonucun hepsi eşit olasılıklıdır. 25 pencerenin tamamının elenme olasılığı ise 10⁻³³ mertebesindedir.
hex = HMAC_SHA512(key = serverSeed, msg = clientSeed + "-" + nonce) hex'i art arda 5 karakterlik pencereler hâlinde okuyun (0-4, 5-9, …): < 1 000 000 olan ilk değer → roll = değer % 10000 (25 pencerenin hepsi elenirse — roll = 9999) Altı: roll < target ise kazanç · Üstü: roll > target ise kazanç Ödeme = bahis × 9900 / chanceUnits (aşağı yuvarlanır) · %1 komisyon
Motorun kodu
Sunucuda atışları hesaplayan şeyin ve tarayıcınızda onları yeniden hesaplayan şeyin ta kendisi. İki tarafın birebir uyuştuğunu bir test güvence altına alır.
const WINDOW = 5; // pencere başına hex karakteri: 20 bit, 0..1048575
const REJECT = 1_000_000; // pencereye sığan, 10000'in en büyük katı
function roll(serverSeed, clientSeed, nonce) {
const hex = createHmac("sha512", serverSeed)
.update(`${clientSeed}-${nonce}`)
.digest("hex"); // 128 karakter
// art arda 5 hex karakterlik pencereler: 0-4, 5-9, ... 120-124
for (let i = 0; i * WINDOW + WINDOW <= hex.length; i++) {
const lucky = parseInt(hex.slice(i * WINDOW, i * WINDOW + WINDOW), 16);
if (lucky < REJECT) return lucky % 10000; // 0..9999
}
// 25 pencerenin hepsi elendi (olasılık ~1e-33)
return 9999;
}
// ödeme: %1 komisyon, aşağı yuvarlanır
const payout = (amount, chanceUnits) => amount * 9900n / BigInt(chanceUnits);
Kendi oyununuzu nasıl doğrularsınız
Mini uygulamada: alt çubuktaki Adalet ya da herhangi bir bahsin kartındaki “Oyunu doğrula”.
- Tohumlar sekmesi — yürürlükteki sunucu tohumunun özeti burada. Bu özet, siz bahis yapmadan önce sabitlenmişti.
- Tohum çiftini değiştirin. Önceki sunucu tohumu açıklanır; istemci tohumunuz sizde kalır.
- Açıklananlar sekmesi — açıklanan tohum, özetinin yanında durur. Karşılaştırın: tohumun SHA-256 özeti, bahislerden önce gösterilenle aynı olmak zorunda.
- Doğrula sekmesi — kontrol etmek istediğiniz bahsin sunucu tohumunu, istemci tohumunu ve nonce değerini yapıştırın. Atış doğrudan tarayıcınızda yeniden hesaplanır ve oyunun sonucuyla karşılaştırılır.
Hesaplama sizin cihazınızda yapılır, sunucumuza hiç uğramaz. Yukarıdaki formülle aynı hesabı istediğiniz dilde tekrarlayabilirsiniz — HMAC-SHA512 her yerde var.