Ne taahhüt edilir ve ne zaman?
Bir Mines oyunu, aynı anda üç şey yapan tek bir zincir üstü işlemle (mines_start) başlar, siz daha hiçbir kare seçmeden önce:
- Operatörün katkısını taahhüt eder. Backend rastgele 32 baytlık bir
server_seedüretir ve işlem bunun SHA-256 hash’ini, yani taahhüdü saklar. Seed’in kendisi oyun bitene kadar gizli kalır. - Zincirin entropisini kaydeder. Program, Solana’nın
SlotHashessysvar’ından en son slot hash’ini okur ve oyuna kaydeder. - Koşulları dondurur. Kasa avantajı, ödeme tavanı ve iade zaman aşımı oyununuza anlık görüntü olarak kaydedilir; hâlihazırda oynadığınız bir tahtanın fiyatını hiçbir şey değiştiremez.
Mines tahtası nasıl türetilir?
25 kare, 5×5 ızgarada satır satır 0’dan 24’e kadar numaralandırılır (index = row × 5 + column). Tahta 25 bitlik bir maskedir: t biti 1 ise t karesinin altında mayın vardır.
- Hash girdisinin sırası tam olarak şudur: seed, slot hash, kullanıcı hesabı adresi, nonce (8 bayt little-endian), ASCII etiketi
"mines", ardından blok sayacı (8 bayt little-endian, 0’dan başlar). - Her 4 baytlık parça big-endian olarak okunur. Bir blok en fazla 8 çekiliş verir; gerektikçe akış bir sonraki sayaç değeriyle yeniden dolar.
- Reddetmeli örnekleme döngüsü her çekilişi tam olarak tekdüze kılar: karıştırmada tartışılacak bir yanlılık yoktur.
Program hangi ödeme formülünü uygular?
Açtığınız her güvenli kare, kazancınızı hayatta kalma olasılığınızın tam tersiyle çarpar; kasa avantajı yalnızca bir kez uygulanır:
Beklenen getiri, her mayın ve açılış kombinasyonu için
1 − avantaj’dır. Güncel değerler Ücretler ve limitler sayfasında listelenir.
Program sonuçlandırmada neyi uygular?
Sonuçlandırma işlemi (mines_settle) server_seed’i açıklar ve bir sonuç bildirir: açılmış bir kare kümesiyle kazanç alma ya da belirli bir karede batma. Program ardından her şeyi zincir üstünde kontrol eder:
sha256(server_seed), oyun başında saklanan taahhütle aynı olmalıdır; farklı bir seed oyunu sonuçlandıramaz.- Tahta yukarıdaki formülle sıfırdan yeniden türetilir. Açılmış olarak bildirilen ama aslında mayın olan her kare reddedilir; batma karesi olarak bildirilen ama mayın olmayan bir kare reddedilir; aynı zamanda açılmış olarak da bildirilen bir batma karesi reddedilir.
- Çarpan, anlık görüntüsü alınmış avantaj ve gerçek açılış sayınızdan zincir üstünde hesaplanır; böylece ödeme yanlış bildirilemez.
- Sonuçlandırma olayı seed’i, slot hash’ini, mayın maskesinin tamamını, açtığınız kareleri ve sonucu kalıcı olarak yayımlar.
Neler garanti edilir, neler edilmez?
Program tarafından uygulananlar:- Tahta, taahhüt ve kaydedilen slot hash’i sayesinde ilk seçiminizden önce sabitlenir. Mayınlar oyunun ortasında yer değiştiremez.
- Sonuçlandırmada operatör tahta hakkında yalan söyleyemez: yanlış bir seed, güvenli bildirilen bir mayın ya da sahte bir batma, işlemin başarısız olmasına yol açar.
- Başladığınız koşullar (avantaj, ödeme tavanı, zaman aşımı) oyunun sonuna kadar geçerlidir.
- Bahis tutarınız asla kilitli kalamaz: operatör oyunu hiç sonuçlandırmazsa, oyunun zaman aşımından sonra iptali herkes çağırabilir ve bahis tutarınız iade edilir. Normal işleyişte bu noktaya hiç gelmezsiniz: terk edilmiş bir tahtada kazanç, zaman aşımından önce o anki çarpanla alınır (bkz. Mines); böylece yalnızca bahis tutarınızı değil, kazancınızı da korursunuz. İzin gerektirmeyen iptal, operatörün ortadan kaybolduğu durum için alttaki güvencedir.
- Siz oynarken operatör tahtayı bilir. Bu yapısaldır, bu tasarıma özgü bir kusur değildir: kareler zincir dışında anında açılır ve onları açan taraf mayınların nerede olduğunu bilmek zorundadır. Hiçbir rastgelelik şeması bunu ortadan kaldırmaz: VRF ile üretilmiş bir tahta bile, operatör ilk karenizi açtığı anda onun tarafından bilinir. Taahhüdün garanti ettiği şey, bu bilginin tahtayı değiştirmek ya da sonucu yanlış bildirmek için kullanılamayacağıdır.
- Başlangıç zamanlaması. Tahta, oyununuz başladığında kaydedilen slot hash’ine bağlıdır ve başlangıç işlemi backend tarafından gönderilir; bu, diğer oyunlardakiyle aynı zamanlama meselesidir. Bir tahtayı önceden bilmek ancak seçimleriniz tahmin edilebilirse işe yarar; tıkladığınız yerleri değiştirmek, zamanlamaya dayalı tahta seçimini boşa çıkarır.
- İptaller. Operatör devam eden bir oyunu iptal edebilir (ilke olarak kazanmakta olduğunuz bir oyunu da). İptal bahis tutarının tamamını iade eder (el koyma diye bir yol yoktur) ve her zaman herkese açık bir olay yayımlar; böylece iptal sıklığı herkes tarafından zincir üstünde denetlenebilir.
- Her oyun yeni bir seed kullanmalıdır: açıklanmış bir seed herkese açıktır ve yeniden kullanılması bir sonraki tahtayı herkesçe türetilebilir hâle getirir. Program art arda yeniden kullanımı zincir üstünde reddeder; backend ise genel benzersizliği sağlar.
Bir Mines oyununu nasıl doğrularsınız?
Oyununuzun son işlemindeki sonuçlandırma olayı (MinesGameSettled) şunları içerir: server_seed, slothash, user, nonce, mines_count, mines_mask, revealed_mask, bust_tile, multiplier_bps ve is_win. Doğrulamak için:
- Taahhüdü kontrol edin:
sha256(server_seed), oyununuzun başlangıç işleminde (MinesGameStartedolayı) yayımlanancommit_hashile aynı olmalıdır; bu, tahtanın ilk seçiminizden önce kilitlendiğini kanıtlar. - Mayın maskesini yukarıdaki formülle yeniden türetin ve olaydaki
mines_maskile karşılaştırın. - Sonucu maskeye göre kontrol edin:
revealed_mask’in her biti güvenli bir kare olmalı, batma karesi ise bir mayın olmalıdır. - Çarpanı ödeme formülüyle kontrol edin.