paint-brush
स्मार्ट कॉन्ट्रैक्ट हेड टू हेड — एथेरियम बनाम फ्लोद्वारा@johnjvester
983 रीडिंग
983 रीडिंग

स्मार्ट कॉन्ट्रैक्ट हेड टू हेड — एथेरियम बनाम फ्लो

द्वारा John Vester8m2022/08/19
Read on Terminal Reader
Read this story w/o Javascript

बहुत लंबा; पढ़ने के लिए

स्मार्ट अनुबंध लिखने के इच्छुक डेवलपर्स के पास कुछ ठोस विकल्प हैं, लेकिन वर्तमान में कौन सा बेहतर है ... और क्यों?

Companies Mentioned

Mention Thumbnail
Mention Thumbnail

Coins Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - स्मार्ट कॉन्ट्रैक्ट हेड टू हेड — एथेरियम बनाम फ्लो
John Vester HackerNoon profile picture


स्मार्ट कॉन्ट्रैक्ट टेक्नोलॉजी की शुरुआत के बाद से, सॉलिडिटी स्मार्ट कॉन्ट्रैक्ट डेवलपर्स के लिए पसंद की कोडिंग भाषा रही है।


हालाँकि, यदि आप एक सॉलिडिटी डेवलपर हैं, तो आप पहले से ही जानते हैं कि इसमें कमियां हैं। अन्य खामियों के अलावा, कुछ डेटा प्रकारों के सरल गलत संचालन से प्रमुख सुरक्षा चिंताएँ उत्पन्न हो सकती हैं, और कोई अंतर्निहित अभिगम नियंत्रण नहीं हैं।


फ्लो ब्लॉकचैन, ताल के लिए विकसित एक नई स्मार्ट अनुबंध भाषा, सॉलिडिटी के निरीक्षण से सीखती है और मूल रूप से इसकी कई अंतर्निहित समस्याओं को हल करती है। और अगर आप पहले से सॉलिडिटी जानते हैं, तो इसे सीखना आसान है!


यह लेख ताल स्मार्ट अनुबंध भाषा का परिचय देता है, विवरण देता है कि यह सॉलिडिटी में कैसे सुधार करता है, और फिर कुछ सामान्य स्मार्ट अनुबंध उदाहरणों पर दोनों भाषाओं की एक साथ-साथ तुलना करता है। अंत तक, आपको ताल के साथ सहज होना चाहिए और फ़्लो पर आरंभ करने के लिए तैयार होना चाहिए!


ताल के बारे में

ताल प्रोग्रामिंग भाषा है जो फ्लो ब्लॉकचैन को शक्ति प्रदान करती है, जिसे मूल रूप से बनाया गया था डैपर लैब्स बड़े पैमाने पर क्रिप्टो गेम और एनएफटी परियोजनाओं का समर्थन करने के लिए। (आपने शायद NBA Top Shots—उनके सबसे सफल प्रोजेक्ट्स में से एक के बारे में सुना होगा।) इसका सिंटैक्स परिचित हो सकता है, क्योंकि यह स्विफ्ट, रस्ट और कोटलिन जैसी लोकप्रिय आधुनिक भाषाओं से प्रेरित था। ताल है स्थिर तथा दृढ़ता से टाइप किया गया , संसाधन-उन्मुख दृष्टिकोण और क्षमता-आधारित सुरक्षा मॉडल के साथ।


इन सबका मतलब है कि डिजिटल संपत्ति निर्माण और प्रबंधन के लिए ताल अत्यधिक अनुकूलित है


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


संसाधन नियंत्रित निर्माण और रनटाइम समर्थन के साथ रैखिक प्रकार हैं


ताल कैसे सॉलिडिटी में सुधार करता है

ताल कई तरह से सॉलिडिटी में सुधार करता है। आइए तीन उदाहरण देखें- छोटी कोडिंग गलतियाँ, सुरक्षा और अभिगम नियंत्रण, और अनुबंध परिनियोजन।

वो छोटी कोडिंग गलतियाँ

सॉलिडिटी के साथ कुछ सबसे बड़े मुद्दे आमतौर पर छोटी-छोटी गलतियों से उत्पन्न होते हैं। उदाहरण के लिए, एक चर को केवल एक डिफ़ॉल्ट मान के साथ प्रारंभ करना-हालांकि कभी-कभी सुविधाजनक होता है-यदि उस चर को नहीं बदला जाता है तो अप्रत्याशित परिणाम हो सकते हैं। और निश्चित-श्रेणी के डेटा प्रकार संभावित अंडरफ्लो या अतिप्रवाह स्थितियों को जन्म दे सकते हैं, जो विनाशकारी होगा यदि वह डेटा प्रकार एक मौद्रिक मूल्य का प्रतिनिधित्व करता है।


कैडेंस में, वैरिएबल वैल्यू को इनिशियलाइज़ेशन पर सेट किया जाना चाहिए, डिफ़ॉल्ट मानों से किसी भी अवांछित परिणाम को हटा देना चाहिए। इसके अतिरिक्त, ताल में पूर्णांकों को स्वचालित रूप से अंडरफ्लो या अतिप्रवाह स्थितियों के लिए जांचा जाता है, जबकि आपको OpenZeppelin की सुरक्षित गणित लाइब्रेरी को इनहेरिट करने की आवश्यकता होगी या सॉलिडिटी के साथ 0.8 से अधिक संस्करण का उपयोग करना होगा।

सुरक्षा और अभिगम नियंत्रण

जब सुरक्षा और अभिगम नियंत्रण की बात आती है, तो सॉलिडिटी के लिए आपको कस्टम संशोधक बनाने या अन्य सुरक्षा-आधारित स्मार्ट अनुबंधों को इनहेरिट करने की आवश्यकता होती है, लेकिन इसके कई कार्य भी होते हैं जो डिफ़ॉल्ट रूप से सार्वजनिक होते हैं।


Cadence के क्षमता-आधारित सुरक्षा मॉडल के साथ, खाते केवल वही कार्य कर सकते हैं जिन तक उनकी पहुंच है। इसका मतलब है कि ताल का अभिगम नियंत्रण मूल रूप से भाषा में ही बनाया गया है। इसके अलावा, ताल में संसाधन वस्तुओं पर परिभाषित विधियों को पुनर्विक्रय हमलों के लिए अतिसंवेदनशील नहीं किया जा सकता है, कुछ सॉलिडिटी डेवलपर्स को अपने तर्क के प्रवाह को बनाते समय गहराई से अवगत होना चाहिए।

स्मार्ट अनुबंध परिनियोजन

जब सॉलिडिटी स्मार्ट कॉन्ट्रैक्ट्स में समस्याएँ पाई जाती हैं, तो डेवलपर्स पूरी तरह से नए कॉन्ट्रैक्ट को लागू किए बिना उन्हें ठीक करने में असमर्थ होते हैं। और फिर भी, कमजोर अनुबंध अभी भी मौजूद है। डेवलपर्स को यह सुनिश्चित करना चाहिए कि उनका उपयोगकर्ता आधार नए अनुबंध में बदल जाए।


ताल में, स्मार्ट अनुबंध उन्नयन क्षमता अंतर्निहित और पारदर्शी है। जब कोड को सुरक्षित और अंतिम घोषित किया जाता है, तो स्मार्ट अनुबंध के मालिक से चाबियों को हटाकर अनुबंध को अपरिवर्तनीय बनाया जा सकता है।


कुल मिलाकर, ताल एक सुरक्षित और अधिक सुरक्षित स्मार्ट अनुबंध भाषा है जो त्रुटि के लिए कम जगह छोड़ती है।


अब आइए सॉलिडिटी और कैडेंस में लिखे गए स्मार्ट कॉन्ट्रैक्ट्स के बीच के अंतरों को विस्तार से देखें। हम एक सरल हैलो वर्ल्ड अनुबंध और फिर एक अधिक जटिल एनएफटी कार्यान्वयन के माध्यम से चलेंगे।

सरल अनुबंध

आइए एक सर्वकालिक क्लासिक के साथ शुरुआत करें। हम सभी ने कई भाषाओं में "हैलो वर्ल्ड" लिखा है, इसलिए यह ताल का एक आसान परिचय है।


आइए इसे चरण दर चरण जानते हैं।

अनुबंध परिभाषा

सबसे पहले, हमारे पास अनुबंध की परिभाषा है। स्पष्ट अंतर यह है कि ताल अनुबंध में एक अभिगम नियंत्रण संशोधक होता है: इस मामले में, pub. यह संशोधक सुनिश्चित करता है कि फ्लो नेटवर्क में हर कोई अनुबंध तक पहुंच सकता है, सॉलिडिटी अनुबंधों के लिए डिफ़ॉल्ट व्यवहार।


हालाँकि, ताल में, हम एक्सेस कंट्रोल को access(account) पर भी सेट कर सकते हैं। यह उस अनुबंध को लागू करने वाले खाते तक अनुबंध पहुंच को सीमित करता है। यहां हम पहले से ही फ्लो और एथेरियम के बीच एक बड़ा अंतर देखते हैं। हम केवल फ्लो ब्लॉकचैन में अनुबंधों को तैनात नहीं करते हैं; हम उन्हें अपने खाता भंडारण में तैनात करते हैं। फ्लो ब्लॉकचैन पर, प्रत्येक खाते को भंडारण के साथ आरंभ किया जाता है, जहां संसाधनों और संरचनाओं को संग्रहीत किया जा सकता है। इस भंडारण की अपनी अनुमतियां हैं, जो हमें इस बात पर बेहतर नियंत्रण की अनुमति देती है कि हमारे अनुबंध के तरीकों को कौन निष्पादित कर सकता है।

अनुबंध चर

अगली पंक्ति हमारे अनुबंध के दायरे में आने वाले एक स्ट्रिंग चर को परिभाषित करती है। कैडेंस में अर्धविराम वैकल्पिक हैं, और चर को परिभाषित करने के लिए एक let कीवर्ड का उपयोग किया जाता है।


ताल में दो प्रकार के चर होते हैं- परिवर्तनशील और अपरिवर्तनीय। let के साथ बनाए गए चर अपरिवर्तनीय हैं, या अन्यथा स्थिरांक के रूप में जाने जाते हैं; हम उन्हें केवल एक बार सेट कर सकते हैं, और उन्हें अनुबंध के जीवनकाल के लिए नहीं बदला जा सकता है। हम var कीवर्ड के साथ परिवर्तनशील चर (जिन्हें बदला जा सकता है) को परिभाषित करते हैं।


इस मामले में, हम चर मान को init विधि में सेट करते हैं, क्योंकि ताल सुनिश्चित करता है कि यह विधि प्रत्येक अनुबंध परिनियोजन के लिए केवल एक बार कॉल की जाती है।

तरीकों

सॉलिडिटी के constructor के समतुल्य ताल init विधि है। इस विधि को ठीक एक बार कहा जाता है—जिस समय एक अनुबंध तैनात किया जाता है।


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


हमारे अनुबंध की दूसरी विधि ग्रीटिंग वैरिएबल लौटाती है। कैडेंस और सॉलिडिटी दोनों में, हमें सार्वजनिक होने की विधि के लिए पहुंच की घोषणा करनी होगी, और दोनों भाषाओं में हमें रिटर्न प्रकार को परिभाषित करने की आवश्यकता होती है। इस मामले में, यह एक स्ट्रिंग है।


लेकिन सॉलिडिटी के लिए हमें यहां और अधिक निम्न-स्तर होने की आवश्यकता है। इसके लिए हमें स्पष्ट रूप से यह बताना होगा कि स्ट्रिंग कहाँ स्थित है। यह हमें कार्यों को दृश्य के रूप में भी चिह्नित करता है, ताकि हम गलती से ब्लॉकचेन की स्थिति को संशोधित न करें।


दूसरी ओर, ताल को उस निम्न-स्तरीय नियंत्रण की आवश्यकता नहीं है, क्योंकि यह दृढ़ता से और स्थिर रूप से टाइप किया गया है। प्रोग्राम को ऑन-चेन चलाने से पहले संभावित त्रुटियों को पकड़ा जाता है, जिससे अनावश्यक कीवर्ड को हटाकर पूरी विधि घोषणा को और अधिक पठनीय बना दिया जाता है।

एनएफटी अनुबंध

इसके बाद, आइए दोनों भाषाओं के मूल NFT अनुबंध को देखें:


चूंकि इस उदाहरण के लिए दोनों भाषाओं के अलग-अलग दृष्टिकोण हैं, आइए उन्हें अलग-अलग देखें: पहले सॉलिडिटी उदाहरण के माध्यम से चलना, फिर ताल।

दृढ़ता

सॉलिडिटी में, एनएफटी मूल रूप से आईडी की एक सूची है। आपको स्मार्ट अनुबंध के अंदर इन आईडी का ट्रैक रखना होगा और विशिष्टता सुनिश्चित करने के लिए उन्हें मैन्युअल रूप से बढ़ाना होगा। सॉलिडिटी एनएफटी या उनकी विशिष्टता के बारे में कुछ भी नहीं जानता है। यह केवल उनके मालिकों के लिए मैप की गई आईडी की एक सूची है, सभी अनुबंध के भीतर मैन्युअल रूप से प्रबंधित की जाती हैं। यह त्रुटि के लिए जगह छोड़ देता है यदि आईडी वृद्धि को अनुचित तरीके से संभाला जाता है, जिसके परिणामस्वरूप कई एनएफटी समान आईडी वाले हो सकते हैं।


उदाहरण में, एनएफटी में कोई अतिरिक्त डेटा संलग्न नहीं है, लेकिन आप यूआरआई में एक और मैपिंग आईडी जोड़ सकते हैं। अनुबंध सुनिश्चित करता है कि प्रत्येक नवनिर्मित NFT को स्वामी के पते पर मैप किया जाए।


यह एक साधारण उदाहरण है, बिल्कुल। आमतौर पर, आपको दूरस्थ रूप से सुरक्षित एनएफटी अनुबंध प्राप्त करने के लिए कई इंटरफेस का विस्तार करने की आवश्यकता होगी और मेटाडेटा जैसी सुविधाओं का उपयोग आपके एनएफटी में जाने-माने जेपीजी को जोड़ने के लिए किया जाएगा, लेकिन मूल तंत्र समान हैं।

ताल

अब, आइए ताल संस्करण को देखें और यह इस सॉलिडिटी उदाहरण पर कैसे सुधार करता है।

संसाधन परिभाषा

ताल उदाहरण एक संसाधन प्रकार से शुरू होता है जिसे NFT कहा जाता है। NFT के सामने @ चिन्ह पर ध्यान दें? यह प्रतीक आवश्यक है, क्योंकि यह सुनिश्चित करता है कि संसाधन प्रकारों का उपयोग और व्यवहार स्पष्ट रहेगा।


हम एक संसाधन से उदाहरण बना सकते हैं, और इसमें एक संरचना की तरह ही विशेषताएँ हो सकती हैं। एक नियमित संरचना से अंतर यह है कि एक संसाधन एक विशेष प्रकार है जो अपने द्वारा संग्रहीत डेटा के अतिरिक्त स्वामित्व को संभालता है।


संसाधन प्रकार NFT के अंदर, एक id फ़ील्ड है। id फ़ील्ड एक पूर्णांक है, UInt64 , और यह प्रत्येक NFT संसाधन को दी गई एक अद्वितीय आईडी है। यह id प्रत्येक एनएफटी संसाधन के लिए अलग होगी, जिसका अर्थ है कि संसाधन को दोहराया या संयोजित नहीं किया जा सकता है। इसके बाद, id फ़ील्ड को init फ़ंक्शन का उपयोग करके प्रारंभ किया जाता है।


जिस तरह रस्ट का उधार चेकर सुनिश्चित करता है कि केवल एक फ़ंक्शन एक चर को संशोधित कर सकता है, उसी तरह ताल अपने संसाधनों के लिए भी सुनिश्चित करता है।

संसाधन निर्माण

जब हम एक नया संसाधन बनाते हैं, तो हमें इसे भंडारण स्थानों के आसपास ले जाना होता है। यदि हम संसाधन को वैसे ही छोड़ देते हैं तो हमारा स्मार्ट अनुबंध ठीक से नहीं चलेगा, इसलिए यह हमें संसाधनों और उनके भंडारण स्थानों के साथ विचार-विमर्श करने के लिए मजबूर करता है। नियंत्रण का यह रूप यह भी सुनिश्चित करता है कि संसाधन कभी न खोएं या गलती से नष्ट न हों; वे एक समय में केवल एक ही स्थान पर हो सकते हैं।


जब हम टकसाल फ़ंक्शन को कॉल करते हैं, तो यह हमारे NFT संसाधन का एक नया उदाहरण बनाएगा। यह फ़ंक्शन एक प्रकार के NFT के साथ एक संसाधन देता है और पहले परिभाषित किए गए संसाधन से फ़ील्ड, id लेता है। create कीवर्ड ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग में नए ऑपरेटर की तरह है, जो एक नया संसाधन बनाता है। <- , या मूव-ऑपरेटर, यह स्पष्ट करता है कि यह संसाधन हमारे द्वारा कॉल किए जाने के बाद स्रोत पर उपलब्ध नहीं है।

संसाधन भंडारण

self.account चर उस खाते को इंगित करेगा जिसका उपयोग हमने अपने अनुबंध के लिए परिनियोजन लक्ष्य के रूप में किया था। जैसा कि हमने पहले सीखा: फ्लो नेटवर्क पर वैश्विक नामस्थान में स्मार्ट अनुबंधों को तैनात नहीं किया जाता है, बल्कि आपके खाते से संबंधित विशेष ऑन-चेन स्टोरेज में तैनात किया जाता है। इसलिए, स्मार्ट अनुबंध जानता है कि उसे किस खाते में तैनात किया गया है और उस जानकारी का अपने तरीकों में उपयोग कर सकता है।

इस उदाहरण में, हम खाते की सेव विधि का उपयोग करते हैं। अंतिम init फंक्शन में, हम रिसोर्स को save मेथड्स फर्स्ट आर्गुमेंट में ले जाते हैं और यह बताते हैं कि अकाउंट के अंदर कौन सा पाथ हमारे एनएफटी को स्टोर करना चाहिए।


चूंकि हमारा एनएफटी एक संसाधन है, फ्लो नेटवर्क पर कोई भी इकाई इसे कॉपी नहीं कर सकती है; हमें इसकी विशिष्टता पर स्पष्ट रूप से नज़र रखने की ज़रूरत नहीं है।

सारांश

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


इसलिए, यदि आप एक ऐसे डेवलपर हैं जो मौलिक रूप से सुरक्षित और अधिक सुरक्षित भाषा में स्मार्ट अनुबंध लिखना चाहते हैं, तो ताल एक उत्कृष्ट विकल्प है। अधिक जानने के लिए, Cadence Documentation and Flow Developer Portal देखें।


आपका दिन वाकई बहुत अच्छा हो!