Crash राउंड के दौरान ऑन-चेन क्या होता है?
हर Crash राउंड तीन ऑन-चेन ट्रांज़ैक्शन से बनता है, इसी क्रम में:- कमिट: दांव खुलने से पहले, बैकएंड एक रैंडम 32-बाइट गुप्त वैल्यू बनाता है और उसका SHA-256 हैश ऑन-चेन प्रकाशित करता है (
start_new_roundइंस्ट्रक्शन)। यही कमिट है: इस पल से सिर्फ़ वही सटीक गुप्त वैल्यू राउंड को सेटल कर सकती है। कमिट ट्रांज़ैक्शन केCrashRoundPreparedइवेंट में सार्वजनिक होता है। - दांव: खिलाड़ी अपने दांव लगाते हैं। गुप्त वैल्यू छिपी रहती है; कमिट यह गारंटी देता है कि उसे बदला नहीं जा सकता।
- राउंड की शुरुआत / एंट्रॉपी दर्ज करना: राउंड शुरू होने पर (
start_gameइंस्ट्रक्शन), प्रोग्राम Solana केSlotHashessysvar से सबसे हाल का स्लॉट हैश पढ़ता है और उसे राउंड में सेव करता है। ऐप इस वैल्यू को राउंड का ब्लॉक हैश कहता है। अब क्रैश पॉइंट पूरी तरह तय हो चुका है (यह सेव किए गए स्लॉट हैश और कमिट की गई गुप्त वैल्यू का शुद्ध फ़ंक्शन है), लेकिन जिसे गुप्त वैल्यू नहीं पता, वह अभी इसे निकाल नहीं सकता। यह वैल्यूCrashGameStartedइवेंट में सार्वजनिक होती है। - राउंड चलता है: मल्टीप्लायर चढ़ता है और खिलाड़ी कैश आउट करते हैं।
- रिवील: बैकएंड गुप्त वैल्यू सबमिट करता है (
crashइंस्ट्रक्शन)। प्रोग्राम ऑन-चेन सत्यापित करता है किsha256(secret)कमिट के बराबर है (मेल न खाने पर ट्रांज़ैक्शन फ़ेल हो जाता है), फिर ख़ुद क्रैश पॉइंट निकालता है और राउंड को अंतिम रूप देता है।CrashRoundFinalizedइवेंट गुप्त वैल्यू, स्लॉट हैश और अंतिम क्रैश पॉइंट प्रकाशित करता है।
क्रैश पॉइंट का सटीक फ़ॉर्मूला क्या है?
क्रैश पॉइंट ठीक इस तरह निकाला जाता है (यही वह गणित है जो ऑन-चेन प्रोग्राम चलाता है: पूर्णांक गणित, राउंडिंग का कोई अचंभा नहीं):- जोड़ने का क्रम है पहले blockhash, फिर secret।
Xको SHA-256 आउटपुट के पहले 4 बाइट से big-endian में पढ़ा जाता है।- सभी भाग floor (पूर्णांक) भाग हैं।
max(10000, …)की निचली सीमा का मतलब है कि मल्टीप्लायर कभी 1.00x से नीचे नहीं जाता, औरXपर लगी सीमा बेहद छोटे हर (denominator) को रोकती है।
हल किया गया उदाहरण
X = 0xABCD1234 (2,882,343,476) और मौजूदा 1.5% एज (edge_bps = 150) के साथ:
वितरण कैसा दिखता है
यह फ़ॉर्मूला एकसमानX को क्लासिक क्रैश कर्व में बदल देता है। किसी राउंड के कम से कम मल्टीप्लायर m तक पहुंचने की संभावना लगभग यह है:
क्या गारंटीशुदा है, और क्या नहीं
प्रोग्राम द्वारा लागू:- कमिट ऑन-चेन हो जाने के बाद, ऑपरेटर राउंड की गुप्त वैल्यू नहीं बदल सकता: जिस गुप्त वैल्यू का हैश मेल नहीं खाता, उस पर रिवील ट्रांज़ैक्शन फ़ेल हो जाता है।
- राउंड शुरू होते ही (स्लॉट हैश सेव होते ही), क्रैश पॉइंट तय हो जाता है। जल्दी, देर से या बड़ी संख्या में कैश आउट करने से कुछ नहीं बदलता: नतीजा मल्टीप्लायर के चढ़ना शुरू करने से पहले ही तय हो चुका था।
- क्रैश पॉइंट प्रोग्राम निकालता है, बैकएंड उसे रिपोर्ट नहीं करता। ग़लत वैल्यू ऑन-चेन लिखी ही नहीं जा सकती।
- सत्यापन के लिए ज़रूरी हर चीज़ (कमिट, स्लॉट हैश, गुप्त वैल्यू, अंतिम क्रैश पॉइंट) ऑन-चेन इवेंट्स में स्थायी रूप से प्रकाशित होती है।
- शुरुआत का समय। राउंड शुरू होने से पहले ऑपरेटर को गुप्त वैल्यू पता होती है, और उसका बैकएंड तय करता है कि राउंड-शुरुआत का ट्रांज़ैक्शन कब सबमिट किया जाए। चूंकि हाल के स्लॉट हैश सार्वजनिक होते हैं, वह सैद्धांतिक रूप से संभावित स्लॉट्स के लिए बनने वाला मल्टीप्लायर पहले से निकाल सकता है और शुरुआत का समय ऐसा चुन सकता है कि कौन-सा स्लॉट हैश दर्ज हो, इस पर असर पड़े। यह व्यवस्था इसे रोकती नहीं; बल्कि इसे दिखाई देने योग्य बनाती है: राउंड शुरू होने का समय सार्वजनिक है, और कोई भी व्यवस्थित झुकाव प्रकाशित क्रैश पॉइंट्स के आंकड़ों में दिख जाएगा, जिन्हें कोई भी बड़ी संख्या में दोबारा निकाल सकता है।
- रद्द करना। राउंड शुरू होने के बाद ऑपरेटर को खिलाड़ियों से पहले नतीजा पता होता है, और वह रिवील करने के बजाय किसी प्रतिकूल राउंड को रद्द कर सकता है। इस पर दो सख़्त सीमाएं लागू हैं: रद्द करने पर हर दांव राशि पूरी वापस मिलती है (प्रोग्राम में ज़ब्त करने का कोई रास्ता नहीं है), और हर रद्दीकरण एक सार्वजनिक इवेंट जारी करता है; रद्द करने की आवृत्ति ही ऑन-चेन सुराग है। रद्द करने की सुविधा खोई हुई गुप्त वैल्यू से उबरने के रास्ते के रूप में मौजूद है (उदाहरण के लिए कमिट और रिवील के बीच बैकएंड क्रैश हो जाए), और उम्मीद है कि इसका इस्तेमाल लगभग कभी नहीं होगा।