मुख्य सामग्री पर जाएं
Change page

स्मार्ट अनुबंधों का सत्यापन

स्मार्ट अनुबंध "विश्वासहीन" (trustless) होने के लिए डिज़ाइन किए गए हैं, जिसका अर्थ है कि उपयोगकर्ताओं को किसी अनुबंध के साथ इंटरैक्ट करने से पहले तीसरे पक्षों (जैसे, डेवलपर्स और कंपनियों) पर भरोसा करने की आवश्यकता नहीं होनी चाहिए। विश्वासहीनता की आवश्यकता के रूप में, उपयोगकर्ताओं और अन्य डेवलपर्स को स्मार्ट अनुबंध के सोर्स कोड को सत्यापित करने में सक्षम होना चाहिए। सोर्स कोड सत्यापन उपयोगकर्ताओं और डेवलपर्स को आश्वस्त करता है कि प्रकाशित अनुबंध कोड वही कोड है जो इथेरियम ब्लॉकचेन पर अनुबंध के पते पर चल रहा है।

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

सोर्स कोड सत्यापन क्या है?

इथेरियम वर्चुअल मशीन (EVM) में स्मार्ट अनुबंध की तैनाती करने से पहले, डेवलपर्स अनुबंध के सोर्स कोड—Solidity में लिखे गए निर्देश या किसी अन्य उच्च-स्तरीय प्रोग्रामिंग भाषा—का बाइटकोड में संकलन करते हैं। चूँकि EVM उच्च-स्तरीय निर्देशों की व्याख्या नहीं कर सकता है, इसलिए EVM में अनुबंध लॉजिक को निष्पादित करने के लिए सोर्स कोड को बाइटकोड (यानी, निम्न-स्तरीय, मशीन निर्देश) में संकलित करना आवश्यक है।

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

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

पूर्ण सत्यापन क्या है?

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

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

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

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

सोर्स कोड सत्यापन क्यों महत्वपूर्ण है?

विश्वासहीनता

विश्वासहीनता यकीनन स्मार्ट अनुबंधों और विकेंद्रीकृत एप्लिकेशन (dapp) के लिए सबसे बड़ा आधार है। स्मार्ट अनुबंध "अपरिवर्तनीय" होते हैं और उन्हें बदला नहीं जा सकता; एक अनुबंध केवल तैनाती के समय कोड में परिभाषित व्यावसायिक लॉजिक को निष्पादित करेगा। इसका मतलब है कि डेवलपर्स और उद्यम इथेरियम पर तैनाती के बाद अनुबंध के कोड के साथ छेड़छाड़ नहीं कर सकते हैं।

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

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

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

उपयोगकर्ता सुरक्षा

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

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

इथेरियम स्मार्ट अनुबंधों के लिए सोर्स कोड को कैसे सत्यापित करें

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

A diagram showing showing smart contract source code verification

स्मार्ट अनुबंध को सत्यापित करने में मूल रूप से निम्नलिखित चरण शामिल हैं:

  1. कंपाइलर में सोर्स फ़ाइलें और संकलन सेटिंग्स इनपुट करें।

  2. कंपाइलर अनुबंध का बाइटकोड आउटपुट करता है

  3. दिए गए पते पर तैनात अनुबंध का बाइटकोड प्राप्त करें

  4. तैनात बाइटकोड की पुनर्संकलित बाइटकोड के साथ तुलना करें। यदि कोड मेल खाते हैं, तो अनुबंध दिए गए सोर्स कोड और संकलन सेटिंग्स के साथ सत्यापित हो जाता है।

  5. इसके अतिरिक्त, यदि बाइटकोड के अंत में मेटाडेटा हैश मेल खाते हैं, तो यह एक पूर्ण मिलान होगा।

ध्यान दें कि यह सत्यापन का एक सरल विवरण है और कई अपवाद हैं जो इसके साथ काम नहीं करेंगे जैसे कि अपरिवर्तनीय चर (immutable variables) (एक नए टैब में खुलता है) होना।

सोर्स कोड सत्यापन उपकरण

अनुबंधों को सत्यापित करने की पारंपरिक प्रक्रिया जटिल हो सकती है। यही कारण है कि हमारे पास इथेरियम पर तैनात स्मार्ट अनुबंधों के लिए सोर्स कोड को सत्यापित करने के उपकरण हैं। ये उपकरण सोर्स कोड सत्यापन के बड़े हिस्सों को स्वचालित करते हैं और उपयोगकर्ताओं के लाभ के लिए सत्यापित अनुबंधों को भी क्यूरेट करते हैं।

Etherscan

यद्यपि इसे मुख्य रूप से एक इथेरियम ब्लॉक एक्सप्लोरर के रूप में जाना जाता है, Etherscan स्मार्ट अनुबंध डेवलपर्स और उपयोगकर्ताओं के लिए एक सोर्स कोड सत्यापन सेवा (एक नए टैब में खुलता है) भी प्रदान करता है।

Etherscan आपको मूल डेटा पेलोड (सोर्स कोड, लाइब्रेरी पता, कंपाइलर सेटिंग्स, अनुबंध पता, आदि) से अनुबंध बाइटकोड को पुनर्संकलित करने की अनुमति देता है। यदि पुनर्संकलित बाइटकोड ऑनचेन अनुबंध के बाइटकोड (और कंस्ट्रक्टर मापदंडों) से जुड़ा है, तो अनुबंध सत्यापित हो जाता है (एक नए टैब में खुलता है)

एक बार सत्यापित होने के बाद, आपके अनुबंध के सोर्स कोड को "Verified" लेबल प्राप्त होता है और दूसरों के ऑडिट के लिए Etherscan पर प्रकाशित किया जाता है। इसे Verified Contracts (एक नए टैब में खुलता है) अनुभाग में भी जोड़ा जाता है—जो सत्यापित सोर्स कोड वाले स्मार्ट अनुबंधों का एक भंडार है।

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

Etherscan पर अनुबंधों को सत्यापित करने के बारे में अधिक जानकारी (एक नए टैब में खुलता है)

Blockscout

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

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

Sourcify

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

Etherscan के विपरीत, Sourcify मेटाडेटा हैश के साथ पूर्ण मिलान का समर्थन करता है। सत्यापित अनुबंधों को HTTP और IPFS (एक नए टैब में खुलता है) पर इसके सार्वजनिक भंडार (एक नए टैब में खुलता है) में परोसा जाता है, जो एक विकेंद्रीकृत, सामग्री-संबोधित (content-addressed) (एक नए टैब में खुलता है) स्टोरेज है। यह IPFS पर अनुबंध की मेटाडेटा फ़ाइल प्राप्त करने की अनुमति देता है क्योंकि जोड़ा गया मेटाडेटा हैश एक IPFS हैश है।

इसके अतिरिक्त, कोई भी IPFS पर सोर्स कोड फ़ाइलें प्राप्त कर सकता है, क्योंकि इन फ़ाइलों के IPFS हैश भी मेटाडेटा में पाए जाते हैं। किसी अनुबंध को इसके API या UI (एक नए टैब में खुलता है) पर मेटाडेटा फ़ाइल और सोर्स फ़ाइलें प्रदान करके, या प्लगइन्स का उपयोग करके सत्यापित किया जा सकता है। Sourcify मॉनिटरिंग टूल नए ब्लॉक पर अनुबंध निर्माण को भी सुनता है और यदि उनके मेटाडेटा और सोर्स फ़ाइलें IPFS पर प्रकाशित होती हैं तो अनुबंधों को सत्यापित करने का प्रयास करता है।

Sourcify पर अनुबंधों को सत्यापित करने के बारे में अधिक जानकारी (एक नए टैब में खुलता है)

Tenderly

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

किसी अनुबंध को निजी या सार्वजनिक रूप से सत्यापित करना संभव है। यदि निजी तौर पर सत्यापित किया जाता है, तो स्मार्ट अनुबंध केवल आपको (और आपके प्रोजेक्ट के अन्य सदस्यों को) दिखाई देता है। किसी अनुबंध को सार्वजनिक रूप से सत्यापित करने से यह Tenderly प्लेटफ़ॉर्म का उपयोग करने वाले सभी लोगों को दिखाई देता है।

आप डैशबोर्ड (एक नए टैब में खुलता है), Tenderly Hardhat प्लगइन (एक नए टैब में खुलता है), या CLI (एक नए टैब में खुलता है) का उपयोग करके अपने अनुबंधों को सत्यापित कर सकते हैं।

डैशबोर्ड के माध्यम से अनुबंधों को सत्यापित करते समय, आपको Solidity कंपाइलर द्वारा उत्पन्न सोर्स फ़ाइल या मेटाडेटा फ़ाइल, पता/नेटवर्क, और कंपाइलर सेटिंग्स आयात करने की आवश्यकता होती है।

Tenderly Hardhat प्लगइन का उपयोग करने से कम प्रयास के साथ सत्यापन प्रक्रिया पर अधिक नियंत्रण मिलता है, जिससे आप स्वचालित (नो-कोड) और मैन्युअल (कोड-आधारित) सत्यापन के बीच चयन कर सकते हैं।

आगे की पढ़ाई