दस्तावेज़

कॉन्ट्रैक्ट: यह कैसे और क्यों काम करता है

FAIRDRUM के सभी फंड और सभी नियम Solana नेटवर्क के एक ही प्रोग्राम में हैं — स्मार्ट कॉन्ट्रैक्ट में। साइट केवल उसे कमांड भेजती है और जवाब दिखाती है। नीचे बताया गया है कि कॉन्ट्रैक्ट क्या रखता है, कौन-से कमांड समझता है, रैंडम नंबर से नतीजा कैसे बनता है और एडमिन क्या कर सकता है और क्या नहीं।

कॉन्ट्रैक्ट क्या है और कहाँ है

स्मार्ट कॉन्ट्रैक्ट एक प्रोग्राम है जिसे प्रोजेक्ट का सर्वर नहीं, बल्कि Solana नेटवर्क के नोड चलाते हैं। इसका कोड सबके लिए एक जैसा है, और हर कार्रवाई एक सार्वजनिक लेनदेन है। FAIRDRUM का कॉन्ट्रैक्ट Rust में Anchor लाइब्रेरी के साथ लिखा गया है; इसका सोर्स कोड खुला है।

जब साइट कॉन्ट्रैक्ट से जुड़ जाएगी, प्रोग्राम का पता यहाँ दिखेगा।

एक अहम नतीजा: अगर fairdrum.to साइट गायब भी हो जाए, तो खिलाड़ियों के फंड कॉन्ट्रैक्ट में ही रहेंगे, और उन्हें ऐसे किसी भी प्रोग्राम से निकाला जा सकेगा जो आपके वॉलेट के हस्ताक्षर के साथ निकासी का कमांड भेज सके।

कॉन्ट्रैक्ट क्या रखता है

  • तिजोरी। रैप्ड SOL का एक खाता, जिसे केवल प्रोग्राम ख़ुद चला सकता है। सब कुछ इसी में है: खिलाड़ियों के बैलेंस, इनाम बैंक, जैकपॉट, रिज़र्व और एडमिन का वह हिस्सा जो अभी तक नहीं लिया गया।
  • खेल का साझा खाता। इस बात का रिकॉर्ड कि तिजोरी की रकम कैसे बँटी है: इनाम बैंक, जैकपॉट, मिनी जैकपॉट, सुपर जैकपॉट, सीड रिज़र्व, एडमिन का हिस्सा, जैकपॉट की शुरुआती रकमें, खेलों के अनुसार राउंड की गिनती।
  • खिलाड़ी का खाता। register कमांड से बनता है, जिसे साइट पहले टॉप-अप के साथ भेजती है, और वॉलेट के पते से जुड़ा होता है: गेम बैलेंस, आख़िरी टॉप-अप का समय, अधूरा राउंड, जैकपॉट का बकाया हिस्सा।
  • सत्र का खाता (अगर «बिना हस्ताक्षर का खेल» चालू है): अस्थायी कुंजी, अवधि और बाज़ी की सीमा।

हिसाब इस तरह बना है कि सभी बैलेंस और गुल्लकों का जोड़ तिजोरी की रकम के बराबर रहे। टेस्ट दसियों हज़ार रैंडम कार्रवाइयों में से हर एक के बाद इस बराबरी को जाँचता है।

कॉन्ट्रैक्ट कौन-से कमांड समझता है

कमांडकौन चला सकता हैक्या करता है
registerखिलाड़ीखिलाड़ी का खाता बनाता है। साइट इसे पहले टॉप-अप के साथ भेजती है।
depositखिलाड़ीगेम बैलेंस का टॉप-अप। समय दर्ज करता है: निकासी तक के 12 घंटे इसी से गिने जाते हैं।
withdrawखिलाड़ीअपने वॉलेट में निकासी। आख़िरी टॉप-अप के बाद 12 घंटे बीतने तक अस्वीकार होती है।
spin_commitखिलाड़ी या उसकी सत्र कुंजीबाज़ी: बैलेंस से राउंड की रकम काटता है, खेल और उस समय लागू संभावनाएँ दर्ज करता है, ओरेकल से रैंडम संख्या माँगता है।
spin_settleकोई भीनिपटान: ओरेकल की संख्या पढ़ता है, भुगतान निकालता है और उसे खिलाड़ी के खाते में जमा करता है। इसे कोई भी चला सकता है — इससे नतीजा नहीं बदलता।
spin_expireकोई भीउस राउंड को बंद करता है जिसका निपटान 20 मिनट में नहीं हुआ। ओरेकल ने जवाब नहीं दिया — बाज़ी पूरी की पूरी खिलाड़ी को लौटती है। ओरेकल ने जवाब दिया और राउंड सील है — जैकपॉट का ड्रॉ किए बिना सामान्य इनाम चुकाता है।
spin_sealकोई भीराउंड को सील करता है: बाज़ी वाले ब्लॉक का हैश तब तक दर्ज करता है, जब तक वह उपलब्ध है (लगभग 3.5 मिनट)। इसकी ज़रूरत तभी पड़ती है जब ओरेकल इससे ज़्यादा देर में जवाब दे; आमतौर पर इसे प्रहरी सेवा कॉल करती है। जिस राउंड का समय पर न निपटान हुआ, न वह सील हुआ, वह बिना नतीजे के बंद होता है।
skip_nonceखिलाड़ीअगर अनुरोध का पता पहले से भरा निकले, तो रैंडमनेस के अगले अनुरोध का नंबर आगे खिसकाता है।
session_open / session_closeखिलाड़ीअस्थायी कुंजी को अवधि और सीमा के भीतर बाज़ी लगाने की अनुमति देता है; यह कुंजी न निकासी कर सकती है, न टॉप-अप।
donateकोई भीजैकपॉट के सीड रिज़र्व में SOL डालता है। इसका उलटा कमांड नहीं है।
set_jackpot_startsएडमिनजैकपॉट और सुपर जैकपॉट की नई शुरुआती रकमें तय करता है; ये 24 घंटे बाद लागू होती हैं।
rescale_poolsएडमिनसीड रिज़र्व का एक हिस्सा खेलों के इनाम बैंक में ले जाता है। केवल इसी दिशा में; जैकपॉट में नहीं ले जाया जा सकता — वे जीत के बाद रिज़र्व से अपने आप भरते हैं।
set_pausedएडमिननई बाज़ियाँ लेना रोकता या फिर शुरू करता है — ओरेकल में गड़बड़ी की स्थिति के लिए। पहले लग चुकी बाज़ियों का निपटान होता है, भुगतान और निकासी सामान्य रूप से चलते हैं।
set_guardian / guard_pauseएडमिनएडमिन एक पहरेदार नियुक्त करता है — यह प्रहरी सेवा की कुंजी है, जो सिर्फ़ एक काम कर सकती है: ओरेकल के जवाब देना बंद करने पर नई बाज़ियाँ लेना रोकना। रोक केवल एडमिन हटा सकता है।
propose_dev_authority / accept_dev_authorityएडमिनएडमिन के अधिकार दूसरी कुंजी को दो चरणों में सौंपना: मौजूदा कुंजी नई कुंजी का नाम देती है, नई कुंजी ख़ुद पुष्टि करती है।
roll_epoch / checkinकोई भीसेवा कमांड: साप्ताहिक आँकड़े और दिन का निशान अपडेट करते हैं। फंड नहीं हिलाते।
claim_devएडमिनएडमिन का जमा हुआ हिस्सा निकालता है — और केवल वही।
initialize / fund_poolsएडमिनएक बार की शुरुआत। initialize खाते बनाता है (प्रोग्राम को अपडेट करने के अधिकार का धारक हस्ताक्षर करता है); fund_pools एक ही बार डाले गए शुरुआती बैंक को गुल्लकों में दर्ज करता है, और उससे ऊपर की अतिरिक्त रकम को अलग पंक्ति में, जिसे एडमिन promo_pay कमांड से निकाल सकता है।

ऐसा कोई कमांड कोड में नहीं है जो इनाम बैंक, जैकपॉट या खिलाड़ियों के बैलेंस एडमिन को भेजे।

राउंड के चरण

  1. बाज़ी। spin_commit कमांड आपके बैलेंस से राउंड की रकम काटता है और उसी लेनदेन में ORAO ओरेकल के पास रैंडम संख्या का अनुरोध बनाता है। अनुरोध का पता आपके वॉलेट और राउंड के नंबर से निकलता है, इसलिए उसकी जगह किसी और का अनुरोध नहीं रखा जा सकता।
  2. संख्या। ORAO के कई स्वतंत्र नोड रैंडम संख्या पर हस्ताक्षर करते हैं और उसे नेटवर्क में दर्ज करते हैं। इस दर्ज होने से पहले उसे कोई नहीं जानता: न आप, न प्रोजेक्ट, न कोई अकेला नोड।
  3. निपटान। spin_settle कमांड ओरेकल के रिकॉर्ड से संख्या पढ़ता है, जाँचता है कि यह ठीक आपके राउंड का अनुरोध है, और भुगतान निकालता है। साइट इसे ख़ुद भेजती है; अगर पेज बंद है, तो यह प्रोजेक्ट का ड्यूटी प्रोग्राम करेगा या आप अगली बार आने पर।
  4. दिखावट। पत्ते, माइन्स, रॉकेट, रत्न — पहले से निकाले गए भुगतान को दिखाने का तरीक़ा हैं। खेल में आपके क्लिक का उस पर असर नहीं पड़ता।

नतीजा पहले से जानना और उसमें हेरफेर करना क्यों संभव नहीं। राउंड की अंतिम संख्या ओरेकल की संख्या है, जिसे उस ब्लॉक के हैश के साथ मिलाया गया है जिसमें बाज़ी दर्ज हुई। बाज़ी के समय यह हैश अभी मौजूद ही नहीं होता, और ओरेकल की संख्या बाद में और तीसरे पक्ष से आती है: नतीजे का हिसाब पहले से कोई नहीं लगा सकता — न खिलाड़ी, न प्रोजेक्ट, न ख़ुद ओरेकल। खेल, जैकपॉट की शुरुआती रकमें और इनाम की ऊपरी सीमा बाज़ी के समय दर्ज हो जाती हैं, और हिसाब का सूत्र खुले कोड में है। देर से हुआ निपटान कभी समय पर हुए निपटान से ज़्यादा फ़ायदेमंद नहीं होता। नियम केवल प्रोग्राम का कोड बदलकर बदले जा सकते हैं, और यह सबको दिखता है (एडमिन वाला खंड देखें)।

रैंडम संख्या से नतीजा कैसे बनता है

एक राउंड यानी 0.01 SOL की 1 से 100 बाज़ियाँ (व्हील पर 1000 तक)। ओरेकल की संख्या हर बाज़ी के लिए एक स्वतंत्र रैंडम मान में खुलती है, और हर बाज़ी के लिए कॉन्ट्रैक्ट बारी-बारी से इन सवालों का जवाब देता है:

  1. सुपर जैकपॉट, जैकपॉट, मिनी जैकपॉट? हर गुल्लक की संभावना उसमें बाज़ी के योगदान को गुल्लक की शुरुआती रकम से भाग देने के बराबर है। गुल्लक का ड्रॉ तभी होता है जब उसमें शुरुआती रकम का कम से कम 25% हो।
  2. खेल का इनाम? हर खेल की अपनी इनाम की संभावना और वज़न वाले छह स्तरों की अपनी तालिका है। उदाहरण के लिए, व्हील पर 10% बाज़ियों में इनाम निकलता है। सभी खेलों की तालिकाएँ उनके पेजों पर दिखाई गई हैं।
  3. «फिर से स्पिन»? 11.6% संभावना से बाज़ी इनाम बैंक के ख़र्च पर मुफ़्त में दोहराई जाती है।
  4. नहीं तो बाज़ी बिना इनाम की है। वह किसी भी दूसरी बाज़ी की तरह ही बँटती है: इनाम बैंक, जैकपॉट और एडमिन का हिस्सा।

खेलों की तालिकाएँ अलग हैं, पर उनके अनुसार अपेक्षित भुगतान एक जैसा है (प्रतिशत के सौवें हिस्सों तक की सटीकता से; जब इनाम बैंक 40 SOL या उससे ज़्यादा हो और इनाम ऊपरी सीमा से न टकराएँ): सामान्य इनामों के रूप में बाज़ी का लगभग 77.5%, और «फिर से स्पिन» के दोहरावों के साथ — भुगतान की गई बाज़ियों का लगभग 88%। इस बराबरी को कंपाइलर जाँचता है: अगर किसी खेल का अपेक्षित मान व्हील से ज़्यादा निकले, या आधे प्रतिशत से ज़्यादा कम, तो प्रोग्राम बनेगा ही नहीं।

कॉन्ट्रैक्ट हर बाज़ी को कहाँ रखता है

कहांभुगतान की गई बाज़ी का हिस्साकिसलिए
इनाम बैंक≈88%सभी खेलों के सामान्य इनाम
जैकपॉट, मिनी जैकपॉट, सुपर जैकपॉट और सीड2%तीन साझा गुल्लकें
एडमिन10%प्रोजेक्ट की आय; और कोई नहीं

कोड में हिस्से हर पूरी की गई बाज़ी से लिखे गए हैं, मुफ़्त दोहरावों सहित, इसलिए वहाँ 8.84% और 1.77% लिखा है: भुगतान की गई बाज़ियों के हिसाब से यह औसतन 10% और 2% होता है।

सीमा वाले नियम और उनकी ज़रूरत

  • एक इनाम — इनाम बैंक के चौथाई हिस्से से ज़्यादा नहीं। कॉन्ट्रैक्ट अपने पास मौजूद रकम से ज़्यादा का वादा नहीं कर सकता, और एक बड़ी जीत बाक़ी खिलाड़ियों के लिए बैंक को ख़ाली नहीं करती। जो रकम नहीं दी गई, वह बैंक में रहती है।
  • निकासी आख़िरी टॉप-अप के 12 घंटे बाद। यह नियम सबके लिए एक जैसा है और स्थिरांक के रूप में लिखा है: इसे केवल प्रोग्राम के नए संस्करण से बदला जा सकता है।
  • जैकपॉट की शुरुआती रकमें 24 घंटे की देरी से बदलती हैं। राउंड की संभावनाएँ बाज़ी के समय तय हो जाती हैं, इसलिए उन्हें «पहले से लगी बाज़ी के हिसाब से» बदला नहीं जा सकता।
  • निपटान के लिए 20 मिनट। अगर ओरेकल ने जवाब नहीं दिया, तो बाज़ी पूरी की पूरी खिलाड़ी को लौटती है: जब तक संख्या नहीं है, नतीजा कोई नहीं जानता, इसलिए इस तरह हार से बचा नहीं जा सकता। अगर ओरेकल ने जवाब दिया पर निपटान में देर हुई, तो सामान्य इनाम चुकाए जाते हैं, पर इस राउंड में जैकपॉट का ड्रॉ नहीं होता। तिजोरी की सुरक्षा। हर भुगतान से पहले और हर निपटान के बाद कॉन्ट्रैक्ट जाँचता है कि तिजोरी में उससे कम रकम नहीं है, जितनी उसे खिलाड़ियों और गुल्लकों को देनी है; वरना कार्रवाई अस्वीकार हो जाती है। पहरेदार। अगर ओरेकल जवाब देना बंद कर दे, तो नई बाज़ियाँ लेना अपने-आप रुक जाता है; निपटान और निकासी चलते रहते हैं।
  • जैकपॉट किस्तों में दिया जाता है: विजेता को गुल्लक का 95% मिलता है, उसमें से 20% तुरंत और फिर हर हफ़्ते 8%। बकाया हिस्सा विजेता के खाते में दर्ज रहता है।
  • हर खिलाड़ी का एक ही अधूरा राउंड। जब तक राउंड का निपटान नहीं होता, नई बाज़ी स्वीकार नहीं होती।

एडमिन क्या कर सकता है और क्या नहीं

कर सकता है

  • अपना हिस्सा लेना — भुगतान की गई बाज़ियों का 10%;
  • रिज़र्व में SOL डालना और उन्हें रिज़र्व से इनाम बैंक में ले जाना;
  • वह अतिरिक्त रकम लेना जो शुरुआत के समय तिजोरी में शुरुआती बैंक से ऊपर निकली;
  • जैकपॉट की शुरुआती रकमें बदलना — देरी के साथ और तय सीमाओं के भीतर;
  • ओरेकल के जवाब न देने पर नई बाज़ियाँ लेना रोकना, और अपने अधिकार दूसरी कुंजी को सौंपना।

नहीं कर सकता

  • इनाम बैंक, जैकपॉट, रिज़र्व या खिलाड़ियों के बैलेंस निकालना (खिलाड़ी के रूप में वह सबके जैसी शर्तों पर ही जीतता है);
  • इनाम की तालिकाएँ, खेलों की इनाम की संभावना और बाज़ी के हिस्से बदलना: ये कोड के स्थिरांक हैं;
  • राउंड की रैंडम संख्या बाज़ी से पहले जानना या उसे चुनना;
  • लग चुकी बाज़ियों का निपटान या निकासी रोकना: रोक केवल नई बाज़ियों पर लागू होती है।

ईमानदार चेतावनी। प्रोग्राम में अपडेट करने का अधिकार है: जब तक वह वापस नहीं लिया जाता, उसका धारक कोड को नए संस्करण से बदल सकता है, और तब ऊपर कही गई हर बात नए कोड पर लागू होगी। इस अधिकार की स्थिति और हर अपडेट Solana एक्सप्लोरर में दिखता है। कॉन्ट्रैक्ट का स्वतंत्र ऑडिट नहीं हुआ है।

इसे किससे जाँचा गया है

  • कॉन्ट्रैक्ट के टेस्ट: हर खेल पर एडमिन का हिस्सा 10%, 50 SOL के बैंक पर सभी खेलों की मिलती-जुलती वापसी, बैंक के चौथाई का नियम और बाज़ी के समय की इनाम की ऊपरी सीमा, निकासी लॉक, शुरुआती रकमों का देरी से बदलना, देर से हुआ निपटान समय पर हुए निपटान से ज़्यादा फ़ायदेमंद नहीं।
  • फंड के संरक्षण की जाँच: दसियों हज़ार रैंडम कार्रवाइयाँ, हर एक के बाद तिजोरी की रकम का बैलेंसों और गुल्लकों के जोड़ से मिलान किया जाता है।
  • लंबे रन: हर खेल पर बीस-बीस लाख बाज़ियाँ — खिलाड़ियों को कितना दिया गया, एडमिन को कितना मिला।
  • Solana के लोकल नोड पर असली लेनदेन: टॉप-अप, समय से पहले निकासी का अस्वीकार होना, रिज़र्व में रकम डालना, शुरुआती रकमों का बदलना।
  • साइट के टेस्ट: साइट संभावनाएँ उन्हीं सूत्रों से निकालती है जिनसे कॉन्ट्रैक्ट, और उन नमूनों से मिलान करती है जो कॉन्ट्रैक्ट ने दर्ज किए हैं।

क्या जाँचा नहीं गया और क्या नहीं किया गया, यह बिना लाग-लपेट के «FAIRDRUM क्यों» पेज पर गिनाया गया है। किसी भी राउंड को ख़ुद कैसे जाँचें — «राउंड जाँचें» पेज पर।

कॉन्ट्रैक्ट के पैरामीटर एक तालिका में

अकेली बाज़ी
0.01 SOL
राउंड
खेलों में 100 बाज़ियों तक, व्हील पर 1,000 तक
खेल (मोड)
16
«फिर से स्पिन» की संभावना
11.6%
एक इनाम की ऊपरी सीमा
इनाम बैंक का 1/4
सबसे छोटी शुरुआती रकम
जैकपॉट 0.2 SOL, सुपर जैकपॉट 2 SOL
मिनी जैकपॉट
जैकपॉट के 1/10 से शुरू होता है
जैकपॉट के विजेता को
95% · 5% सुपर जैकपॉट में जाता है
सुपर जैकपॉट के विजेता को
90%
निकासी लॉक
आख़िरी टॉप-अप के 12 घंटे बाद
राउंड के निपटान की समय-सीमा
नेटवर्क के 3,000 स्लॉट, लगभग 20 मिनट
नेटवर्क और ओरेकल शुल्क
हर राउंड पर 0.005 SOL, प्रोजेक्ट नहीं लेता