Crash խաղի արդյունքի ստուգումը 'ալգորիթմ, անվտանգություն
1) Ստուգման նպատակը հետևյալն է
Անփոխարինելիությունը 'օպերատորը չէր կարող փոխել արդյունքը ձեր տոկոսադրույքից հետո (սերվերային սիդի հեշի պատճառով)։
Վերարտադրողականություն 'ունենալով մուտքային տվյալներ, դուք ստանում եք նույն բազմապատիկը, որը ցույց է տվել խաղը։
Ընթացակարգի ամբողջականությունը 'հաղորդագրության ձևաչափը, կոդավորումը' nonce ', կլորացման կանոնը և «house edge» -ը կիրառվել են խիստ ճշգրտությամբ։
2) Տվյալները, առանց որոնց ստուգումը անհնար է
1. Server Seed Hash (կոմունիտ) - հրապարակվում է մինչև համապատասխան «Server Seed» օգտագործելը։
2. Server Seed (բացահայտվում է ժամանակի վերջում)։
3. Client Seed (ձեր սիդը; դուք առաջադրանք եք տալիս, թե պլատֆորմը ստեղծում է)։
4. Nonce (ձեր մրցույթի հաշվիչը ընթացիկ «Server Seed»)։
5. Հեշինգի ալգորիթմը (սովորաբար «HMAC-SHA256» կամ «SHA-256»)։
6. Հաղորդագրության ձևաչափը (օրինակ ՝ <
7. Մապինգի հեշի բանաձևը շատ է (և կլորացման կանոն/նվազագույն)։
3) Ստուգման ալգորիթմ (7 քայլ)
1. Հաշվեք «SHA-256 (Windows Seed)» և համեմատեք հրատարակված «Windows SeedHash» -ի հետ։
2. Հավաքեք հաղորդագրություն 'խստորեն պլատֆորմի ձևաչափով (օրինակ ՝ «www.g = ClientSeed +»)։
3. Հաշեք տուրիստական հեշը
при `HMAC-SHA256`: `RoundHash = HMAC_SHA256(key=ServerSeed, msg=message)`;
«SHA-256»: «RoundHash = SHA256 (Windows Seed international)» կամ ինչպես նշված է ճշգրտության մեջ։
4. Վերցրեք պատահականությունը 'վերցրեք առաջին' k 'bit (հաճախ 52) - ամբողջ' r ', ապա' u = r/2 ^ k "։
5. Կիրառեք մապինգի բանաձևը 'փոխակերպեք «u» -ը բազմապատկիչի (house edge/հատուկ դեպքեր հաշվարկվում են խաղի փաստաթղթերով)։
6. Կլորացրեք խաղի կանոններով (օրինակ, մինչև 2 նշաններ առնվազն 1։ 00 ռուբլիներ և այլն)։
7. Համեմատեք պատմության մեջ մրցույթի արդյունքի հետ։ Զուգադիպություն = ճիշտ ազնվություն։
4) Կեղծ (կարող եք հարմարվել Python/JS)
python
Տեղադրեք մապինգի ճշգրիտ բանաձևը ձեր պլատֆորմից 'stub _ mapping () փոխարեն։
import hmac, hashlib, math
def round_hash(server_seed: bytes, client_seed: str, nonce: int) -> bytes:
= f «+ client _ seed +: ww.nonce +» .encode («utf-8») ձևաչափը դիտեք ճշգրտության մեջ։
return hmac. new(server_seed, message, hashlib. sha256). digest () կամ hashlib. sha256(...)
def take_u_from_hash(h: bytes, k_bits=52) -> float:
Վերցրեք k մեծ բիթ որպես ամբողջ r
r = int. from_bytes(h, "big") >> (256 - k_bits)
return r / (1 << k_bits) u в [0, 1)
def stub_mapping(u: float) -> float:
ԽԵՂՃ. Փոխարինեք բանաձևին ձեր խաղի փաստաթղթերից
Օրինակ, երբեմն օգտագործում են տեսակների փոխակերպումը 'crash = floor (const/( r + 1))) 100 )/100
և/կամ «house edge» որպես հազվագյուտ հարկադիր 1։ 00×. Մի օգտագործեք այն իրական ստուգման մեջ։
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) Կոմունիտ
assert hashlib. sha256(server_seed). hexdigest() == server_seed_hash_hex. lower()
2-3) Հեշ
h = round_hash(server_seed, client_seed, nonce)
4) u
u = take_u_from_hash(h)
5-6) mapping + թաղամասը
calc_mult = stub_mapping(u)
7) համեմատություն
return abs(calc_mult - shown_multiplier) < 1e-9
Կարևոր է '«stub _ mapping» -ի փոխարեն կիրառեք ձեր պլատֆորմի Fairness-ից ճշգրիտ բանաձևը։ հակառակ դեպքում ստուգումը սխալ կլինի։
5) Մասնավոր դեպքեր և ստորջրյա քարեր
Երկու դրույքաչափը մեկ փուլում 'շատ պլատֆորմներ «nonce» ավելանում են ձեր յուրաքանչյուր տոկոսադրույքի վրա, նույնիսկ եթե դրանք պատրաստված են նույն փուլում (օրինակ ՝ A' nonce = 42 «, B-ը 'nonce = 43»)։ Ստուգեք պատմությունը։
Փոփոխությունը 'Client Seed': սիդը փոխելիս «nonce» սովորաբար նետվում է (կամ սկսում է նոր հոսքը)։ Ստուգեք ձեր պլատֆորմի կանոնները։
Batchi 'Server Seed': Մեկ 'Server Seed "-ը գործում է մի շարք փուլերի վրա, հետո հրապարակում է նոր կոմունիստ։ մի շփոթեք տարբեր ժամանակահատվածների սերմերը։
Կլորացումը/նվազագույն: Երկրորդ նշանի անհամապատասխանությունը 90% դեպքերում սխալ է կլորացման/նվազագույնի կանոններում (օրինակ, ֆիքսված 1։ 00 ռուբլիներ սպայական պայմանով)։
Կոդավորումը/կոդավորումը 'լրացուցիչ բացթողում/տողի թարգմանություն, սխալ գրանցում, ոչ-UTF-8 կոտրում են ստուգումը։
6) Արագ ստուգման թուղթ
1. Արդյո՞ ք «SHA-256 (Windows Seed)» -ը համընկնում է հրատարակված «Live SeedHash» -ի հետ։
2. Արդյո՞ ք ձևավորված է «nonce» և «nonce» ձևաչափը։
3. Ալգորիթմը («HMAC-SHA256 »/« SHA-256») և դաշտերի բանալին/կարգը կիրառվում են խիստ ճշգրտությամբ։
4. Mapping-ը և թաղամասը նույնական են փաստաթղթերում։
5. Արդյո՞ ք հատուկ դեպքերը հաշվի են առնվում (հազվադեպ «ակնթարթային փլուզում» առնվազն 1։ 00 ռուբլիներ, գլխարկներ)։
6. Արդյունքը համընկնում է խաղի պատմության հետ մինչև կոպեկ։
7) Կառավարման ավտոմատիզացիա (պրակտիկա)
Լոգներ 'պահպանեք ինքներդ ձեզ "client _ seed", հաջորդականությունը' nonce ", ժամանակի նշանը, վերջնական բազմապատիկը։
Սեմպլինգ '«Server Seed» -ից հետո մի ջութակահարեք պատահական 20-50 շրջան։ գրանցեք համընկնումների տոկոսը (պետք է լինի 100%)։
Ռեգրեսիա 'խաղի/պրովայդերի տարբերակները փոխելիս նույն հավաքածուն։- Էքսպորտը 'պահպանեք CSV/JSON արտադրողների հետ, ձեր «աուդիտի ուղին» է։
8) Անվտանգություն 'ինչպես սխալվել և խաբել ինքներդ ձեզ։
Ստուգեք տեղական/օֆլայնը, մի ապավինեք միայն օպերատորի վեբ վարորդին։ պահեք ձեր սեփական ջութակը։- Մի վստահեք շրջադարձերին առանց ամբողջական տվյալների. Չկա բանաձև/ձևաչափ, չկա ստուգում։
- Ուժեղ «Client Seed» 'տվեք պատահական, պարբերաբար փոխեք (դա չի բարձրացնում RTP-ը, բայց բացառում է վերարտադրողականության հարցերը)։
- TFC/նստաշրջաններ 'միայն HTTPS, 2FA, մուտքերի հետևում և պատմության բեռնումը։
- Ոչ մեկին մի փոխանցեք «Server Seed», այն հրատարակվում է վիրահատից հետո։ Ձեր խնդիրն է տապալել, չստանալ այն նախօրոք։
9) Տիպիկ «նորեկների սխալները»
Դաշտերի կարգը շփոթված է («Nonce: ClientSeed» -ի փոխարեն 'ClientSeed: Nonce')։
«nonce» -ի հաշիվը մեկ միավորի փոխարեն (կամ հակառակը)։- Օգտագործվում է ամբողջ ռուսական պլատֆորմի հեշ (global nonce), իսկ ձեր անձնական «nonce» -ի կարիքը։
- Կլորացման անտեսումը կանոններով (banker's rounding vs floor/ceil)։
- Ակտիվ, ոչ թե արդեն բացահայտված «Server Seed» -ի հետ։
10) «Կարմիր դրոշները» օպերատորի մոտ
Չկա հանրային Server Seed Hash-ը մինչև ժամանակահատվածի սկիզբը։- Դուք չեք կարող տեղադրել ձեր Client Seed-ը կամ տեսնել nonce-ը։
- Բացակայում է մապինգի հեշի հանրային բանաձևը։
- Տուրերի պատմությունը նվազագույն տվյալներ չի տալիս։
- Ձևաչափը և ալգորիթմը փոխվում էին առանց ծանուցման/հատուկ արխիվի։
11) Ավստրալական ենթատեքստը (AU)
Արժույթը 'սովորեցրեք շահել/մրցել AUD-ում, պահեք պատմություններ (աջակցություն, հակասական հարցեր)։- Պատասխանատու խաղը (RG) 'ավանդի/ժամանակի սահմանները, դադարը և ինքնազարգացումը հասանելի են բարեխիղճ ծրագրերում։ օգտագործեք դրանք։
- Պլատֆորմային պրակտիկան 'բարեխիղճ օպերատորների մոտ «Fairness/Provably Fox» բլոկը պարունակում է ամբողջական նկարագրություն և ստուգման օրինակներ։ մանրամասների բացակայությունը մեկ այլ ծառայություն ընտրելու պատճառ է։
12) Արդյունքը
Crash խաղի արդյունքի ստուգումը պարզ ընթացակարգ է
«Server Seed Hash»,- «RoundHash» վերականգնումը '«Server Seed», «Client Seed», «nonce» և ալգորիթմ,
- մապինգի և կլորացման կանոնների կիրառումը,
- Ձեր ստուգման և խաղի պատմության մեջ նույնական մեծահասակ։
Պահեք ձեր սեփական ջութակը, տրամաբանեք մուտքային տվյալները և պարբերաբար ստուգեք պատահական փուլերը։ Այդպես դուք հաստատում եք ազնվությունը ոչ թե բառերով, այլ մաթեմատիկորեն։