क्या कमिट होता है, और कब
Mines का एक गेम एक ही ऑन-चेन ट्रांज़ैक्शन (mines_start) से शुरू होता है, जो आपके कोई भी टाइल चुनने से पहले एक साथ तीन काम करता है:
- ऑपरेटर के हिस्से को कमिट करता है। बैकएंड एक रैंडम 32-बाइट
server_seedबनाता है और ट्रांज़ैक्शन उसका SHA-256 हैश, यानी कमिट, स्टोर करता है। सीड खुद गेम खत्म होने तक छिपा रहता है। - चेन की एंट्रॉपी दर्ज करता है। प्रोग्राम Solana के
SlotHashessysvar से सबसे हाल का स्लॉट हैश पढ़ता है और उसे गेम में स्टोर करता है। - शर्तों को फ़्रीज़ करता है। हाउस एज, पेआउट की सीमा और रिफ़ंड टाइमआउट आपके गेम में स्नैपशॉट के रूप में दर्ज हो जाते हैं; जिस बोर्ड पर आप पहले से खेल रहे हैं, उसकी कीमत कोई बदल नहीं सकता।
Mines का बोर्ड कैसे निकाला जाता है?
5×5 ग्रिड की 25 टाइल्स को पंक्ति-दर-पंक्ति 0 से 24 तक नंबर दिया गया है (index = row × 5 + column)। बोर्ड एक 25-बिट मास्क है: बिट t सेट होने का मतलब है कि टाइल t के नीचे माइन छिपी है।
- हैश इनपुट का क्रम ठीक यही है: सीड, स्लॉट हैश, यूज़र अकाउंट का पता, nonce (8 बाइट little-endian), ASCII टैग
"mines", फिर ब्लॉक काउंटर (8 बाइट little-endian, 0 से शुरू)। - हर 4-बाइट का टुकड़ा big-endian में पढ़ा जाता है। एक ब्लॉक से अधिकतम 8 ड्रॉ मिलते हैं; ज़रूरत पड़ने पर स्ट्रीम अगले काउंटर मान से फिर भर जाती है।
- रिजेक्शन-सैंपलिंग लूप हर ड्रॉ को पूरी तरह समान रूप से वितरित बनाता है: शफ़ल में बहस करने लायक कोई पूर्वाग्रह नहीं है।
प्रोग्राम कौन-सा पेआउट फ़ॉर्मूला लागू करता है?
हर सुरक्षित टाइल खुलने पर आपका कैश आउट आपके बचे रहने की संभावना के सटीक व्युत्क्रम से गुणा होता है, और हाउस एज सिर्फ़ एक बार लगता है:
माइन और खुली टाइल्स के हर संयोजन के लिए अपेक्षित रिटर्न
1 − edge है। मौजूदा मान शुल्क और सीमाएं में दिए गए हैं।
सेटलमेंट के समय प्रोग्राम क्या लागू करता है
सेटलमेंट ट्रांज़ैक्शन (mines_settle) server_seed का खुलासा करता है और एक नतीजे का दावा करता है: खोली गई टाइल्स के एक सेट के साथ कैश आउट, या किसी खास टाइल पर बस्ट। इसके बाद प्रोग्राम सब कुछ ऑन-चेन जांचता है:
sha256(server_seed)गेम की शुरुआत में स्टोर किए गए कमिट के बराबर होना चाहिए; किसी दूसरे सीड से गेम सेटल नहीं हो सकता।- ऊपर दिए फ़ॉर्मूले से बोर्ड शुरू से दोबारा निकाला जाता है। खुली बताई गई कोई टाइल अगर असल में माइन है, तो दावा अस्वीकार होता है; बस्ट बताई गई टाइल अगर माइन नहीं है, तो अस्वीकार होता है; जो बस्ट टाइल खुली हुई भी बताई गई हो, वह भी अस्वीकार होती है।
- मल्टीप्लायर की गणना ऑन-चेन, स्नैपशॉट किए गए एज और आपकी वास्तव में खोली गई टाइल्स की संख्या से होती है, इसलिए पेआउट गलत नहीं बताया जा सकता।
- सेटलमेंट इवेंट सीड, स्लॉट हैश, पूरा माइन मास्क, आपकी खोली गई टाइल्स और नतीजा हमेशा के लिए सार्वजनिक कर देता है।
क्या गारंटी है, और क्या नहीं
प्रोग्राम द्वारा लागू:- कमिट और स्टोर किए गए स्लॉट हैश की वजह से बोर्ड आपके पहले चुनाव से पहले ही तय हो जाता है। गेम के बीच माइन अपनी जगह नहीं बदल सकतीं।
- सेटलमेंट के समय ऑपरेटर बोर्ड के बारे में झूठ नहीं बोल सकता: गलत सीड, माइन को सुरक्षित बताना या नकली बस्ट, इनमें से कुछ भी हो तो ट्रांज़ैक्शन विफल हो जाता है।
- जिन शर्तों (एज, पेआउट की सीमा, टाइमआउट) पर आपने गेम शुरू किया, वही गेम के अंत तक लागू रहती हैं।
- आपकी दांव राशि कभी फंस नहीं सकती: अगर ऑपरेटर कभी सेटल नहीं करता, तो गेम के टाइमआउट के बाद कोई भी कैंसल कॉल कर सकता है, जिससे आपकी दांव राशि वापस मिल जाती है। सामान्य संचालन में यह नौबत कभी नहीं आती: छोड़ा गया बोर्ड टाइमआउट से पहले उसके मौजूदा मल्टीप्लायर पर कैश आउट कर दिया जाता है (देखें Mines), इसलिए आपको सिर्फ़ दांव राशि नहीं, बल्कि अपनी जीत मिलती है। बिना अनुमति वाला कैंसल सबसे नीचे की गारंटी है, उस स्थिति के लिए जब ऑपरेटर मौजूद ही न हो।
- आपके खेलते समय ऑपरेटर बोर्ड जानता है। यह संरचनात्मक है, इस खास डिज़ाइन की कमी नहीं: टाइल्स ऑफ़-चेन तुरंत खोली जाती हैं, और जो उन्हें खोलता है उसे पता होना ही चाहिए कि माइन कहां हैं। कोई भी रैंडमनेस व्यवस्था इसे खत्म नहीं कर सकती: VRF से बना बोर्ड भी, आपकी पहली टाइल खोलते ही ऑपरेटर को पता होगा। कमिट यह गारंटी देता है कि इस जानकारी का इस्तेमाल बोर्ड को बदलने या नतीजे को गलत बताने के लिए नहीं किया जा सकता।
- शुरुआत का समय। बोर्ड उस स्लॉट हैश पर निर्भर है जो आपका गेम शुरू होते समय दर्ज होता है, और शुरुआती ट्रांज़ैक्शन बैकएंड भेजता है; यह वही समय-संबंधी पहलू है जो बाकी गेम्स में भी है। किसी बोर्ड को पहले से जानना तभी काम आता है जब आपके चुनाव अनुमान लगाने लायक हों; अलग-अलग जगह क्लिक करने से समय के आधार पर बोर्ड चुनने की कोशिश नाकाम हो जाती है।
- रद्दीकरण। ऑपरेटर चल रहे गेम को कैंसल कर सकता है (सिद्धांत रूप में उसे भी, जिसे आप जीत रहे हों)। कैंसल करने पर पूरी दांव राशि वापस मिलती है (ज़ब्त करने का कोई रास्ता नहीं है) और हमेशा एक सार्वजनिक इवेंट जारी होता है, इसलिए रद्दीकरण कितनी बार होता है, इसका ऑडिट कोई भी ऑन-चेन कर सकता है।
- हर गेम में नया सीड होना ज़रूरी है: खुलासा किया गया सीड सार्वजनिक होता है, और उसे दोबारा इस्तेमाल करने से अगला बोर्ड सार्वजनिक रूप से निकाला जा सकेगा। प्रोग्राम लगातार दो गेम में एक ही सीड के इस्तेमाल को ऑन-चेन अस्वीकार करता है, और बैकएंड वैश्विक विशिष्टता लागू करता है।
Mines गेम को कैसे सत्यापित करें?
आपके गेम के अंतिम ट्रांज़ैक्शन का सेटलमेंट इवेंट (MinesGameSettled) server_seed, slothash, user, nonce, mines_count, mines_mask, revealed_mask, bust_tile, multiplier_bps और is_win साथ रखता है। सत्यापित करने के लिए:
- कमिट जांचें:
sha256(server_seed)आपके गेम के शुरुआती ट्रांज़ैक्शन (MinesGameStartedइवेंट) में प्रकाशितcommit_hashके बराबर होना चाहिए, जिससे साबित होता है कि बोर्ड आपके पहले चुनाव से पहले लॉक हो चुका था। - ऊपर दिए फ़ॉर्मूले से माइन मास्क दोबारा निकालें और उसे इवेंट के
mines_maskसे मिलाएं। - मास्क से नतीजा जांचें:
revealed_maskका हर बिट एक सुरक्षित टाइल होना चाहिए, और बस्ट टाइल एक माइन होनी चाहिए। - पेआउट फ़ॉर्मूले से मल्टीप्लायर जांचें।