Kanıtlanabilir adillik
"Provably Fair" nedir
Oyuncular, çevrimiçi oyunlarda kandırılmaktan her zaman korkar.
Bu oldukça anlaşılır bir durumdur çünkü teknik olarak bir çevrimiçi oyun sağlayıcısının sizi kaybettirmesi çok kolaydır. Jemlit’te bunun için bir çözümümüz var: kanıtlanabilir adillik (provably fair). Provably fair, her zar atışının sonucunu sizin (oyuncunun) doğrulamasına ve dolandırılmadığınızdan emin olmanıza olanak tanıyan bir sistemdir!
Provably Fair nasıl çalışır?
Bu yöntemle her zar sonucu şu değişkenlere göre hesaplanır:
- Sunucu tohumu (Server Seed) – Tarafımızdan sağlanan rastgele bir karakter dizisi
- İstemci tohumu (Client Seed) – Tarayıcınız tarafından oluşturulan ve sizin değiştirebileceğiniz bir karakter dizisi
- Nonce veya Oyun sayısı (Play Count) – Her oynadığınızda artan bir sayı
Oynamaya başlamadan önce Server seed’in şifrelenmiş bir hashini alırsınız.
Bu bilgiyi önceden aldığınız için biz sonradan değiştiremeyiz. Ancak şifreli olduğu için siz de önceden kendi zar sonuçlarınızı hesaplayamazsınız (yalnızca daha sonra, şifrelenmemiş Server seede ulaşırsanız). Server Seed, SHA512 hash algoritması kullanılarak şifrelenir.
Tarayıcınız rastgele bir Client Seed oluşturur. Ancak siz bu client seedi oynamaya başlamadan önce değiştirebilirsiniz ve değiştirmelisiniz. Bu sayede sitenin sizin client seedinizi önceden bilmediğinden emin olursunuz.
Tahmin yaptığınızda Nonce 1 ile başlar. Her yaptığınız tahminden sonra bu nonce değeri 1 artar.
Zar sonucu hesaplanıyor
Şimdi işin nerd kısmına geliyoruz! Bu oyunun son zar sonucuna ulaşmamızı sağlayan 3 adım var.
Adım 1 – Değişkenlerin hashlenmesi
Bu adımda, HMAC’i SHA512/256 algoritması ile hesaplıyoruz. Burada Server Seed bir anahtar (key), Client seed ve Nonce ise veri (data) olarak kullanılıyor ve bir tire (-) ile birleştiriliyor.
Bunu kendin de hesaplayabilirsin; buraya git ve şu kodu çalıştır:
echo hash_hmac('sha512/256', 'your client seed-your nonce', 'server seed');
Sonuç şu olacaktır: 38611068f6936027c4657138536fb5bb8f82a6cb2d883f1acb47cb24013f9e93
Adım 2 – Hashi bir sayıya dönüştürme
2. adımda, bir önceki adımda elde edilen sonucu bir sayıya çeviriyoruz; buraya git ve şu kodu çalıştır:
echo number_format(hexdec('38611068f6936027c4657138536fb5bb8f82a6cb2d883f1acb47cb24013f9e93'), 0, ".", "");
Çıkan sonuç şudur: 25501016943689873370561741542489390377389678092728534236058081515070178721792, oldukça uzun bir sayı.
Adım 3 – Nihai zar değerinin hesaplanması
0 ile 100 arasında ondalıklı bir sayı üretmek istediğimiz için, önce bir önceki adımda elde edilen sayıyı mümkün olan en büyük sayıya böleriz: 1664 (bu, Adım 1’de elde edilen hash dizisinin uzunluğudur).
Son olarak zar şöyle hesaplanır:
zar = 0 + bölünen sayı * 100.
Bu örnekte sonuç: 22.0231.
Ödül nasıl seçilir?
Bir eBox sayfasına gittiğinizde, Şansları göster butonuna tıklayarak kazanma şanslarını görüntüleyebilir, sayfanın en altındaki "Zarları Gör" seçeneğine tıklayarak atılan zarları inceleyebilirsiniz.
Kutudaki her bir ürün için, o ödülü kazanmak için hangi sayıyı atmanız gerektiğini göreceksiniz. Örneğin, 95.54 ile 97.22 arası. Bu, 95.54'ten büyük ve 97.22'ye eşit ya da küçük bir sayı atarsanız o ödülü kazanacağınız anlamına gelir.
Her şeyin adil olduğunu nasıl doğrulayabilirim?
Hile yapılmadığını doğrulamak için, sadece bir önceki maddede anlatılan adımları takip etmen yeterlidir.
Elbette, bir oyunu yalnızca Server Seed’i açıkladıktan sonra doğrulayabilirsin.
Server Seed, Client seed ve Nonce değerlerini sayfanın üst kısmındaki "Adillik (Fairness)" açılır penceresinde (veya mobil cihazdan JemLit'e erişiyorsan sol üst menüde) bulabilirsin.