Crash oʻyin natijasini tekshirish: algoritm, xavfsizlik
1) Tekshirishning maqsadi: siz aynan nimani tasdiqlaysiz
Nomuvofiqlik: operator sizning stavkangizdan keyin natijani oʻzgartira olmadi (server sifining xesh kommiti tufayli).
Takrorlanuvchanlik: Kirish ma’lumotlari bilan siz o’yin ko’rsatgan ko’paytiruvchini olasiz.
Protseduraning yaxlitligi: xabar formati, inkrement’nonce’, yaxlitlash qoidasi va «house edge» spetsifikatsiya bo’yicha qat’iy qo’llanilgan.
2) Tekshirish mumkin bo’lmagan ma’lumotlar
1. Server Seed Hash (kommit) - tegishli «Server Seed» dan foydalanilgunga qadar e’lon qilinadi.
2. Server Seed (vaqt tugagach/keyinroq ochiladi).
3. Client Seed (sizning led; o’zingiz berasiz yoki platforma hosil qiladi).
4. Nonce (joriy’Server Seed’dagi stavkalar hisoblagichi).
5. Xeshlash algoritmi (odatda’HMAC-SHA256’yoki’SHA-256’).
6. Xabar formati (masalan:’: ’), aniq ajratuvchilar/registrlar/kodlash.
7. Xesh → koʻpaytirgich mapping formulasi (va yaxlitlash/minimum qoidasi).
3) Tekshirish algoritmi (7 qadam)
1. Kommitni solishtiring:’SHA-256 (ServerSeed)’ni hisoblang va nashr etilgan’ServerSeedHash’bilan solishtiring.
2. Xabarni yigʻing: qatʼiy platforma formatida (masalan,’msg = ClientSeed +’:’+ Nonce’).
3. Raund xeshini hisoblang:
4) Psevdokod (Python/JS ga moslashtirilishi mumkin)
```python
Bu yerga platformaning aniq mapping formulasini stub_mapping ()
import hmac, hashlib, math
def round_hash(server_seed: bytes, client_seed: str, nonce: int) -> bytes:
def take_u_from_hash(h: bytes, k_bits=52) -> float:
def stub_mapping(u: float) -> float:
def verify(server_seed_hex, server_seed_hash_hex, client_seed, nonce, shown_multiplier):
Muhimi:’stub _ mapping’oʻrniga platformaning Fairness boʻlimidagi aniq formulani qoʻllang; aks holda tekshirish noto’g "ri bo’ladi.
5) Xususiy holatlar va suv osti toshlari
Bir turda ikkita stavka: ko’pgina’nonce’platformalarida ular bir xil turda qilingan bo’lsa ham, sizning har bir stavkangizga ko’tariladi (masalan: A →’nonce = 42’stavkasi, B →’nonce = 43’stavkasi). Tarix boʻyicha tekshiring.
’Client Seed’ almashtirilishi:’nonce’almashtirilganda odatda bekor qilinadi (yoki yangi oqim boshlanadi). Platformaning qoidalarini tekshiring.
Batchi’Server Seed’: bitta’Server Seed’bir qator raundlarda ishlaydi, so’ngra yangi kommit nashr etiladi; turli davrdagi urugʻlarni chalkashtirib yubormang.
Yaxlitlash/minimum: ikkinchi belgi bo’yicha nomuvofiqlik - 90% hollarda yaxlitlash/minimum qoidalarida xatolik (masalan, qat’iy 1. 00 × maxsus shartlarda).
Kodlash/bo’shliqlar: ortiqcha bo’shliq/satr tarjimasi, noto’g’ri registr, UTF-8 tekshirishni buzadi.
6) Raundni tezkor tekshirish chek-varaqasi
1. ’SHA-256 (ServerSeed)’ nashr etilgan’ServerSeedHash’bilan mos keladimi?
2. ’message’ va’nonce’formati toʻgʻrimi?
3. Algoritm (’HMAC-SHA256 ’/’ SHA-256’) va kalit/maydon tartibi qat’iy tavsifga muvofiq qo’llanilganmi?
4. Mapping va yaxlitlash hujjatlar bilan bir xil emasmi?
5. Alohida holatlar hisobga olinadimi (kamdan-kam uchraydigan «lahzali krash», kamida 1 ta. 00 ×, kaplar)?
6. Natija o’yin tarixiga to’g’ri keladimi?
7) Nazoratni avtomatlashtirish (amaliyot)
Loglar:’client _ seed’,’nonce’ketma-ketligini, vaqt belgisini, yakuniy koʻpaytmani saqlang.
Sampling: «revil» dan so’ng’Server Seed’ni tasodifiy 20-50 raundli skript bilan haydang; mos kelish foizini aniqlang (100% boʻlishi kerak).
Regressiya: o’yin/provayderning versiyasi o’zgarganda, xuddi shu to’plamni haydab chiqaring.
Eksport: CSV/JSON’ni manba bilan saqlang - bu sizning «audit trekingiz».
8) Xavfsizlik: xatoga yoʻl qoʻymaslik va oʻzini aldashga yoʻl qoʻymaslik
Lokal/oflayn rejimida tekshiring: faqat operatorning veb validatoriga tayanmang; oʻz skriptingizni saqlang.
To’liq ma’lumotlar to’plamisiz raundlarga ishonmang: formula/format yo’q - tekshirish yo’q.
Kuchli’Client Seed’: tasodifiy savollar bering, vaqti-vaqti bilan oʻzgartiring (bu RTPni oshirmaydi, lekin takrorlanuvchanlik haqidagi savollarni istisno qiladi).
TLS/sessiyalar: faqat HTTPS, 2FA orqali kirish, tarix kirish va tushirishni kuzatish.
Hech kimga’Server Seed’bermang: u operator tomonidan bir davrdan keyin e’lon qilinadi; sizning vazifangiz - uni oldindan «olmaslik» ni tekshirish.
9) Namunaviy «yangi kelganlarning xatolari»
Maydonlarning tartibi (’Nonce: ClientSeed’oʻrniga’ClientSeed: Nonce’).
’nonce’ hisobi nol oʻrniga (yoki aksincha).
Platformaning butun raundidagi xesh (global nonce) ishlatilgan, ammo shaxsiy’nonce’kerak.
Qoidalar bo’yicha yaxlitlash ignori (banker’s rounding vs floor/ceil).
Allaqachon ochilgan’Server Seed’bilan emas, balki aktiv bilan solishtirish.
10) operatorda «Qizil bayroqlar»
Davr boshlanishidan oldin hech qanday ochiq Server Seed Hash mavjud emas.
Client Seed yoki nonce koʻrsatish mumkin emas.
Koʻpaytiruvchiga mapping xesh mavjud emas.
Raundlar tarixi tekshirish uchun minimal maʼlumot bermaydi.
Format va algoritm ogohlantirishsiz/spetsifikatsiyalar arxivisiz o’zgartirildi.
11) Avstraliya konteksti (AU)
Valyuta: AUD da yutuqlar/stavkalarni hisobga oling, hikoyalarni yuklab oling (qo’llab-quvvatlash, bahsli masalalar).
Mas’uliyatli o’yin (RG): depozit/vaqt limitlari, tanaffuslar va o’z-o’zini istisno qilish - vijdonli ilovalarda mavjud; ulardan foydalaning.
Platforma amaliyotlari: vijdonli operatorlarda «Fairness/Provably Fair» bloki verifikatsiyaning to’liq tavsifi va namunalarini o’z ichiga oladi; tafsilotlarning yo’qligi - boshqa xizmatni tanlash uchun asos.
12) Jami
Crash-o’yin natijasini tekshirish - bu aniq protsedura:
O’zingizning skriptingizni saqlang, kirish ma’lumotlarini yozing va vaqti-vaqti bilan tasodifiy raundlarni tekshiring. Shunday qilib, siz halollikni so’z bilan emas, balki matematik jihatdan tasdiqlaysiz.
Nomuvofiqlik: operator sizning stavkangizdan keyin natijani oʻzgartira olmadi (server sifining xesh kommiti tufayli).
Takrorlanuvchanlik: Kirish ma’lumotlari bilan siz o’yin ko’rsatgan ko’paytiruvchini olasiz.
Protseduraning yaxlitligi: xabar formati, inkrement’nonce’, yaxlitlash qoidasi va «house edge» spetsifikatsiya bo’yicha qat’iy qo’llanilgan.
2) Tekshirish mumkin bo’lmagan ma’lumotlar
1. Server Seed Hash (kommit) - tegishli «Server Seed» dan foydalanilgunga qadar e’lon qilinadi.
2. Server Seed (vaqt tugagach/keyinroq ochiladi).
3. Client Seed (sizning led; o’zingiz berasiz yoki platforma hosil qiladi).
4. Nonce (joriy’Server Seed’dagi stavkalar hisoblagichi).
5. Xeshlash algoritmi (odatda’HMAC-SHA256’yoki’SHA-256’).
6. Xabar formati (masalan:’
7. Xesh → koʻpaytirgich mapping formulasi (va yaxlitlash/minimum qoidasi).
💡Barcha spetsifikatsiyalar operatorda Fairness/Provably Fair bo’limida bo’lishi kerak. Agar biror narsa bo’lmasa - bu qizil bayroq (§ 10 ga qarang).
3) Tekshirish algoritmi (7 qadam)
1. Kommitni solishtiring:’SHA-256 (ServerSeed)’ni hisoblang va nashr etilgan’ServerSeedHash’bilan solishtiring.
2. Xabarni yigʻing: qatʼiy platforma formatida (masalan,’msg = ClientSeed +’:’+ Nonce’).
3. Raund xeshini hisoblang:
- при `HMAC-SHA256`: `RoundHash = HMAC_SHA256(key=ServerSeed, msg=message)`;
’SHA-256’:’RoundHash = SHA256 (ServerSeed | message)’yoki spetsifikatsiyada koʻrsatilganidek. |
---|---|
4. Tasodifni chiqarib oling: birinchi’k’bitni (ko’pincha 52) → butun’r’, so’ngra’u = r/2 ^ k’ni oling. | |
5. Mapping formulasini qoʻllang:’u’ni koʻpaytirgichga aylantiring (house edge/maxsus keyslar oʻyin hujjatlarida hisobga olinadi). | |
6. O’yin qoidalariga ko’ra yaxlitlang (masalan, 2 belgigacha, kamida 1 ta. 00 × va h.k.). | |
7. Tarixdagi tur natijalari bilan solishtiring. Mos kelish = toʻgʻri halollik. |
4) Psevdokod (Python/JS ga moslashtirilishi mumkin)
```python
Bu yerga platformaning aniq mapping formulasini stub_mapping ()
import hmac, hashlib, math
def round_hash(server_seed: bytes, client_seed: str, nonce: int) -> bytes:
- message = f «{client _ seed}: {nonce}» .encode («utf-8») formatiga qarang
- return hmac. new(server_seed, message, hashlib. sha256). digest () yoki xashlib. sha256(...)
def take_u_from_hash(h: bytes, k_bits=52) -> float:
- Katta bitlarni r sifatida oling
- r = int. from_bytes(h, "big") >> (256 - k_bits)
- return r / (1 << k_bits) u в [0, 1)
def stub_mapping(u: float) -> float:
- ZAGLUSHKA! Oʻyin hujjatlaridan formulani almashtiring
- Masalan, ba’zida crash = floor ((const/( r + 1)) 100 )/100
- va/yoki «house edge» nodir majburlov sifatida 1. 00×. Ushbu stubani haqiqiy tekshirishda ishlatmang.
- return max(1. 00, round(1. 0 / max(1e-12, 1. 0 - u), 2))
def verify(server_seed_hex, server_seed_hash_hex, client_seed, nonce, shown_multiplier):
- server_seed = bytes. fromhex(server_seed_hex)
- 1) Kommit
- assert hashlib. sha256(server_seed). hexdigest() == server_seed_hash_hex. lower()
- 2-3) Xesh raund
- h = round_hash(server_seed, client_seed, nonce)
- 4) u
- u = take_u_from_hash(h)
- 5-6) mapping + yaxlitlash
- calc_mult = stub_mapping(u)
- 7) taqqoslash
- return abs(calc_mult - shown_multiplier) < 1e-9
- ```
Muhimi:’stub _ mapping’oʻrniga platformaning Fairness boʻlimidagi aniq formulani qoʻllang; aks holda tekshirish noto’g "ri bo’ladi.
5) Xususiy holatlar va suv osti toshlari
Bir turda ikkita stavka: ko’pgina’nonce’platformalarida ular bir xil turda qilingan bo’lsa ham, sizning har bir stavkangizga ko’tariladi (masalan: A →’nonce = 42’stavkasi, B →’nonce = 43’stavkasi). Tarix boʻyicha tekshiring.
’Client Seed’ almashtirilishi:’nonce’almashtirilganda odatda bekor qilinadi (yoki yangi oqim boshlanadi). Platformaning qoidalarini tekshiring.
Batchi’Server Seed’: bitta’Server Seed’bir qator raundlarda ishlaydi, so’ngra yangi kommit nashr etiladi; turli davrdagi urugʻlarni chalkashtirib yubormang.
Yaxlitlash/minimum: ikkinchi belgi bo’yicha nomuvofiqlik - 90% hollarda yaxlitlash/minimum qoidalarida xatolik (masalan, qat’iy 1. 00 × maxsus shartlarda).
Kodlash/bo’shliqlar: ortiqcha bo’shliq/satr tarjimasi, noto’g’ri registr, UTF-8 tekshirishni buzadi.
6) Raundni tezkor tekshirish chek-varaqasi
1. ’SHA-256 (ServerSeed)’ nashr etilgan’ServerSeedHash’bilan mos keladimi?
2. ’message’ va’nonce’formati toʻgʻrimi?
3. Algoritm (’HMAC-SHA256 ’/’ SHA-256’) va kalit/maydon tartibi qat’iy tavsifga muvofiq qo’llanilganmi?
4. Mapping va yaxlitlash hujjatlar bilan bir xil emasmi?
5. Alohida holatlar hisobga olinadimi (kamdan-kam uchraydigan «lahzali krash», kamida 1 ta. 00 ×, kaplar)?
6. Natija o’yin tarixiga to’g’ri keladimi?
7) Nazoratni avtomatlashtirish (amaliyot)
Loglar:’client _ seed’,’nonce’ketma-ketligini, vaqt belgisini, yakuniy koʻpaytmani saqlang.
Sampling: «revil» dan so’ng’Server Seed’ni tasodifiy 20-50 raundli skript bilan haydang; mos kelish foizini aniqlang (100% boʻlishi kerak).
Regressiya: o’yin/provayderning versiyasi o’zgarganda, xuddi shu to’plamni haydab chiqaring.
Eksport: CSV/JSON’ni manba bilan saqlang - bu sizning «audit trekingiz».
8) Xavfsizlik: xatoga yoʻl qoʻymaslik va oʻzini aldashga yoʻl qoʻymaslik
Lokal/oflayn rejimida tekshiring: faqat operatorning veb validatoriga tayanmang; oʻz skriptingizni saqlang.
To’liq ma’lumotlar to’plamisiz raundlarga ishonmang: formula/format yo’q - tekshirish yo’q.
Kuchli’Client Seed’: tasodifiy savollar bering, vaqti-vaqti bilan oʻzgartiring (bu RTPni oshirmaydi, lekin takrorlanuvchanlik haqidagi savollarni istisno qiladi).
TLS/sessiyalar: faqat HTTPS, 2FA orqali kirish, tarix kirish va tushirishni kuzatish.
Hech kimga’Server Seed’bermang: u operator tomonidan bir davrdan keyin e’lon qilinadi; sizning vazifangiz - uni oldindan «olmaslik» ni tekshirish.
9) Namunaviy «yangi kelganlarning xatolari»
Maydonlarning tartibi (’Nonce: ClientSeed’oʻrniga’ClientSeed: Nonce’).
’nonce’ hisobi nol oʻrniga (yoki aksincha).
Platformaning butun raundidagi xesh (global nonce) ishlatilgan, ammo shaxsiy’nonce’kerak.
Qoidalar bo’yicha yaxlitlash ignori (banker’s rounding vs floor/ceil).
Allaqachon ochilgan’Server Seed’bilan emas, balki aktiv bilan solishtirish.
10) operatorda «Qizil bayroqlar»
Davr boshlanishidan oldin hech qanday ochiq Server Seed Hash mavjud emas.
Client Seed yoki nonce koʻrsatish mumkin emas.
Koʻpaytiruvchiga mapping xesh mavjud emas.
Raundlar tarixi tekshirish uchun minimal maʼlumot bermaydi.
Format va algoritm ogohlantirishsiz/spetsifikatsiyalar arxivisiz o’zgartirildi.
11) Avstraliya konteksti (AU)
Valyuta: AUD da yutuqlar/stavkalarni hisobga oling, hikoyalarni yuklab oling (qo’llab-quvvatlash, bahsli masalalar).
Mas’uliyatli o’yin (RG): depozit/vaqt limitlari, tanaffuslar va o’z-o’zini istisno qilish - vijdonli ilovalarda mavjud; ulardan foydalaning.
Platforma amaliyotlari: vijdonli operatorlarda «Fairness/Provably Fair» bloki verifikatsiyaning to’liq tavsifi va namunalarini o’z ichiga oladi; tafsilotlarning yo’qligi - boshqa xizmatni tanlash uchun asos.
12) Jami
Crash-o’yin natijasini tekshirish - bu aniq protsedura:
- «Server Seed Hash» kommitasini solishtirish,
- ’RoundHash’ ni’Server Seed’,’Client Seed’,’nonce’va algoritmga tiklash,
- e’lon qilingan mapping formulasini va yaxlitlash qoidalarini qo’llash,
- Tekshiruvingizda va o’yin tarixida bir xil ko’paytirgich.
O’zingizning skriptingizni saqlang, kirish ma’lumotlarini yozing va vaqti-vaqti bilan tasodifiy raundlarni tekshiring. Shunday qilib, siz halollikni so’z bilan emas, balki matematik jihatdan tasdiqlaysiz.