Ի՞ նչ է Provably Fox-ը և ինչպես ստուգել խաղի ազնվությունը
Ի՞ նչ է Provably Fox (PF)
Provably Fox-ը մի արձանագրություն է, որը թույլ է տալիս կրիպտոգրաֆիկորեն ստուգել, որ մրցույթի արդյունքը պատահական էր և չէր կարող փոխարինվել վիրահատից հետո։
Գաղափարն այն է, որ սկզբում հրապարակվում է (թաքնված server seed), ապա դրույքաչափից հետո բացահայտվում է վրեժխնդրություն (server seed), և յուրաքանչյուր ոք կարող է կրճատել հեշը և վերարտադրել RNG-ն ՝ հաշվի առնելով խաղացողի կլիենտը և անջատիչները։
Հիմնական արձանագրություն ՝ commit nobet reveal
1. Commit: Մինչև փուլերի սկիզբը սերվերը ստեղծում է պատահական «server _ seed» և հրապարակում է նրա հեշը
commit = SHA-256(server_seed salt )//կամ Keccak-256
Կոմունիտը կարող է բերել պատմության/բլոկչեյնի/ամսագիր։
2. Տոկոսադրույքը 'խաղացողը ընտրում է կամ հաստատում է իր «client _ seed» (UI-ից կամ իր սեփական), ուղարկում է տոկոսադրույքը։
client_seed, roundId, nonce
3. Reveal: փակվելուց հետո սերվերը բացահայտում է «server _ seed» (և «salt»), որպեսզի բոլորը կարողանան ստուգել
SHA-256(server_seed salt) = = = commit//ամբողջականության ստուգում
4. RNG 'պատահականության թիվը դետերմինացված է և վերարտադրված
rng = HMAC-SHA256(key=server_seed, msg=client_seed roundId nonce)
//կամ rng = SHA-256 (server _ seed = SHA-256 (serv client_seed roundId nonce)
5. Mapping-ը արդյունքի մեջ 'մենք վերածում ենք «rng» խաղի միջակայքում առանց խաղերի (տե՛ ս ներքևում)։
Ինչպե՞ ս ստանալ թիվը առանց կոդերի (bias-free)
Սխալ է վերցնել 'rng% N' - սա տալիս է մոդուլային լուծույթ, եթե 2 ^ K-ը հակիրճ N. Ճիշտ է 'rejportsampling։
pseudo
//rng _ bytes = 32 բայթ hash www.uint25x = uint256 (rng _ bytes)
limit = floor(2^256 / N) N while x >= limit:
rng _ bytes = SHA-256 (rng _ bytes )//« խառնել »կրկին դետերմինացված x = uint256 (rng _ bytes)
result = x % N
Այսպիսով, մենք ստանում ենք հավասարաչափ բաշխում N-ով (ռուլետկա, թմբուկի խորհրդանիշներ և այլն)։
Մինի-օրինակ (խաղացողի հետադարձ հավատացումը)
Ենթադրենք
Server _ seed = «b2c6... e9 »//բացահայտվում է կոդավորումից հետո (hex/utf8)
client _ seed = «my-client-seed »/ընտրվել է ինձ roundID =« R-2025-10-17-001 »
nonce = 42 commit = «c9a1... f3 »//opubl. նախօրոք
1) Ստուգել կոմունիտը
Հաշվեք 'SHA-256 (server _ seed) "և համոզվեք, որ համընկնում է" commit "-ի հետ։
2) Դետերմինացված RNG
Հաշվեք
rng = HMAC-SHA256(key=server_seed, msg= client_seed ":" roundId ":" nonce)
3) Վերափոխման արդյունքը
Ռուլետկայի համար (37 թվեր) NN = 37, օգտագործել rejultsampling և վերցնել «x% 37»։
Արցունքների համար, օգտագործեք մի քանի RNG հատվածներ, որպեսզի որոշեն թմբուկները/նիշերը ըստ բաշխման աղյուսակի։
4) Սայթաքել պատմության արդյունքով
Կայքը պետք է ցույց տա նույն մուտքերը, որոնք օգտագործվել են հաշվարկում '«server _ seed», «client _ seed», «roundId», «nonce», «hom Algo», «rngalgo», «mappingVersion»։
Այլընտրանքը/07: VRF (Verifiable Randox Function)
Կոմունիտի փոխարեն օպերատորը կարող է (կամ ավելացված) օգտագործել VRF։
1. Խելացի պայմանագիրը կամ հանրային ֆորումը պահանջում է պրովայդերից «VRF (seed)»։
2. Այն հրատարակվում է «(random, prof)»։
3. Յուրաքանչյուրը կարող է ստուգել «proof» նույն հանրային VRF-ի հիմնական զույգը։
4. Հաջորդը նույն քայլերն են RNG-ի մապինգի արդյունքը։
Պլյուսներ 'ավելի քիչ վստահություն օպերատորի նկատմամբ։ Մինուսները 'կախվածությունը VRF-պրովայդերից/շղթայից և հնարավոր արժեքը։
Ինչպես կազինոն պետք է ներդնի PF ճիշտ
Պայմանագիրը (PF տվյալների պայմանագիր)
Դաշտերը ռուսական պատմության մեջ
`serverSeedHash`, `serverSeedReveal`, `clientSeed`, `roundId`, `nonce`, `hashAlgo`, `rngAlgo`, `mappingVer`, `proofUrl` (опц.) , `calcVer`.
Արժեքները WORM-պահեստում (immutable), ժամանակի շտամներով (UTC)։
Սիդերի գեներացիան
«Server _ seed» -ը ստեղծվում է PRNG (OS CSPRNG/HSM)։- Նստատեղերը երբեք չպետք է կրկնվեն շարքերի միջև (ռոտացիա)։
- «client _ seed» - ընտրվում է խաղացողի կողմից կամ ստեղծվում է տեսահոլովակի վրա և հաստատվում է։
Կոմունիստների հրապարակումը
Համայնքները հասանելի են մինչև 108 (պատմությունը, RFC, on-chain-kakorn)։
Լոտների համար կարող եք օգտագործել mercley-ծառը 'արմատային ամենօրյա հրատարակմամբ։
Բացահայտումը (reveal)
Արդյունքի հրապարակումից առաջ «server _ seed» -ը բացահայտվում և տրամաբանվում է։- Մի նստատեղում մի շարք փուլերի համար բացահայտումը շարքի վերջից հետո (նախօրոք նշեք քաղաքականությունը)։
Թափանցիկ մապինգ
Մապինգի ալգորիթմի տարբերակը («mappingVer») ամրագրված է։- Ցանկացած փոփոխություն («mappingVer »/« rngAlgo») միայն անոնսի և նոր կոմունիտների շարքի հետ է։
Աուդիտ և վեճեր
Հում մուտքեր + հաշվարկների ձայնագրություն։ բանավեճում ստեղծվում է զեկույց 'RNG www.mapping wwww.ru-ի մուտքերը։
Սթրիմ/Մոսկվա 'պահել CV/RFID իրադարձությունների ծանր խարիսխը, տեսահոլովակը WORM-ում։
Ինչպե՞ ս կարող է խաղացողը ստուգել ազնվությունը (չեկ թերթ)
1. Բացեք մրցույթի պատմությունը և պատճենեք '«www.SeeedReveal», «clientSeed», «roundId», «nonce», «hig Algo», «rngalgo», «mappingVer»։
2. Համարեք հեշը 'SeedReveal' և համեմատեք «www.SeedHash» -ի հետ։
3. Հաշվեք RNG-ը նշված ալգորիթմով (HMAC/Hash + մուտքեր)։
4. Կիրառեք «անպաշտպան» մապինգը (rejw.sampling) արդյունքների քանակով։
5. Համոզվեք, որ արդյունքը համընկնում է ցուցադրվածների հետ։
6. Եթե հայտարարված է VRF-ը '108' proof "(" Verify "կոճակը կամ անկախ ջութակը/բլոկային էքսպլերը)։
Տիպիկ սխալներ (anti-pattern)
"rng% N 'առանց rejportsampling-ի, տեղայնացված հավանականությունները։- Թաքնված կամ փոխվող «client _ seed» (ստեղծվում է առանց խաղացողի մասնակցության)։
- «Server _ seed» -ի վերարտադրումը տոկոսադրույքից հետո (կոմունիտը փոխվում է հետևի թվից)։
- Ալգորիթմների անթափանց փոփոխությունները առանց վարկածի/հրապարակման։
- Նստատեղերի խոհարար շարքերի միջև։
- WORM/ժամանակի շտամների բացակայությունը չի կարող ապացուցել իրադարձությունների կարգը։
- PF-ի և բիզնեսի տրամաբանության խառնուրդը (օրինակ, բոնուսը կիրառվել է այնպես, որ փոխում է ելույթի տարածքը, բայց դա չի նկարագրվում «mappingVer»)։
FAQ (կարճ)
Հնարավո՞ ր է արդյոք ստուգել արցունքները, ոչ միայն ղեկը։- Այո։ PF-ն օգտագործվում է ընտրությունների հաջորդականության համար (օրինակ, թմբուկի վրա խորհրդանիշի ինդեքսը)։ Կարևոր է, որ հավանականության աղյուսակները և RNG-ի կարդալու կարգը մեկնաբանվեն։
- Ոչ, եթե կոմունիտը հրապարակվեց մինչև տոկոսադրույքը։ Այն ամրագրում է «server _ seed» և չի տալիս փոխարինել այն հետևի թվին։
- Որպեսզի հնարավորություն չլինի «վերափոխել» սիդը շարքի մեջ։ Դա թույլատրելի է, եթե համայնքը նախապես հրապարակվում է, իսկ բացահայտման քաղաքականությունը թափանցիկ է։
Ձևերի մինի-հանրաքվե
Հեշի 'SHA-256 կամ Keccak-256։
RNG: HMAC-SHA256 (սերվերային սիդը որպես բանալին) կամ SHA-256-ը։
Ցուցանիշներ ՝ «roundID» (UTC-նամականիշ + խաղը + rement), «nonce» (հաշվարկիչ սերիայում)։
Версии: `rngAlgo=HMAC-SHA256@1`, `mappingVer=roulette. v2`, `calcVer=wallet-7. 2`.
PF ներդրման չեկի ցուցակ օպերատորի համար
Կրիպտոգրաֆիա և սիդներ
- CSPRNG/HSM; յուրահատուկ «server _ seed», փաստաթղթավորված նավարկություն։
- «client _ seed» - խաղացողի ղեկավարած, պահպանվում է պատմության մեջ։
Հրապարակումներ և պահեստներ
- Համայնքներ մինչև 2019 թվականը, պատմության/ռուսական հրատարակությունների/խարիսխների հասանելիությունը։
- WORM պահեստ, UTC շտամներ, mercley-batch մասշտաբի համար։
Ալգորիթմներ
- RNG և mapping առանց մրցույթի; տարբերակումը 'rnGalgo/mappingVer'։
- Սկրիտ/էջ «Ստուգել ազնվությունը» (բաց-source դեղին)։
Մոսկվան և հիբրիդը
- CV/RFID/RFID/փուլեր/, ամսագիրը «երբ փակեցին պատուհանը»։
- Վեճի ընթացակարգերը (մուտքերի զեկույցը արդյունք է, հղումները համայնքներին/VRF)։
Անվտանգություն և աուդիտ
- PF արձանագրության անկախ աուդիտ, bag-bounti։
- Որոշումների կարգախոսները անփոփոխ են. Վերարտադրողական թեստեր։
Provably Fox-ը վերածում է "հավատացեք մեզ" "։ Կոմունիտից/ռևիլից կամ VRF-ից, դետերմինացված RNG-ը և ճիշտ mappings առանց պարամետրերի դառնում է վերարտադրված և ստուգված։ Խաղացողի համար դա թափանցիկությունն ու վստահությունն է։ Օպերատորի համար ավելի քիչ բանավեճեր են, ավելի ուժեղ բրենդը և կարգավորողների պահանջներին համապատասխանելը։ Ամենակարևորը կարգապահությունն է 'նախապես հրապարակել, տեղադրել ալգորիթմների տարբերակները, պահել ապացույցները անփոփոխ և տալ օգտագործողին պարզ ստուգման գործիք։