provably fair दांव कैसे वेरिफाई करें
आपको क्या चाहिए
एक दांव वेरिफाई करने के लिए आपको चाहिए:
- दांव के लिए इस्तेमाल हुआ सर्वर सीड, जो रोटेशन के बाद सामने आता है।
- खेलने से पहले आपको दिखाया गया हैश किया गया सर्वर सीड।
- दांव लगाते समय सक्रिय क्लाइंट सीड।
- दांव का nonce।
- गेम और नतीजे पर असर डालने वाली कोई भी सेटिंग, जैसे plinko की पंक्तियां और जोखिम, या mines की संख्या।
आपको casino की स्कीम के दस्तावेज़ भी चाहिए, क्योंकि implementations अलग होते हैं।
चरण 1: खेलने से पहले commitment दर्ज करें
casino की फेयरनेस या सीड सेटिंग खोलें और हैश किया गया सर्वर सीड कॉपी करें। इसे casino से बाहर सेव करें: एक नोट, एक स्क्रीनशॉट, खुद को भेजा गया मैसेज। यह चरण अक्सर छोड़ दिया जाता है, और यही वह चरण है जो आपको तब बचाता है जब casino बाद में अपनी हिस्ट्री में कोई दूसरा हैश दिखाए।
वहीं रहते हुए क्लाइंट सीड को अपनी किसी चीज़ में बदल दें। इसे लिख लें।
चरण 2: खेलें और अपने दांव नोट करें
सामान्य रूप से खेलें। अगर आप खास दांव वेरिफाई करना चाहते हैं, तो अपनी हिस्ट्री से उनकी bet IDs या nonces नोट करें।
चरण 3: सीड पेयर रोटेट करें
rotate, change seed या ऐसे ही किसी विकल्प पर क्लिक करें। casino पुराना सर्वर सीड सामने लाता है और अगले के लिए नया हैश दिखाता है। आपका nonce रीसेट हो जाता है।
चरण 4: हैश जांचें
सामने आए सर्वर सीड का SHA-256 हैश निकालें और उसे अपने दर्ज किए हैश से मिलाएं। आम स्कीम में हैश सीड पर टेक्स्ट के रूप में, ठीक वैसे ही जैसा दिखता है, निकाला जाता है। हर अक्षर मेल खाना चाहिए।
अगर यह मेल नहीं खाता, तो जांचें कि आपके पास सही सीड पेयर है। अगर है, तो commitment विफल हो गया है, और उस सीड के किसी भी नतीजे पर भरोसा नहीं किया जा सकता।
चरण 5: रैंडम संख्याएं दोबारा निकालें
आम स्कीम bytes इस तरह बनाती है:
HMAC-SHA256(key = serverSeed, message = clientSeed:nonce:round)
- key सर्वर सीड है।
- मैसेज क्लाइंट सीड, nonce और round को colons से जोड़ता है। round 0 से शुरू होता है।
- हर HMAC 32 bytes बनाता है।
bytes को एक बार में चार करके floats में बदला जाता है। bytes b1, b2, b3, b4 के लिए:
float = b1/256 + b2/256^2 + b3/256^3 + b4/256^4
इससे 0 से लेकर 1 तक की एक संख्या मिलती है, 1 शामिल नहीं। एक HMAC से 8 floats मिलते हैं। अगर किसी गेम को ज़्यादा चाहिए, तो round नंबर 1, 2 और आगे बढ़ता है, और bytes नए HMAC से जारी रहते हैं। यही cursor है।
हल किया गया उदाहरण
बनावटी सीड इस्तेमाल करते हुए:
| वैल्यू | उदाहरण |
|---|---|
| सर्वर सीड | 5f3c9a1e7b2d4c6f8a0e1b3d5c7f9a2e4b6d8c0f1a3e5b7d9c2f4a6e8b0d1c3f |
| हैश किया गया सर्वर सीड (सीड टेक्स्ट का SHA-256) | c498ac2d22fbdecd7e5ad767c84166d53b7fe56abe1db19415a8197da745c7de |
| क्लाइंट सीड | my-client-seed |
| Nonce | 0 |
| HMAC मैसेज | my-client-seed:0:0 |
| HMAC-SHA256 आउटपुट | e946af2393f1e064d53af4f70125abe23306dca539cf9f4e88f1c58b5f154d12 |
| पहले चार bytes | 233, 70, 175, 35 |
| पहला float | 0.91123... |
233/256 + 70/65,536 + 175/16,777,216 + 35/4,294,967,296 = पांच दशमलव तक 0.91123।
आप सर्वर सीड और क्लाइंट सीड हमारे वेरिफायर में पेस्ट करके इस टेबल का हैश और dice नतीजा जांच सकते हैं।
चरण 6: गेम फॉर्मूला लागू करें
हर गेम floats को एक नतीजे में बदलता है। ये आम फॉर्मूले हैं; casinos अलग फॉर्मूले इस्तेमाल कर सकते हैं।
Dice
roll = floor(float x 10,001) / 100
इससे 0.00 से 100.00 तक का नतीजा मिलता है। उदाहरण में 0.91123 x 10,001 = 9,113.2, जिसे नीचे की ओर 9,113 किया जाता है, जिससे roll 91.13 मिलता है।
Limbo
एक आम तरीका है:
result = floor((1 - houseEdge) / float x 100) / 100, न्यूनतम 1.00 के साथ।
1% हाउस एज के साथ 0.99 / 0.91123 = 1.0864, जिससे उदाहरण में 1.08x मिलता है। 2.00x का टारगेट हार जाता।
Plinko
हर पंक्ति एक float इस्तेमाल करती है। एक आम नियम है floor(float x 2): 0 का मतलब गेंद बाईं ओर जाती है, 1 का मतलब दाईं ओर। गेंद कहां गिरी यह जानने के लिए दाईं ओर की चालें गिनें, फिर अपनी पंक्तियों की संख्या और जोखिम स्तर के लिए पेआउट टेबल में multiplier देखें। 16 पंक्तियों वाले गेम को 16 floats चाहिए, इसलिए यह HMAC का round 0 और round 1 इस्तेमाल करता है।
Mines
mines का लेआउट 25 टाइल पोज़िशन का shuffle है। एक आम implementation में गेम 0 से 24 तक की पोज़िशन की सूची से शुरू करता है और हर चरण i के लिए बची हुई सूची में index के रूप में floor(float x (25 - i)) चुनता है, उस पोज़िशन को हटाता है और उसे shuffle किए गए क्रम में जोड़ देता है। shuffle किए गए क्रम की पहली N पोज़िशन mines हैं। ज़रूरत के हिसाब से कई HMAC rounds इस्तेमाल होते हैं।
चरण 7: मिलाएं
अपने दोबारा निकाले गए नतीजे को casino के बेट रिकॉर्ड से मिलाएं। dice और limbo के लिए संख्या मिलाएं। plinko के लिए स्लॉट मिलाएं। mines के लिए राउंड के बाद दिखाई गई mines की पोज़िशन मिलाएं।
mismatch को समझना
ज़्यादातर mismatch इनपुट से आते हैं, धोखाधड़ी से नहीं। इस क्रम में जांचें:
- nonce एक से खिसका हुआ. कुछ casinos 0 से शुरू करते हैं, कुछ 1 से।
- गलत क्लाइंट सीड. अगर आपने session के बीच में इसे बदला, तो पहले के दांवों ने पुराना इस्तेमाल किया।
- गलत सीड पेयर. पक्का करें कि सामने आया सर्वर सीड दांव की अवधि का है।
- गेम सेटिंग. plinko की पंक्तियां और जोखिम, mines की संख्या।
- अलग स्कीम. casino अलग मैसेज फॉर्मेट, byte बदलने का तरीका या फॉर्मूला इस्तेमाल कर सकता है। इसके दस्तावेज़ पढ़ें।
अगर सभी इनपुट सही हैं, casino आम स्कीम दस्तावेज़ित करता है, और नतीजा फिर भी मेल नहीं खाता, तो दांव, सीड और दस्तावेज़ों के स्क्रीनशॉट रखें और casino से संपर्क करें। कृपया नीचे दिए फीडबैक फॉर्म से हमें भी जानकारी भेजें।
ध्यान रखने लायक सीमाएं
- वेरिफिकेशन साबित करता है कि नतीजे तय किए गए सीड और फॉर्मूले के अनुसार थे। यह हाउस एज नहीं बदलता।
- यह सिर्फ इस स्कीम पर बने गेम्स पर लागू होता है। थर्ड-पार्टी स्लॉट और लाइव गेम इसके बाहर हैं।
- crash जैसे multiplayer गेम अक्सर आपके सीड के बजाय एक साझा hash chain इस्तेमाल करते हैं। उनके लिए casino के अपने वेरिफिकेशन निर्देश इस्तेमाल करें।
कोड में वेरिफाई करना
अगर आप बिना किसी वेबसाइट के जांचना पसंद करते हैं, तो यह Node.js snippet आम स्कीम लागू करता है। यह ऊपर के हल किए गए उदाहरण के लिए सर्वर सीड का SHA-256 हैश, पहला float और dice roll प्रिंट करता है।
const crypto = require('crypto');
function floats(serverSeed, clientSeed, nonce, count) {
const out = [];
for (let round = 0; out.length < count; round++) {
const h = crypto.createHmac('sha256', serverSeed)
.update(`${clientSeed}:${nonce}:${round}`)
.digest();
for (let i = 0; i < 32 && out.length < count; i += 4) {
out.push(h[i] / 256 + h[i + 1] / 256 ** 2 + h[i + 2] / 256 ** 3 + h[i + 3] / 256 ** 4);
}
}
return out;
}
const serverSeed = '5f3c9a1e7b2d4c6f8a0e1b3d5c7f9a2e4b6d8c0f1a3e5b7d9c2f4a6e8b0d1c3f';
const hash = crypto.createHash('sha256').update(serverSeed).digest('hex');
const [f] = floats(serverSeed, 'my-client-seed', 0, 1);
const dice = Math.floor(f * 10001) / 100;
console.log(hash, f.toFixed(5), dice);
सीड और nonce को अपनी वैल्यू में बदलें। दूसरे गेम्स के लिए ज़्यादा floats मांगें और casino का दस्तावेज़ित फॉर्मूला लागू करें। अगर casino के दस्तावेज़ इस स्कीम से अलग हैं, तो दस्तावेज़ों का पालन करें।
वेरिफिकेशन लॉग रखना
अगर आप नियमित रूप से खेलते हैं, तो हर सीड पेयर के लिए एक आसान लॉग रखें: हैश किया गया सर्वर सीड और जिस तारीख को आपने उसे दर्ज किया, आपका क्लाइंट सीड, सामने आया सर्वर सीड, इस्तेमाल हुए nonces की रेंज, और आपके वेरिफाई किए दांव। इसमें एक मिनट लगता है और अगर कभी विवाद उठाना पड़े तो आपके पास सबूत होता है।