स्मार्ट कॉन्ट्रॅक्ट्स अपग्रेड करणे
इथेरियमवरील स्मार्ट कॉन्ट्रॅक्ट्स हे स्वयंचलितपणे कार्यान्वित होणारे प्रोग्राम्स आहेत जे इथेरियम व्हर्च्युअल मशीन (EVM) मध्ये चालतात. हे प्रोग्राम्स डिझाइननुसार अपरिवर्तनीय असतात, ज्यामुळे कॉन्ट्रॅक्टची प्रस्थापना झाल्यानंतर बिझनेस लॉजिकमध्ये कोणतेही अपडेट्स करण्यास प्रतिबंध होतो.
स्मार्ट कॉन्ट्रॅक्ट्सची विश्वासहीनता, विकेंद्रीकरण आणि सुरक्षिततेसाठी अपरिवर्तनीयता आवश्यक असली तरी, काही प्रकरणांमध्ये ती एक त्रुटी असू शकते. उदाहरणार्थ, अपरिवर्तनीय कोडमुळे डेव्हलपर्सना असुरक्षित कॉन्ट्रॅक्ट्स दुरुस्त करणे अशक्य होऊ शकते.
तथापि, स्मार्ट कॉन्ट्रॅक्ट्स सुधारण्यासाठी वाढलेल्या संशोधनामुळे अनेक अपग्रेड पॅटर्न सादर केले गेले आहेत. हे अपग्रेड पॅटर्न डेव्हलपर्सना बिझनेस लॉजिक वेगवेगळ्या कॉन्ट्रॅक्ट्समध्ये ठेवून स्मार्ट कॉन्ट्रॅक्ट्स अपग्रेड करण्यास (अपरिवर्तनीयता राखून) सक्षम करतात.
पूर्वतयारी
तुम्हाला स्मार्ट कॉन्ट्रॅक्ट्स, स्मार्ट कॉन्ट्रॅक्टची रचना आणि इथेरियम व्हर्च्युअल मशीन (EVM) ची चांगली समज असावी. या मार्गदर्शकामध्ये असेही गृहीत धरले आहे की वाचकांना स्मार्ट कॉन्ट्रॅक्ट्स प्रोग्रामिंगचे ज्ञान आहे.
स्मार्ट कॉन्ट्रॅक्ट अपग्रेड म्हणजे काय?
स्मार्ट कॉन्ट्रॅक्ट अपग्रेडमध्ये कॉन्ट्रॅक्टची स्थिती राखून स्मार्ट कॉन्ट्रॅक्टचे बिझनेस लॉजिक बदलणे समाविष्ट असते. हे स्पष्ट करणे महत्त्वाचे आहे की अपग्रेडेबिलिटी (अपग्रेड करण्याची क्षमता) आणि म्युटेबिलिटी (परिवर्तनीयता) समान नाहीत, विशेषतः स्मार्ट कॉन्ट्रॅक्ट्सच्या संदर्भात.
तुम्ही अद्याप इथेरियम नेटवर्कवरील पत्त्यावर प्रस्थापित केलेला प्रोग्राम बदलू शकत नाही. परंतु जेव्हा वापरकर्ते स्मार्ट कॉन्ट्रॅक्टशी संवाद साधतात तेव्हा कार्यान्वित होणारा कोड तुम्ही बदलू शकता.
हे खालील पद्धतींद्वारे केले जाऊ शकते:
-
स्मार्ट कॉन्ट्रॅक्टच्या अनेक आवृत्त्या तयार करणे आणि जुन्या कॉन्ट्रॅक्टमधून कॉन्ट्रॅक्टच्या नवीन उदाहरणामध्ये स्थिती (म्हणजेच डेटा) स्थलांतरित करणे.
-
बिझनेस लॉजिक आणि स्थिती संचयित करण्यासाठी स्वतंत्र कॉन्ट्रॅक्ट्स तयार करणे.
-
अपरिवर्तनीय प्रॉक्सी कॉन्ट्रॅक्टमधून बदलण्यायोग्य लॉजिक कॉन्ट्रॅक्टमध्ये फंक्शन कॉल्स प्रतिनिधी करण्यासाठी प्रॉक्सी पॅटर्न वापरणे.
-
एक अपरिवर्तनीय मुख्य कॉन्ट्रॅक्ट तयार करणे जे विशिष्ट फंक्शन्स कार्यान्वित करण्यासाठी लवचिक सॅटेलाइट कॉन्ट्रॅक्ट्सशी संवाद साधते आणि त्यांच्यावर अवलंबून असते.
-
प्रॉक्सी कॉन्ट्रॅक्टमधून लॉजिक कॉन्ट्रॅक्ट्समध्ये फंक्शन कॉल्स प्रतिनिधी करण्यासाठी डायमंड पॅटर्न वापरणे.
अपग्रेड यंत्रणा #1: कॉन्ट्रॅक्ट स्थलांतर
कॉन्ट्रॅक्ट स्थलांतर हे व्हर्जनिंगवर आधारित आहे—एकाच सॉफ्टवेअरच्या अद्वितीय स्थिती तयार करणे आणि व्यवस्थापित करणे ही कल्पना. कॉन्ट्रॅक्ट स्थलांतरामध्ये विद्यमान स्मार्ट कॉन्ट्रॅक्टचे नवीन उदाहरण प्रस्थापित करणे आणि स्टोरेज आणि शिल्लक नवीन कॉन्ट्रॅक्टमध्ये हस्तांतरित करणे समाविष्ट आहे.
नव्याने प्रस्थापित केलेल्या कॉन्ट्रॅक्टमध्ये रिक्त स्टोरेज असेल, ज्यामुळे तुम्हाला जुन्या कॉन्ट्रॅक्टमधून डेटा पुनर्प्राप्त करता येईल आणि तो नवीन अंमलबजावणीमध्ये लिहिता येईल. त्यानंतर, नवीन पत्ता प्रतिबिंबित करण्यासाठी तुम्हाला जुन्या कॉन्ट्रॅक्टशी संवाद साधणाऱ्या सर्व कॉन्ट्रॅक्ट्सना अपडेट करावे लागेल.
कॉन्ट्रॅक्ट स्थलांतरातील शेवटची पायरी म्हणजे वापरकर्त्यांना नवीन कॉन्ट्रॅक्ट वापरण्यासाठी वळवणे. नवीन कॉन्ट्रॅक्ट आवृत्ती वापरकर्त्यांची शिल्लक आणि पत्ते राखून ठेवेल, ज्यामुळे अपरिवर्तनीयता जतन केली जाते. जर ते टोकन-आधारित कॉन्ट्रॅक्ट असेल, तर तुम्हाला जुने कॉन्ट्रॅक्ट टाकून देण्यासाठी आणि नवीन कॉन्ट्रॅक्ट वापरण्यासाठी एक्सचेंजेसशी संपर्क साधावा लागेल.
वापरकर्त्यांचे संवाद न मोडता स्मार्ट कॉन्ट्रॅक्ट्स अपग्रेड करण्यासाठी कॉन्ट्रॅक्ट स्थलांतर हा तुलनेने सोपा आणि सुरक्षित उपाय आहे. तथापि, वापरकर्त्यांचे स्टोरेज आणि शिल्लक नवीन कॉन्ट्रॅक्टमध्ये मॅन्युअली स्थलांतरित करणे वेळखाऊ आहे आणि त्यासाठी जास्त गॅस खर्च येऊ शकतो.
कॉन्ट्रॅक्ट स्थलांतराबद्दल अधिक. (opens in a new tab)
अपग्रेड यंत्रणा #2: डेटा पृथक्करण
स्मार्ट कॉन्ट्रॅक्ट्स अपग्रेड करण्याची दुसरी पद्धत म्हणजे बिझनेस लॉजिक आणि डेटा स्टोरेज स्वतंत्र कॉन्ट्रॅक्ट्समध्ये वेगळे करणे. याचा अर्थ वापरकर्ते लॉजिक कॉन्ट्रॅक्टशी संवाद साधतात, तर डेटा स्टोरेज कॉन्ट्रॅक्टमध्ये संचयित केला जातो.
जेव्हा वापरकर्ते ॲप्लिकेशनशी संवाद साधतात तेव्हा कार्यान्वित होणारा कोड लॉजिक कॉन्ट्रॅक्टमध्ये असतो. यात स्टोरेज कॉन्ट्रॅक्टचा पत्ता देखील असतो आणि डेटा मिळवण्यासाठी आणि सेट करण्यासाठी ते त्याच्याशी संवाद साधते.
दरम्यान, स्टोरेज कॉन्ट्रॅक्टमध्ये स्मार्ट कॉन्ट्रॅक्टशी संबंधित स्थिती असते, जसे की वापरकर्त्यांची शिल्लक आणि पत्ते. लक्षात घ्या की स्टोरेज कॉन्ट्रॅक्टची मालकी लॉजिक कॉन्ट्रॅक्टकडे असते आणि प्रस्थापनेच्या वेळी ते लॉजिक कॉन्ट्रॅक्टच्या पत्त्यासह कॉन्फिगर केले जाते. हे अनधिकृत कॉन्ट्रॅक्ट्सना स्टोरेज कॉन्ट्रॅक्टला कॉल करण्यापासून किंवा त्याचा डेटा अपडेट करण्यापासून प्रतिबंधित करते.
डीफॉल्टनुसार, स्टोरेज कॉन्ट्रॅक्ट अपरिवर्तनीय असते—परंतु तुम्ही ते ज्या लॉजिक कॉन्ट्रॅक्टकडे निर्देश करते ते नवीन अंमलबजावणीसह बदलू शकता. हे EVM मध्ये चालणारा कोड बदलेल, तर स्टोरेज आणि शिल्लक अबाधित ठेवेल.
ही अपग्रेड पद्धत वापरण्यासाठी स्टोरेज कॉन्ट्रॅक्टमधील लॉजिक कॉन्ट्रॅक्टचा पत्ता अपडेट करणे आवश्यक आहे. पूर्वी स्पष्ट केलेल्या कारणांसाठी तुम्ही नवीन लॉजिक कॉन्ट्रॅक्टला स्टोरेज कॉन्ट्रॅक्टच्या पत्त्यासह कॉन्फिगर करणे देखील आवश्यक आहे.
कॉन्ट्रॅक्ट स्थलांतराच्या तुलनेत डेटा पृथक्करण पॅटर्न लागू करणे सोपे आहे. तथापि, तुम्हाला अनेक कॉन्ट्रॅक्ट्स व्यवस्थापित करावे लागतील आणि स्मार्ट कॉन्ट्रॅक्ट्सचे दुर्भावनापूर्ण अपग्रेड्सपासून संरक्षण करण्यासाठी जटिल अधिकृतता योजना लागू कराव्या लागतील.
अपग्रेड यंत्रणा #3: प्रॉक्सी पॅटर्न
प्रॉक्सी पॅटर्न देखील बिझनेस लॉजिक आणि डेटा स्वतंत्र कॉन्ट्रॅक्ट्समध्ये ठेवण्यासाठी डेटा पृथक्करणाचा वापर करतो. तथापि, प्रॉक्सी पॅटर्नमध्ये, स्टोरेज कॉन्ट्रॅक्ट (ज्याला प्रॉक्सी म्हणतात) कोड अंमलबजावणी दरम्यान लॉजिक कॉन्ट्रॅक्टला कॉल करते. हे डेटा पृथक्करण पद्धतीच्या उलट आहे, जिथे लॉजिक कॉन्ट्रॅक्ट स्टोरेज कॉन्ट्रॅक्टला कॉल करते.
प्रॉक्सी पॅटर्नमध्ये हे घडते:
-
वापरकर्ते प्रॉक्सी कॉन्ट्रॅक्टशी संवाद साधतात, जे डेटा संचयित करते, परंतु त्यात बिझनेस लॉजिक नसते.
-
प्रॉक्सी कॉन्ट्रॅक्ट लॉजिक कॉन्ट्रॅक्टचा पत्ता संचयित करते आणि
delegatecallफंक्शन वापरून सर्व फंक्शन कॉल्स लॉजिक कॉन्ट्रॅक्टला (ज्यामध्ये बिझनेस लॉजिक असते) प्रतिनिधी करते. -
कॉल लॉजिक कॉन्ट्रॅक्टकडे फॉरवर्ड केल्यानंतर, लॉजिक कॉन्ट्रॅक्टमधून परत आलेला डेटा पुनर्प्राप्त केला जातो आणि वापरकर्त्याला परत केला जातो.
प्रॉक्सी पॅटर्न वापरण्यासाठी delegatecall फंक्शन समजून घेणे आवश्यक आहे. मुळात, delegatecall हा एक ऑपकोड आहे जो एका कॉन्ट्रॅक्टला दुसऱ्या कॉन्ट्रॅक्टला कॉल करण्याची परवानगी देतो, तर प्रत्यक्ष कोड अंमलबजावणी कॉलिंग कॉन्ट्रॅक्टच्या संदर्भात होते. प्रॉक्सी पॅटर्नमध्ये delegatecall वापरण्याचा एक परिणाम असा आहे की प्रॉक्सी कॉन्ट्रॅक्ट त्याच्या स्टोरेजमध्ये वाचते आणि लिहिते आणि लॉजिक कॉन्ट्रॅक्टमध्ये संचयित केलेले लॉजिक अशा प्रकारे कार्यान्वित करते जणू काही ते अंतर्गत फंक्शनला कॉल करत आहे.
Solidity दस्तऐवजीकरणातून (opens in a new tab):
संदेश कॉलचा एक विशेष प्रकार अस्तित्वात आहे, ज्याचे नाव delegatecall आहे जो संदेश कॉलसारखाच आहे, फक्त एवढाच फरक आहे की लक्ष्य पत्त्यावरील कोड कॉलिंग कॉन्ट्रॅक्टच्या संदर्भात (म्हणजेच पत्त्यावर) कार्यान्वित केला जातो आणि
msg.senderआणिmsg.valueत्यांची मूल्ये बदलत नाहीत. याचा अर्थ असा की कॉन्ट्रॅक्ट रनटाइमच्या वेळी वेगळ्या पत्त्यावरून डायनॅमिकरित्या कोड लोड करू शकते. स्टोरेज, वर्तमान पत्ता आणि शिल्लक अद्याप कॉलिंग कॉन्ट्रॅक्टचा संदर्भ देतात, फक्त कोड कॉल केलेल्या पत्त्यावरून घेतला जातो.
जेव्हा वापरकर्ता एखाद्या फंक्शनला कॉल करतो तेव्हा प्रॉक्सी कॉन्ट्रॅक्टला delegatecall लागू करण्याचे माहीत असते कारण त्यात fallback फंक्शन अंगभूत असते. Solidity प्रोग्रामिंगमध्ये जेव्हा फंक्शन कॉल कॉन्ट्रॅक्टमध्ये निर्दिष्ट केलेल्या फंक्शन्सशी जुळत नाही तेव्हा फॉलबॅक फंक्शन (opens in a new tab) कार्यान्वित केले जाते.
प्रॉक्सी पॅटर्न कार्य करण्यासाठी एक सानुकूल फॉलबॅक फंक्शन लिहिणे आवश्यक आहे जे प्रॉक्सी कॉन्ट्रॅक्टने समर्थन न देणाऱ्या फंक्शन कॉल्स कसे हाताळावे हे निर्दिष्ट करते. या प्रकरणात प्रॉक्सीचे फॉलबॅक फंक्शन delegatecall सुरू करण्यासाठी आणि वापरकर्त्याची विनंती वर्तमान लॉजिक कॉन्ट्रॅक्ट अंमलबजावणीकडे वळवण्यासाठी प्रोग्राम केलेले असते.
प्रॉक्सी कॉन्ट्रॅक्ट डीफॉल्टनुसार अपरिवर्तनीय असते, परंतु अपडेट केलेल्या बिझनेस लॉजिकसह नवीन लॉजिक कॉन्ट्रॅक्ट्स तयार केले जाऊ शकतात. त्यानंतर अपग्रेड करणे म्हणजे प्रॉक्सी कॉन्ट्रॅक्टमध्ये संदर्भित लॉजिक कॉन्ट्रॅक्टचा पत्ता बदलणे होय.
प्रॉक्सी कॉन्ट्रॅक्टला नवीन लॉजिक कॉन्ट्रॅक्टकडे निर्देशित करून, जेव्हा वापरकर्ते प्रॉक्सी कॉन्ट्रॅक्ट फंक्शनला कॉल करतात तेव्हा कार्यान्वित होणारा कोड बदलतो. हे आम्हाला वापरकर्त्यांना नवीन कॉन्ट्रॅक्टशी संवाद साधण्यास न सांगता कॉन्ट्रॅक्टचे लॉजिक अपग्रेड करण्यास अनुमती देते.
स्मार्ट कॉन्ट्रॅक्ट्स अपग्रेड करण्यासाठी प्रॉक्सी पॅटर्न ही एक लोकप्रिय पद्धत आहे कारण ते कॉन्ट्रॅक्ट स्थलांतराशी संबंधित अडचणी दूर करतात. तथापि, प्रॉक्सी पॅटर्न वापरण्यास अधिक क्लिष्ट आहेत आणि अयोग्यरित्या वापरल्यास फंक्शन सिलेक्टर क्लॅशेस (opens in a new tab) सारख्या गंभीर त्रुटी निर्माण करू शकतात.
प्रॉक्सी पॅटर्नबद्दल अधिक (opens in a new tab).
अपग्रेड यंत्रणा #4: रणनीती पॅटर्न
हे तंत्र रणनीती पॅटर्न (opens in a new tab) द्वारे प्रभावित आहे, जे विशिष्ट वैशिष्ट्ये लागू करण्यासाठी इतर प्रोग्राम्सशी संवाद साधणारे सॉफ्टवेअर प्रोग्राम्स तयार करण्यास प्रोत्साहित करते. इथेरियम डेव्हलपमेंटमध्ये रणनीती पॅटर्न लागू करणे म्हणजे इतर कॉन्ट्रॅक्ट्समधील फंक्शन्सना कॉल करणारे स्मार्ट कॉन्ट्रॅक्ट तयार करणे.
या प्रकरणातील मुख्य कॉन्ट्रॅक्टमध्ये मुख्य बिझनेस लॉजिक असते, परंतु विशिष्ट फंक्शन्स कार्यान्वित करण्यासाठी इतर स्मार्ट कॉन्ट्रॅक्ट्सशी ("सॅटेलाइट कॉन्ट्रॅक्ट्स") संवाद साधते. हे मुख्य कॉन्ट्रॅक्ट प्रत्येक सॅटेलाइट कॉन्ट्रॅक्टचा पत्ता देखील संचयित करते आणि सॅटेलाइट कॉन्ट्रॅक्टच्या वेगवेगळ्या अंमलबजावणींमध्ये स्विच करू शकते.
तुम्ही नवीन सॅटेलाइट कॉन्ट्रॅक्ट तयार करू शकता आणि नवीन पत्त्यासह मुख्य कॉन्ट्रॅक्ट कॉन्फिगर करू शकता. हे तुम्हाला स्मार्ट कॉन्ट्रॅक्टसाठी रणनीती बदलण्याची (म्हणजेच नवीन लॉजिक लागू करण्याची) अनुमती देते.
पूर्वी चर्चा केलेल्या प्रॉक्सी पॅटर्नसारखे असले तरी, रणनीती पॅटर्न वेगळा आहे कारण मुख्य कॉन्ट्रॅक्ट, ज्याच्याशी वापरकर्ते संवाद साधतात, त्यात बिझनेस लॉजिक असते. हा पॅटर्न वापरल्याने तुम्हाला मुख्य पायाभूत सुविधांवर परिणाम न करता स्मार्ट कॉन्ट्रॅक्टमध्ये मर्यादित बदल करण्याची संधी मिळते.
मुख्य तोटा असा आहे की हा पॅटर्न बहुधा किरकोळ अपग्रेड्स आणण्यासाठी उपयुक्त आहे. तसेच, जर मुख्य कॉन्ट्रॅक्टशी तडजोड केली गेली (उदा. हॅकद्वारे), तर तुम्ही ही अपग्रेड पद्धत वापरू शकत नाही.
अपग्रेड यंत्रणा #5: डायमंड पॅटर्न
डायमंड पॅटर्नला प्रॉक्सी पॅटर्नमधील सुधारणा मानले जाऊ शकते. डायमंड पॅटर्न प्रॉक्सी पॅटर्नपेक्षा वेगळे आहेत कारण डायमंड प्रॉक्सी कॉन्ट्रॅक्ट एकापेक्षा जास्त लॉजिक कॉन्ट्रॅक्टला फंक्शन कॉल्स प्रतिनिधी करू शकते.
डायमंड पॅटर्नमधील लॉजिक कॉन्ट्रॅक्ट्सना फॅसेट्स (facets) म्हणून ओळखले जाते. डायमंड पॅटर्न कार्य करण्यासाठी, तुम्हाला प्रॉक्सी कॉन्ट्रॅक्टमध्ये एक मॅपिंग तयार करणे आवश्यक आहे जे फंक्शन सिलेक्टर्सना (opens in a new tab) वेगवेगळ्या फॅसेट पत्त्यांवर मॅप करते.
जेव्हा वापरकर्ता फंक्शन कॉल करतो, तेव्हा प्रॉक्सी कॉन्ट्रॅक्ट ते फंक्शन कार्यान्वित करण्यासाठी जबाबदार फॅसेट शोधण्यासाठी मॅपिंग तपासते. त्यानंतर ते delegatecall लागू करते (फॉलबॅक फंक्शन वापरून) आणि कॉल योग्य लॉजिक कॉन्ट्रॅक्टकडे पुनर्निर्देशित करते.
पारंपारिक प्रॉक्सी अपग्रेड पॅटर्नच्या तुलनेत डायमंड अपग्रेड पॅटर्नचे काही फायदे आहेत:
-
हे तुम्हाला सर्व कोड न बदलता कॉन्ट्रॅक्टचा एक छोटा भाग अपग्रेड करण्याची अनुमती देते. अपग्रेडसाठी प्रॉक्सी पॅटर्न वापरण्यासाठी पूर्णपणे नवीन लॉजिक कॉन्ट्रॅक्ट तयार करणे आवश्यक आहे, अगदी किरकोळ अपग्रेडसाठीही.
-
सर्व स्मार्ट कॉन्ट्रॅक्ट्सना (प्रॉक्सी पॅटर्नमध्ये वापरल्या जाणाऱ्या लॉजिक कॉन्ट्रॅक्ट्ससह) 24KB आकाराची मर्यादा असते, जी एक मर्यादा असू शकते—विशेषतः अधिक फंक्शन्स आवश्यक असलेल्या जटिल कॉन्ट्रॅक्ट्ससाठी. डायमंड पॅटर्न अनेक लॉजिक कॉन्ट्रॅक्ट्समध्ये फंक्शन्स विभाजित करून ही समस्या सोडवणे सोपे करते.
-
प्रॉक्सी पॅटर्न ॲक्सेस कंट्रोल्ससाठी कॅच-ऑल (catch-all) दृष्टिकोन स्वीकारतात. अपग्रेड फंक्शन्समध्ये प्रवेश असलेली संस्था संपूर्ण कॉन्ट्रॅक्ट बदलू शकते. परंतु डायमंड पॅटर्न मॉड्यूलर परवानग्यांचा दृष्टिकोन सक्षम करतो, जिथे तुम्ही संस्थांना स्मार्ट कॉन्ट्रॅक्टमधील विशिष्ट फंक्शन्स अपग्रेड करण्यापुरते मर्यादित करू शकता.
डायमंड पॅटर्नबद्दल अधिक (opens in a new tab).
स्मार्ट कॉन्ट्रॅक्ट्स अपग्रेड करण्याचे फायदे आणि तोटे
| फायदे | तोटे |
|---|---|
| स्मार्ट कॉन्ट्रॅक्ट अपग्रेडमुळे प्रस्थापनेनंतरच्या टप्प्यात आढळलेल्या असुरक्षा दुरुस्त करणे सोपे होऊ शकते. | स्मार्ट कॉन्ट्रॅक्ट्स अपग्रेड केल्याने कोड अपरिवर्तनीयतेची कल्पना नाकारली जाते, ज्याचे विकेंद्रीकरण आणि सुरक्षिततेवर परिणाम होतात. |
| डेव्हलपर्स विकेंद्रित ॲप्लिकेशन्समध्ये नवीन वैशिष्ट्ये जोडण्यासाठी लॉजिक अपग्रेड्स वापरू शकतात. | वापरकर्त्यांनी डेव्हलपर्सवर विश्वास ठेवला पाहिजे की ते स्मार्ट कॉन्ट्रॅक्ट्समध्ये अनियंत्रितपणे बदल करणार नाहीत. |
| स्मार्ट कॉन्ट्रॅक्ट अपग्रेड्स अंतिम वापरकर्त्यांसाठी सुरक्षितता सुधारू शकतात कारण बग्स त्वरीत दुरुस्त केले जाऊ शकतात. | स्मार्ट कॉन्ट्रॅक्ट्समध्ये अपग्रेड कार्यक्षमता प्रोग्राम केल्याने जटिलतेचा आणखी एक स्तर जोडला जातो आणि गंभीर त्रुटींची शक्यता वाढते. |
| कॉन्ट्रॅक्ट अपग्रेड्स डेव्हलपर्सना वेगवेगळ्या वैशिष्ट्यांसह प्रयोग करण्यासाठी आणि कालांतराने dapps सुधारण्यासाठी अधिक वाव देतात. | स्मार्ट कॉन्ट्रॅक्ट्स अपग्रेड करण्याच्या संधीमुळे डेव्हलपर्सना डेव्हलपमेंट टप्प्यात योग्य काळजी न घेता प्रकल्प जलद सुरू करण्यास प्रोत्साहन मिळू शकते. |
| स्मार्ट कॉन्ट्रॅक्ट्समधील असुरक्षित ॲक्सेस कंट्रोल किंवा केंद्रीकरणामुळे दुर्भावनापूर्ण घटकांना अनधिकृत अपग्रेड्स करणे सोपे होऊ शकते. |
स्मार्ट कॉन्ट्रॅक्ट्स अपग्रेड करण्यासाठी विचार करण्यासारख्या गोष्टी
-
अनधिकृत स्मार्ट कॉन्ट्रॅक्ट अपग्रेड्स टाळण्यासाठी सुरक्षित ॲक्सेस कंट्रोल/अधिकृतता यंत्रणा वापरा, विशेषतः जर प्रॉक्सी पॅटर्न, रणनीती पॅटर्न किंवा डेटा पृथक्करण वापरत असाल. याचे एक उदाहरण म्हणजे अपग्रेड फंक्शनचा प्रवेश मर्यादित करणे, जेणेकरून केवळ कॉन्ट्रॅक्टचा मालकच त्याला कॉल करू शकेल.
-
स्मार्ट कॉन्ट्रॅक्ट्स अपग्रेड करणे ही एक जटिल क्रिया आहे आणि असुरक्षा निर्माण होण्यापासून रोखण्यासाठी उच्च स्तरावरील काळजी घेणे आवश्यक आहे.
-
अपग्रेड्स लागू करण्याची प्रक्रिया विकेंद्रित करून विश्वास गृहीतके कमी करा. संभाव्य रणनीतींमध्ये अपग्रेड्स नियंत्रित करण्यासाठी मल्टी-सिग वॉलेट कॉन्ट्रॅक्ट वापरणे किंवा अपग्रेड मंजूर करण्यासाठी DAO च्या सदस्यांना मत देणे आवश्यक करणे समाविष्ट आहे.
-
कॉन्ट्रॅक्ट्स अपग्रेड करण्यामध्ये समाविष्ट असलेल्या खर्चाची जाणीव ठेवा. उदाहरणार्थ, कॉन्ट्रॅक्ट स्थलांतरादरम्यान जुन्या कॉन्ट्रॅक्टमधून नवीन कॉन्ट्रॅक्टमध्ये स्थिती (उदा. वापरकर्त्यांची शिल्लक) कॉपी करण्यासाठी एकापेक्षा जास्त व्यवहार आवश्यक असू शकतात, म्हणजेच अधिक गॅस शुल्क.
-
वापरकर्त्यांचे संरक्षण करण्यासाठी टाइमलॉक्स (timelocks) लागू करण्याचा विचार करा. टाइमलॉक म्हणजे सिस्टममधील बदलांवर लागू केलेला विलंब. अपग्रेड्स नियंत्रित करण्यासाठी टाइमलॉक्स मल्टी-सिग प्रशासन प्रणालीसह एकत्र केले जाऊ शकतात: जर प्रस्तावित कृती आवश्यक मंजुरीच्या उंबरठ्यावर पोहोचली, तर पूर्वनिर्धारित विलंब कालावधी संपेपर्यंत ती कार्यान्वित होत नाही.
जर वापरकर्ते प्रस्तावित बदलाशी (उदा. लॉजिक अपग्रेड किंवा नवीन शुल्क योजना) असहमत असतील तर टाइमलॉक्स वापरकर्त्यांना सिस्टममधून निर्गमन करण्यासाठी थोडा वेळ देतात. टाइमलॉक्सशिवाय, वापरकर्त्यांना डेव्हलपर्सवर विश्वास ठेवण्याची आवश्यकता असते की ते पूर्वसूचनेशिवाय स्मार्ट कॉन्ट्रॅक्टमध्ये अनियंत्रित बदल लागू करणार नाहीत. येथील तोटा असा आहे की टाइमलॉक्स असुरक्षा त्वरीत पॅच करण्याच्या क्षमतेवर मर्यादा घालतात.
संसाधने
ओपनझेपलिन अपग्रेड्स प्लगइन्स - अपग्रेडेबल स्मार्ट कॉन्ट्रॅक्ट्स प्रस्थापित करण्यासाठी आणि सुरक्षित करण्यासाठी टूल्सचा संच.
ट्यूटोरियल्स
- पॅट्रिक कॉलिन्स यांचे तुमचे स्मार्ट कॉन्ट्रॅक्ट्स अपग्रेड करणे | यूट्यूब् ट्यूटोरियल (opens in a new tab)
- ऑस्टिन ग्रिफिथ यांचे इथेरियम स्मार्ट कॉन्ट्रॅक्ट स्थलांतर ट्यूटोरियल (opens in a new tab)
- प्राणेश ए.एस. यांचे स्मार्ट कॉन्ट्रॅक्ट्स अपग्रेड करण्यासाठी UUPS प्रॉक्सी पॅटर्न वापरणे (opens in a new tab)
- fangjun.eth यांचे Web3 ट्यूटोरियल: ओपनझेपलिन वापरून अपग्रेडेबल स्मार्ट कॉन्ट्रॅक्ट (प्रॉक्सी) लिहा (opens in a new tab)
पुढील वाचन
- सँटियागो पल्लाडिनो यांचे स्मार्ट कॉन्ट्रॅक्ट अपग्रेड्सची स्थिती (opens in a new tab)
- Solidity स्मार्ट कॉन्ट्रॅक्ट अपग्रेड करण्याचे अनेक मार्ग (opens in a new tab) - क्रिप्टो मार्केट पूल ब्लॉग
- शिका: स्मार्ट कॉन्ट्रॅक्ट्स अपग्रेड करणे (opens in a new tab) - ओपनझेपलिन डॉक्स
- नवीन साहू यांचे Solidity कॉन्ट्रॅक्ट्सच्या अपग्रेडेबिलिटीसाठी प्रॉक्सी पॅटर्न: ट्रान्सपरंट विरुद्ध UUPS प्रॉक्सी (opens in a new tab)
- निक मडगे यांचे डायमंड अपग्रेड्स कसे कार्य करतात (opens in a new tab)