
स्मार्ट कॉन्ट्रैक्ट और स्मार्ट एकाउंट्स का परिचयो
Hey,
यह ऑनलाइन कोर्स “मास्टरिंग वेब 3 वेव्स के साथ” का मॉड्यूल 3 है।इस मॉड्यूल में हम स्मार्ट कॉन्ट्रैक्ट्स के बारे में बात करते हैं, वे कैसे काम करते हैं और उनका उपयोग कैसे करते हैं यह हमारे Web3 विकेंद्रीकृत एप्लिकेशन — कूपन बाज़ार को लागू करने के लिए।
इस मॉड्यूल के विषय:
3.1 ओवरव्यू
3.2 स्मार्ट कॉन्ट्रैक्ट का परिचय
3.3 स्मार्ट कॉन्ट्रैक्ट्स और स्मार्ट एकाउंट्स वेव्स मे
3.4 सिक्योरिटी इश्यूज और मल्टी सिग्नेचर स्मार्ट एकाउंट्स
3.5 स्मार्ट एकाउंट्स और विकेन्द्रीकृत एप्लीकेशन
Let’s go!
ट्रेडिशनल कॉन्ट्रैक्ट्स कम से कम दो शामिल दलों (प्रतिभागियों) के बीच एक समझौते का प्रतिनिधित्व करते हैं। ये समझौते तीसरे पक्ष के अधिकारी या सरकार द्वारा मान्य और लागू किए जाते हैं। तृतीय-पक्ष संस्थाओं कॉन्ट्रैक्ट्स की शर्तों के सत्यापन को सुनिश्चित करने के लिए महत्वपूर्ण भागीदार हैं, और पर्यावरणीय परिस्थितियों और घटनाओं का मूल्यांकन करने के लिए भी जो अनुबंध समझौते के निष्पादन को प्रभावित कर सकते हैं।
भले ही वे समान टर्म साझा करते हैं, लेकिन स्मार्ट कॉन्ट्रैक्ट्स “पार्टियों के बीच समझौते” की परिभाषा के जैसा कॉन्ट्रैक्ट्स नहीं हैं। एक स्मार्ट कॉन्ट्रैक्ट एक कंप्यूटर प्रोटोकॉल (सोर्स कोड या प्रोग्राम) है जिसे ब्लॉकचेन नेटवर्क जैसे वितरित वातावरण में निष्पादित किया जा सकता है। निष्पादन परिणामों सहित सभी कार्यों को ब्लॉकचेन के भीतर संग्रहीत किया जाता है।
इस परिभाषा में, एक स्मार्ट कॉन्ट्रैक्ट्स पार्टियों के बीच एक कॉन्ट्रैक्ट्स नहीं है, लेकिन स्मार्ट कॉन्ट्रैक्ट्स सोर्स कोड में पूर्वनिर्धारित नियमों के अनुसार, उपयोगकर्ताओं, उपयोगकर्ता और कंप्यूटर या कंप्यूटर और कंप्यूटर के बीच सहयोग का एक प्रोटोकॉल है।
एक स्मार्ट कॉन्ट्रैक्ट कंप्यूटर के लिए प्रोग्राम कोड है। यह विभिन्न चेक और सत्यापन सहित निर्देशों का एक सेट है, डेटा संचालन को पढ़ना और लिखना, डिजिटल एसेट्स के संचालन (जैसे ट्रांसफर, जारी करना, बर्निंग, फ्रीजिंग आदि)।
याद रखें कि Web3 के लिए मुख्य तकनीक ब्लॉकचेन या अधिक सामान्य तरीके से D.L.T (डिस्ट्रीब्यूटेड लेजर टेक्नोलॉजी) है, जिससे स्मार्ट कॉन्ट्रैक्ट्स को एक साथ सैकड़ों मशीनों पर निष्पादित किया जा सकता है।
स्मार्ट कॉन्ट्रैक्ट्स कई दिलचस्प सुविधाएँ प्रदान करते हैं:
कोई मिडलमेन नहीं
डिजिटल एसेट्स के लिए सुरक्षित स्टोरेज
कोड कानून है
डिफ़ॉल्ट बैकअप
मानवीय त्रुटियों से बचाव
भरोसे का एक्सेक्यूशन
ऑटोनोमस एक्सेक्यूशन
आपमें से कुछ ने रिकार्डियन कॉन्ट्रैक्ट के बारे में सुना होगा — 90 के दशक में बनाया गया एक इनोवेशन।
यह ट्रेडिशनल कॉन्ट्रैक्ट्स का एक डिजिटल रूप है। एक रिकार्डियन कॉन्ट्रैक्ट के दो भाग हैं: मानव पठनीय शब्द और मशीन-पठनीय कंपोनेंट्स। डिजिटल सिग्नेचर और ऑपरेशनल ऑटोमैटिशन का इस्तेमाल यहां किया जाता है। स्मार्ट कॉन्ट्रैक्ट्स में गैर-कानूनी अनुपस्थित कानूनी शक्ति की आवश्यकता के कारण, इसकी डिजिटल प्रकृति के बावजूद रिकार्डियन कॉन्ट्रैक्ट्स को अभी भी ट्रेडिशनल कॉन्ट्रैक्ट्स माना जाता है।
रिकार्डियन स्मार्ट कॉन्ट्रैक्ट दोनों का सबसे अच्छा संयोजन है।
अलग-अलग D.L.T प्लेटफार्मों में स्मार्ट कॉन्ट्रैक्ट्स के विकास के लिए अलग-अलग तरीके हैं।
वेव्स स्मार्ट कॉन्ट्रैक्ट्स को दो अलग-अलग प्रकारों द्वारा दर्शाया जाता है: स्मार्ट अकाउंट्स और स्मार्ट एसेट्स। हम इस पाठ्यक्रम में बाद में स्मार्ट एसेट्स के साथ अभ्यास करेंगे।
किसी भी वेव्स अकाउंट को एक विशेष अकाउंट-स्क्रिप्ट को लागू करके स्मार्ट अकाउंट में परिवर्तित किया जा सकता है। अकाउंट-स्क्रिप्ट एक प्रोग्राम कोड है जो कि RIDE लैंग्वेज पर लिखा गया है, जिसमें विभिन्न प्रकार के आउटगोइंग ट्रांसक्शन की अनुमति या खंडन करने वाली शर्तों का एक सेट है।
तकनीकी रूप से वेव्स स्मार्ट कॉन्ट्रैक्ट के क्रिएशन और डिप्लॉयमेंट के कई स्टेजेस हैं:
RIDE कोड में लिखना, कंपाइलेशन, सेट-स्क्रिप्ट ट्रांसक्शन, कम से कम एक नोड द्वारा वेलिडेशन, सभी नोड्स के बीच UTX पूल और अगले ब्लॉक में ट्रांसक्शन स्क्रिप्ट सम्मिलित करना।
और एक्यूरेट ओवरव्यू में वास्तव में कुछ और कदम हैं:
वेव्स IDE RIDE कोड का मान्य करता है
RIDE कोड को base64- फॉर्मेट कम्पेटिबल सिम्बल्स के अनुक्रम में संकलित किया गया है
सेट-स्क्रिप्ट ट्रांसक्शन का उपयोग संकलित कोड को ब्लॉकचैन नोड में भेजने के लिए किया जाता है
डिसेरिएलाइज़ेशन और सिंटेक्स की जाँच, नेम्स और वेरिएबल्स , फंक्शन इनवोकेशन
कॉस्ट कैलकुलेशन, प्रकार और हस्ताक्षर की जाँच
पहले नोड द्वारा जाँच और सत्यापन पूरा होने के बाद सेट-स्क्रिप्ट ट्रांसक्शन को इंटर-नोड्स UTX पूल में पास किया जाता है
अन्य सभी नोड्स प्रदर्शन किए गए डिसेरिएलाइज़ेशन और कम्प्यूटेशनल कॉस्ट स्टेप्स को सत्यापित करते हैं
एक नए ब्लॉक को मान्य करने और ब्लॉकचेन में डालने से पहले माइनर नोड्स डीरेलिएशन और कम्प्यूटेशनल कॉस्ट की जांच करते हैं।
एक नया ब्लॉक प्राप्त करने के बाद सभी नोड्स डीरेलिएशन और कम्प्यूटेशनल कॉस्ट स्टेप्स का प्रदर्शन करते हैं
अब स्क्रिप्ट को सभी नोड्स पर निष्पादित किया जाता है और उस स्मार्ट अकाउंट से सभी आउटगोइंग ट्रांसक्शन के सत्यापन में भाग लेता है
एक स्मार्ट स्क्रिप्ट कुछ शर्तों के आधार पर कुछ निवर्तमान ट्रांसक्शन की अनुमति देती है या इनकार करती है। यह तर्क कई डेटा स्रोतों पर निर्भर करता है: अकाउंट डेटा, ट्रांसक्शन डेटा, ब्लॉकचैन स्टेट और डेटा।
एक स्टैण्डर्ड अकाउंट और एक स्मार्ट अकाउंट के बीच क्या अंतर है?
एक स्टैण्डर्ड अकाउंट में केवल एक हस्ताक्षरकर्ता होता है, जो सभी निवर्तमान ट्रांसक्शन पर हस्ताक्षर करने के लिए अपनी निजी कुंजी और सीड का उपयोग कर सकता है। कोई भी अन्य उपयोगकर्ता अपने डिजिटल हस्ताक्षर का उपयोग उन डिफ़ॉल्ट अकाउंट से ट्रांसक्शन पर हस्ताक्षर करने के लिए नहीं कर सकता है जो इस उपयोगकर्ता से संबंधित नहीं हैं। ऐलिस के खाते से बॉब लेनदेन नहीं कर सकता है और इसके विपरीत।
लेकिन ऐलिस एक स्टैण्डर्ड अकाउंट से एक स्मार्ट अकाउंट बनाकर स्क्रिप्ट को अपने खाते में सेट कर सकती है। ऐसा करने के लिए एलिस को पहले सेट-स्क्रिप्ट ट्रांसक्शन पर हस्ताक्षर करना चाहिए।
जब एक डिफ़ॉल्ट अकाउंट एक स्मार्ट अकाउंट बन जाता है, तो कोई भी स्मार्ट स्क्रिप्ट तर्क के आधार पर कुछ निश्चित आउटगोइंग ट्रांसक्शन पर हस्ताक्षर करने में सक्षम होता है।
प्रत्येक कूपन — एक डिजिटल एसेट है जो आपूर्तिकर्ता से विशेष छूट का प्रतिनिधित्व करता है।
“कूपन बाज़ार” एक बाज़ार है। यह आपूर्तिकर्ताओं और ग्राहकों के बीच मिलान, भुगतान संचालन और वितरण सेवाएं प्रदान करता है।
आपूर्तिकर्ताओं के लिए कार्यक्षमता:
एक आपूर्तिकर्ता रजिस्ट्रेशन सिस्टम
आइटम्स मैनेजमेंट
खरीद की पुष्टि
ग्राहकों के लिए कार्यक्षमता:
कूपन ढूंढें
कूपन खरीदे
डेटा ट्रांसक्शन का उपयोग करके एक विकेंद्रीकृत डेटा स्टोरेज के साथ काम करने के लिए, हम आपूर्तिकर्ताओं के लिए डेटा ट्रांसक्श की अनुमति देते हैं और सेट-स्क्रिप्ट ट्रांसक्श को छोड़कर अन्य सभी ट्रांसक्श से इनकार करते हैं। भविष्य में स्मार्ट अकाउंट लॉजिक को अपडेट करने के लिए सेट स्क्रिप्ट ट्रांसक्श की आवश्यकता है। कृपया, इस वल्नेरेबिलिटी पर ध्यान दें: अब, कोई भी उपयोगकर्ता आउटगोइंग ट्रांसक्श पर हस्ताक्षर करने में सक्षम है, यहां तक कि स्मार्ट अकाउंट लॉजिक भी अपडेट कर सकता है।
कोई भी इस अकाउंट के अकाउंट स्क्रिप्ट को बदलने और उसके बाद सभी धन वापस लेने में सक्षम है।
स्क्रिप्ट को बदलने / अपडेट करने के लिए केवल dApp ओनर को अनुमति देने के लिए, हमें sigVerify फ़ंक्शन का उपयोग करना चाहिए। इस फ़ंक्शन का उपयोग करके हम यह जांच सकते हैं कि हस्ताक्षर नामक एक अर्रे से, जिसे सबूत कहा जाता है, डीएप के ओनर का।
हम Verify() फ़ंक्शन के भीतर एक मिलान में sigVerify फ़ंक्शन का उपयोग कर सकते हैं। जब डीएप ओनर ट्रांसक्श पर हस्ताक्षर करता है तो sigVerify एक बूलियन TRUE वैल्यू मान लेता है।
आइए स्मार्ट एकाउंट्स के उपयोग के लिए शास्त्रीय उदाहरण देखें जो डिजिटल एसेट्स स्टोरेज, एक मल्टी सिग्नेचर एकाउंट (मल्टी -सिग्न) के लिए सुरक्षा बढ़ाने की अनुमति देता है।
उदाहरण के लिए, हमारे आपूर्तिकर्ता कई संस्थापकों या प्रशासकों (हमारे मामले में तीन) से मिलकर छोटे व्यवसाय हैं। मल्टीगिग खाते से धन निकालने के लिए आउटगोइंग ट्रांसफर ट्रांसक्शन करने के लिए कम से कम दो में से तीन हस्ताक्षर आवश्यक हैं।
यह मल्टी-सिग खाता उस ऑनलाइन स्टोर को हैक से भी बचाता है जब किसी ओनर की निजी कुंजी या सीड से छेड़छाड़ या चोरी की गई हो।
कम से कम दो हस्ताक्षरों वाले मल्टी सिग्नेचर वाले एकाउंट को लागू करने के लिए हमें वैलिड अकाउंट हस्ताक्षरों की सार्वजनिक-कुंजी घोषित करनी चाहिए। प्रतिभागियों को आदेशों के एक अलग सेट में ट्रांसक्शन पर हस्ताक्षर करने में सक्षम होना चाहिए, इसलिए सभी संयोजनों की जांच की जानी चाहिए।
एक ट्रांसक्शन पर हस्ताक्षर करने के लिए कई बार हमें एक ही फ़ंक्शन के माध्यम से कई बार ट्रांसक्शन की जावास्क्रिप्ट ऑब्जेक्ट को पास करना चाहिए। उदाहरण के लिए हमारे मामले में एक ट्रांसफर फंक्शन के माध्यम से।
विकेंद्रीकृत ऍप्लिकेशन्स के बारे में बात करते हैं!
हमारे वेब 3 एप्लिकेशन में, आपूर्तिकर्ता को खरीद की पुष्टि करने में सक्षम होना चाहिए। आइए देखें कि इसे कैसे स्वचालित किया जाए।
स्मार्ट कॉन्ट्रैक्ट्स का उपयोग करके हम विकेंद्रीकृत Web3 ऍप्लिकेशन्स का निर्माण कर सकते हैं।
“विकेंद्रीकृत एप्लीकेशन (डीएप) एक कंप्यूटर के बजाय पी-2-पी कंप्यूटर नेटवर्क पर चलने वाले एप्लीकेशन हैं। पी-2-पी नेटवर्क के आगमन के बाद से डीएप मौजूद हैं। वे एक प्रकार का सॉफ्टवेयर प्रोग्राम है जो इंटरनेट पर एक तरह से मौजूद है जिसे किसी एक एंटिटी द्वारा नियंत्रित नहीं किया जाता है। बिटटोरेंट, पॉपकॉर्न टाइम, बिटमैसेज, टॉर, सभी पारंपरिक डीएप हैं जो पी-2-पी नेटवर्क पर चलते हैं, लेकिन ब्लॉकचेन पर नहीं (जो एक विशिष्ट प्रकार का पी-2-पी नेटवर्क है)। ”
लेकिन हमारी परिभाषा में: dApp our ब्लॉकचेन सक्षम ’वेबसाइटें हैं, जहां एक स्मार्ट कॉन्ट्रैक्ट है जो उन्हें ब्लॉकचेन से जुड़ने की अनुमति देता है। इसे समझने का सबसे आसान तरीका यह है कि पारंपरिक वेबसाइटें कैसे संचालित होती हैं, जैसे कि हमारे “कूपन बाज़ार” डीएप के साथ है जो वेव्स के ब्लॉकचेन और वेव्स कीपर ब्राउज़र एक्सटेंशन को एकीकृत करता है।
डेवलपर्स के लिए डीएप विकास प्रक्रिया को आसान बनाने के लिए RIDE- वेव्स स्मार्ट कॉन्ट्रैक्ट लैंग्वेज में दो प्रकार के फंक्शन्स हैं:
हम पहले से ही परिचित हैं @Verifier.
@Callable फंक्शन्स को बाहर से उपयोगकर्ताओं द्वारा बुलाया जा सकता है (न केवल dApp निर्माता)। निष्पादन के परिणामस्वरूप, नई जानकारी डीएप डेटा स्टोरेज (की-वैल्यू) में डाली जा सकती है या अपडेट की जा सकती है और / या फंड को डीएप बैलेंस से कॉलर या डीएप के लॉजिक के आधार पर किसी अन्य पते पर स्थानांतरित किया जा सकता है।
हमारे मामले में एक डीएप (dApp) और एक स्मार्ट अकाउंट एक ही एंटिटी है।
उपयोगकर्ता @Callable फंक्शन्स को कॉल करके इन्वोकेशन नामक प्रक्रिया में सक्षम हैं। @Callable फ़ंक्शन का उपयोग invokeTransaction के साथ किया जा सकता है। InvokeTransaction पैरामीटर से प्राप्त जानकारी का उपयोग स्मार्ट कॉन्ट्रैक्ट स्क्रिप्ट के अंदर भी किया जा सकता है, उदाहरण के लिए, कुछ भुगतान जानकारी, जिसमें राशि और भुगतान मुद्रा (टोकन) शामिल हैं।
कूपन बाज़ार उदाहरण में, हम ग्राहकों से खरीद और आपूर्तिकर्ताओं को कूपन-खरीद की पुष्टि करने के लिए एक purchase() फ़ंक्शन बनाने जा रहे हैं।
इसके लिए, आइटम की कीमतें डीएप की-वैल्यू स्टोरेज (कुंजी: आइटम_ए_कोपोन_प्राइस) में संग्रहीत की जानी चाहिए।
इसके बाद हम getInteger() फ़ंक्शन का उपयोग करके आइटम की कीमतें निकाल सकते हैं।
एक ग्राहक को कूपन खरीदने के लिए सटीक राशि का भुगतान करना चाहिए अन्यथा स्मार्ट कॉन्ट्रैक्ट त्रुटि विवरण के साथ एक अपवाद उत्पन्न करेगा।
जैसा कि आप देख सकते हैं, purchase() फ़ंक्शन के निष्पादन के बाद एक खरीद स्वचालित रूप से पुष्टि की जाएगी।
सभी रिकॉर्ड डीएप की-वैल्यू (key-value) स्टोरेज में संग्रहीत किए जाते हैं। यह डेटा WriteSet() फ़ंक्शन का उपयोग करके लिखा गया है। स्मार्ट कॉन्ट्रैक्ट निष्पादन के दौरान इस डेटा को पढ़ और फिर से लिख सकता है।
@Callable फ़ंक्शन — purchase() को कॉल करने के लिए हमें एक नए प्रकार के ट्रांसक्शन और इसके व्राप्पेर का जावास्क्रिप्ट में उपयोग करना चाहिए — invokeScript()।
हम आर्ग्स (args) ऐरे और भुगतान विवरण में किसी भी की-वैल्यू (key-value) पैरामीटर का उपयोग कर सकते हैं। यह निर्दिष्ट करने के लिए कि किस फ़ंक्शन को निष्पादित किया जाएगा हमें @Callable फ़ंक्शन के नाम का उपयोग करना चाहिए और सार्वजनिक पता डीएप अकाउंट के निर्दिष्ट करना चाहिए।
इसलिए ये स्मार्ट कॉन्ट्रैक्ट्स और वेव्स में इसके कार्यान्वयन के बुनियादी पहलू हैं।
हम आपको “कोड चैलेंज” के साथ शुभकामनाएं देते हैं!
Enjoy!
इस मॉड्यूल के विषय:
स्मार्ट कॉन्ट्रैक्ट का परिचय
स्मार्ट कॉन्ट्रैक्ट्स और स्मार्ट एकाउंट्स वेव्स मे
सिक्योरिटी इश्यूज और मल्टी सिग्नेचर स्मार्ट एकाउंट्स
स्मार्ट एकाउंट्स और विकेन्द्रीकृत एप्लीकेशन