Çevrimiçi çekilişlerde, bahis sistemlerinde ya da oyunlarda karşılaştığımız "Provably Fair" (Doğrulanabilir Adil) etiketi, çoğu zaman bir kağıt sertifikaya indirgeniyor. Yıllarca kumar makineleri ve oyun sistemleri geliştiren bir mühendis olarak, bu süreci yakından gözlemledim: laboratuvarlar sadece onay veriyor, operatörlerse anında güncelleme yapabiliyor. UVS (Uncloned Verification Standard) ise bu güveni, üçüncü tarafların kağıtlarına değil, herkesin yeniden doğrulayabileceği kanıtlara dayandırıyor.
Kanıtlanabilir Adaletin Ötesinde: UVS’in Temel İlkesi
UVS’in merkezinde, bir çekilişin adaletini doğrulayan deriveTier adlı bir fonksiyon bulunuyor. Bu fonksiyon, sistemin sunduğu kanıtlar üzerinden bir güven seviyesi belirliyor — operatörün iddialarından değil, somut verilerden yola çıkıyor:
- 🔴 Kırmızı: Hiçbir kanıt sunulmamış, sadece sunucu tohumu (server seed) var.
- 🟡 Sarı: Noter onayı, kendi kendine bağlama ya da ilk taahhüdün doğrulanamadığı durumlar.
- 🟢 Yeşil: Nötr bir kayıt defteri imzası, zincirdeki değişmezlik ya da kanıtlanmış ilk taahhütle bağlanan sonuçlar.
Bu sistemde, yeşil ışık operatörün sözüne değil, sunulan kanıtların doğrulanabilirliğine bağlı. Kod, taahhütleri değil, kanıtları değerlendiriyor.
Sınırları Netleştirmek: UVS’in Koruduğu ve Korumadığı Alanlar
UVS’in odak noktası, yayımlanan kuralların, girdilerin ve rastgeleliğin doğru şekilde uygulandığını kanıtlamaktır. Bununla birlikte, sistem operatörlerin girdi manipülasyonunu engellemiyor. Örneğin, çekilişe katılımcı sayısını ya da ödül havuzunu değiştirmek hala mümkün. UVS’in koruduğu, sonuçların hesaplanma sürecinin şeffaf ve yeniden üretilebilir olmasıdır. Bu sınırlamaların açıkça belirtilmesi, sistemin abartılmasını önlüyor.
İki Farklı Mekanizma: Çekilişler ve Etkileşimli Oyunlar
UVS, rastgelelik kaynaklarının farklı davrandığı iki ana senaryoya göre tasarlanmış:
1. uvLottery (Çekilişler ve Gacha Mekanikleri) — 🟢 Seviyesine Ulaşabilir
Bu sistemde, sonuçlar hem sunucu tohumuna hem de dış bir rastgelelik kaynağına (drand ağı) dayanıyor. drand ağı, her 3 saniyede bir yeni bir rastgelelik değeri yayınlayan bir hizmet ve bu değerler, çekilişin adil olmasını sağlıyor. İşleyiş şu şekilde:
combinedSeed = SHA-256(serverSeed : drandDeğeri)- Her katılımcı için bir puan hesaplanır:
puan(id) = SHA-256(combinedSeed : id) - Puanlara göre katılımcılar sıralanır ve ödüller dağıtılır.
Ancak, operatörün rastgelelik değerini değiştirmesini engellemek için, sonuçlar drand ağına bağlanıyor. drand değerleri, belirli bir zaman dilimine göre hesaplanıyor:
round = floor((geçenZaman − genesisZamanı) / 3) + 1🟢 seviyesine ulaşmak için, operatörün ilk taahhüdünün doğrulanması gerekiyor. Bu taahhüt, iki bağımsız noter hizmeti (FreeTSA ve DigiCert) tarafından zaman damgasıyla onaylanıyor. Zaman damgası alındıktan sonra, ilgili drand round’u belirleniyor ve sonuçlar bu round’a bağlanıyor. Bu sayede, operatörün sonuçları manipüle etmesi imkansız hale geliyor.
2. uvGame (Etkileşimli Oyunlar) — Maksimum 🟡 Seviyesi
Etkileşimli oyunlarda, sonuçlar hem operatörün sunucu tohumuna hem de oyuncunun gerçek zamanlı hareketlerine bağlı. Bu tür sistemlerde, dış bir rastgelelik kaynağı kullanılamadığı için sonuçların bağımsız olarak doğrulanması mümkün değil. Bu nedenle, sistem maksimum 🟡 seviyesinde kalıyor. Operatör, oyuncunun hareketlerini kaydederek sonuçları yeniden üretmeye çalışabilir, ancak UVS bu süreci yerel olarak doğrulayabiliyor.
"Uncloned" Katmanı: Tekil Doğrulama Motoru
UVS’in en yenilikçi yanı, "Uncloned" adı verilen katmanında yatıyor. Sistem, her oturum için benzersiz bir WASM motoru oluşturuyor ve bu motor, sadece o oturuma özel olarak çalışıyor. İşleyiş şöyle:
- Kayıt sırasında, sistem
regSeedadı verilen bir tohum oluşturuyor. - Tarayıcıda, bu tohuma dayalı olarak bir WASM modülü oluşturuluyor.
- Modül, deterministik bir LCG (Linear Congruential Generator) algoritmasıyla oluşturuluyor ve her oturum için benzersiz bir hesaplama zinciri oluşturuluyor.
fonksiyon buildWasm(regSeed):
lcg = LCG(regSeed)
n = lcg.aralık(4, 7)
adımlar = []
for i in range(n):
adımlar.append({
shiftOp: SHIFT_ISLEMLERI[lcg.aralık(0, len(SHIFT_ISLEMLERI))],
shiftMiktarı: 8 + lcg.aralık(0, 8),
binOp: IKILI_ISLEMLER[lcg.aralık(0, len(IKILI_ISLEMLER))],
sabitDeger: (lcg.sonraki() | 1) | 0,
})
# WASM bölümlerini oluştur
return {
baytlar: new Uint8Array([0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00, ...])
}Oluşturulan WASM modülü, tarayıcıda çalıştırılıyor ve sonuç, kayıt sırasında oluşturulan modülle karşılaştırılıyor. Bu sayede, operatörün modülü önceden oluşturup sahtekarlık yapması imkansız hale geliyor. Her oturumun ardından, sonuçlar iki noter hizmeti tarafından yeniden zaman damgasıyla onaylanıyor ve zincirde kayıt altına alınıyor.
Mimari ve Uygulama Detayları
UVS sistemi, arka planda Docker konteynerlerinde çalışıyor ve hem oyun kayıtlarını hem de çekiliş sonuçlarını yönetiyor. Sistem, dört farklı programlama dilinde (JavaScript, Python, Java ve C++) referans uygulamalara sahip. Bu uygulamalar, çekilişlerin doğrulanabilirliğini sağlamak için kullanılıyor. Etkileşimli oyunlar içinse, deterministik yeniden oynatma yöntemi kullanılıyor.
UVS’in sunduğu bu şeffaflık ve doğrulama mekanizması, çevrimiçi çekilişlerin ve oyunların geleceğini şekillendirecek bir adım olarak görülüyor. Artık operatörlerin sözlerine değil, kanıtlanabilir verilerine güvenebilirsiniz.
Günümüzde birçok platform, "Provably Fair" etiketini kullanarak kullanıcılara güven vermeyi deniyor. Ancak UVS, bu etiketin gerçek anlamda kanıtlanabilir olmasını sağlıyor. Sistem, herkesin sonuçları yeniden doğrulayabilmesi için tasarlandı ve bu da çevrimiçi şans oyunlarının geleceğinde önemli bir rol oynayabilir.
Yapay zeka özeti
UVS standartı, çevrimiçi çekilişlerdeki adalet iddialarını kağıt sertifikalardan çıkarıyor. Kendiniz doğrulayabileceğiniz bir sistem sunan UVS’in nasıl çalıştığını ve avantajlarını keşfedin.