मुख्य आशयावर जा
Change page

स्मार्ट कॉन्ट्रॅक्ट्सची पडताळणी

स्मार्ट कॉन्ट्रॅक्ट्स "विश्वासरहित" (trustless) असण्यासाठी डिझाइन केलेले असतात, याचा अर्थ असा की वापरकर्त्यांना कॉन्ट्रॅक्टशी संवाद साधण्यापूर्वी तृतीय पक्षांवर (उदा. डेव्हलपर्स आणि कंपन्या) विश्वास ठेवण्याची आवश्यकता नसावी. विश्वासहीनतेची (trustlessness) एक आवश्यकता म्हणून, वापरकर्ते आणि इतर डेव्हलपर्सना स्मार्ट कॉन्ट्रॅक्टचा सोर्स कोड पडताळता आला पाहिजे. सोर्स कोड पडताळणी वापरकर्त्यांना आणि डेव्हलपर्सना खात्री देते की प्रकाशित केलेला कॉन्ट्रॅक्ट कोड हाच इथेरियम ब्लॉकचेनवरील कॉन्ट्रॅक्ट पत्त्यावर चालणारा कोड आहे.

"सोर्स कोड पडताळणी" आणि "औपचारिक पडताळणी" यातील फरक समजून घेणे महत्त्वाचे आहे. सोर्स कोड पडताळणी, ज्याचे खाली सविस्तर स्पष्टीकरण दिले जाईल, म्हणजे उच्च-स्तरीय भाषेतील (उदा. Solidity) स्मार्ट कॉन्ट्रॅक्टचा दिलेला सोर्स कोड कॉन्ट्रॅक्ट पत्त्यावर कार्यान्वित होणाऱ्या त्याच बाइटकोडमध्ये संकलित (compile) होतो हे पडताळणे. तथापि, औपचारिक पडताळणी स्मार्ट कॉन्ट्रॅक्टच्या अचूकतेची पडताळणी करते, म्हणजेच कॉन्ट्रॅक्ट अपेक्षेप्रमाणे वागते हे सुनिश्चित करते. संदर्भानुसार बदलत असले तरी, कॉन्ट्रॅक्ट पडताळणीचा अर्थ सहसा सोर्स कोड पडताळणी असाच होतो.

सोर्स कोड पडताळणी म्हणजे काय?

इथेरियम व्हर्च्युअल मशीन (EVM) मध्ये स्मार्ट कॉन्ट्रॅक्टची प्रस्थापना करण्यापूर्वी, डेव्हलपर्स कॉन्ट्रॅक्टचा सोर्स कोड—Solidity मध्ये लिहिलेल्या किंवा इतर उच्च-स्तरीय प्रोग्रामिंग भाषेतील सूचना—बाइटकोडमध्ये संकलित (compile) करतात. EVM उच्च-स्तरीय सूचनांचा अर्थ लावू शकत नसल्यामुळे, EVM मध्ये कॉन्ट्रॅक्ट लॉजिक कार्यान्वित करण्यासाठी सोर्स कोडचे बाइटकोडमध्ये (म्हणजेच निम्न-स्तरीय, मशीन सूचना) संकलन करणे आवश्यक आहे.

सोर्स कोड पडताळणी म्हणजे स्मार्ट कॉन्ट्रॅक्टचा सोर्स कोड आणि कॉन्ट्रॅक्ट तयार करताना वापरलेला संकलित बाइटकोड यांची तुलना करून त्यातील कोणताही फरक शोधणे. स्मार्ट कॉन्ट्रॅक्ट्सची पडताळणी करणे महत्त्वाचे आहे कारण जाहिरात केलेला कॉन्ट्रॅक्ट कोड ब्लॉकचेनवर चालणाऱ्या कोडपेक्षा वेगळा असू शकतो.

स्मार्ट कॉन्ट्रॅक्ट पडताळणीमुळे मशीन कोड न वाचता, कॉन्ट्रॅक्ट ज्या उच्च-स्तरीय भाषेत लिहिले आहे त्याद्वारे ते काय करते याची तपासणी करणे शक्य होते. फंक्शन्स, व्हॅल्यूज आणि सहसा व्हेरिएबलची नावे आणि कमेंट्स मूळ सोर्स कोडप्रमाणेच राहतात जो संकलित आणि प्रस्थापित केला जातो. यामुळे कोड वाचणे खूप सोपे होते. सोर्स पडताळणी कोड डॉक्युमेंटेशनची तरतूद देखील करते, जेणेकरून अंतिम वापरकर्त्यांना स्मार्ट कॉन्ट्रॅक्ट कशासाठी डिझाइन केले आहे हे समजते.

पूर्ण पडताळणी म्हणजे काय?

सोर्स कोडचे काही भाग असे असतात जे संकलित बाइटकोडवर परिणाम करत नाहीत जसे की कमेंट्स किंवा व्हेरिएबलची नावे. याचा अर्थ असा की भिन्न व्हेरिएबल नावे आणि भिन्न कमेंट्स असलेले दोन सोर्स कोड एकाच कॉन्ट्रॅक्टची पडताळणी करू शकतील. यामुळे, एखादा दुर्भावनापूर्ण व्यक्ती सोर्स कोडमध्ये फसव्या कमेंट्स जोडू शकतो किंवा दिशाभूल करणारी व्हेरिएबल नावे देऊ शकतो आणि मूळ सोर्स कोडपेक्षा वेगळ्या सोर्स कोडसह कॉन्ट्रॅक्टची पडताळणी करून घेऊ शकतो.

सोर्स कोडच्या अचूकतेसाठी क्रिप्टोग्राफिक हमी आणि संकलन माहितीचा फिंगरप्रिंट म्हणून बाइटकोडमध्ये अतिरिक्त डेटा जोडून हे टाळणे शक्य आहे. आवश्यक माहिती Solidity च्या कॉन्ट्रॅक्ट मेटाडेटा (opens in a new tab) मध्ये आढळते आणि या फाईलचा हॅश कॉन्ट्रॅक्टच्या बाइटकोडमध्ये जोडला जातो. तुम्ही हे मेटाडेटा प्लेग्राउंड (opens in a new tab) मध्ये प्रत्यक्ष पाहू शकता.

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

मेटाडेटा हॅशचा वापर करणाऱ्या या प्रकारच्या पडताळणीला "पूर्ण पडताळणी (opens in a new tab)" (तसेच "परिपूर्ण पडताळणी") असे म्हटले जाते. जर मेटाडेटा हॅश जुळत नसतील किंवा पडताळणीमध्ये विचारात घेतले जात नसतील तर तो "आंशिक जुळणी (partial match)" असेल, जो सध्या कॉन्ट्रॅक्ट्सची पडताळणी करण्याचा अधिक सामान्य मार्ग आहे. पूर्ण पडताळणीशिवाय दुर्भावनापूर्ण कोड समाविष्ट करणे (opens in a new tab) शक्य आहे जो पडताळलेल्या सोर्स कोडमध्ये दिसून येणार नाही. बहुतेक डेव्हलपर्सना पूर्ण पडताळणीबद्दल माहिती नसते आणि ते त्यांच्या संकलनाची मेटाडेटा फाईल ठेवत नाहीत, त्यामुळे आंशिक पडताळणी ही आतापर्यंत कॉन्ट्रॅक्ट्सची पडताळणी करण्याची डी फॅक्टो (de facto) पद्धत राहिली आहे.

सोर्स कोड पडताळणी का महत्त्वाची आहे?

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

विश्वासहीनता हा स्मार्ट कॉन्ट्रॅक्ट्स आणि विकेंद्रित ॲप्लिकेशन्स (dapps) साठी सर्वात मोठा आधार आहे. स्मार्ट कॉन्ट्रॅक्ट्स "अपरिवर्तनीय" असतात आणि त्यात बदल करता येत नाही; कॉन्ट्रॅक्ट केवळ प्रस्थापनेच्या वेळी कोडमध्ये परिभाषित केलेले बिझनेस लॉजिक कार्यान्वित करेल. याचा अर्थ डेव्हलपर्स आणि एंटरप्रायजेस इथेरियमवर प्रस्थापना केल्यानंतर कॉन्ट्रॅक्टच्या कोडमध्ये छेडछाड करू शकत नाहीत.

स्मार्ट कॉन्ट्रॅक्ट विश्वासरहित होण्यासाठी, कॉन्ट्रॅक्ट कोड स्वतंत्र पडताळणीसाठी उपलब्ध असावा. प्रत्येक स्मार्ट कॉन्ट्रॅक्टसाठी संकलित बाइटकोड ब्लॉकचेनवर सार्वजनिकरित्या उपलब्ध असला तरी, निम्न-स्तरीय भाषा समजणे कठीण आहे—डेव्हलपर्स आणि वापरकर्ते दोघांसाठीही.

प्रोजेक्ट्स त्यांच्या कॉन्ट्रॅक्ट्सचा सोर्स कोड प्रकाशित करून विश्वास गृहीतके कमी करतात. परंतु यामुळे दुसरी समस्या निर्माण होते: प्रकाशित केलेला सोर्स कोड कॉन्ट्रॅक्ट बाइटकोडशी जुळतो हे पडताळणे कठीण आहे. या परिस्थितीत, विश्वासहीनतेचे मूल्य गमावले जाते कारण वापरकर्त्यांना डेव्हलपर्सवर विश्वास ठेवावा लागतो की ते ब्लॉकचेनवर प्रस्थापित करण्यापूर्वी कॉन्ट्रॅक्टचे बिझनेस लॉजिक बदलणार नाहीत (म्हणजेच बाइटकोड बदलून).

सोर्स कोड पडताळणी टूल्स हमी देतात की स्मार्ट कॉन्ट्रॅक्टच्या सोर्स कोड फाईल्स असेंब्ली कोडशी जुळतात. याचा परिणाम म्हणजे एक विश्वासरहित इकोसिस्टम, जिथे वापरकर्ते तृतीय पक्षांवर आंधळेपणाने विश्वास ठेवत नाहीत आणि त्याऐवजी कॉन्ट्रॅक्टमध्ये निधी जमा करण्यापूर्वी कोडची पडताळणी करतात.

वापरकर्ता सुरक्षा

स्मार्ट कॉन्ट्रॅक्ट्समध्ये, सहसा खूप पैसा स्टेकवर असतो. यामुळे उच्च सुरक्षा हमी आणि स्मार्ट कॉन्ट्रॅक्ट वापरण्यापूर्वी त्याच्या लॉजिकची पडताळणी करणे आवश्यक होते. समस्या अशी आहे की बेईमान डेव्हलपर्स स्मार्ट कॉन्ट्रॅक्टमध्ये दुर्भावनापूर्ण कोड समाविष्ट करून वापरकर्त्यांची फसवणूक करू शकतात. पडताळणीशिवाय, दुर्भावनापूर्ण स्मार्ट कॉन्ट्रॅक्ट्समध्ये बॅकडोअर्स (opens in a new tab), वादग्रस्त ॲक्सेस कंट्रोल यंत्रणा, शोषण करण्यायोग्य असुरक्षा आणि वापरकर्त्याच्या सुरक्षिततेला धोका निर्माण करणाऱ्या इतर गोष्टी असू शकतात ज्या शोधल्या जाणार नाहीत.

स्मार्ट कॉन्ट्रॅक्टच्या सोर्स कोड फाईल्स प्रकाशित केल्याने ऑडिटर्ससारख्या स्वारस्य असलेल्यांना संभाव्य हल्ल्याच्या मार्गांसाठी कॉन्ट्रॅक्टचे मूल्यांकन करणे सोपे होते. अनेक पक्षांनी स्वतंत्रपणे स्मार्ट कॉन्ट्रॅक्टची पडताळणी केल्यामुळे, वापरकर्त्यांना त्याच्या सुरक्षिततेची मजबूत हमी मिळते.

इथेरियम स्मार्ट कॉन्ट्रॅक्ट्ससाठी सोर्स कोडची पडताळणी कशी करावी

इथेरियमवर स्मार्ट कॉन्ट्रॅक्टची प्रस्थापना करण्यासाठी एका विशेष पत्त्यावर डेटा पेलोडसह (संकलित बाइटकोड) व्यवहार पाठवणे आवश्यक आहे. डेटा पेलोड सोर्स कोड संकलित करून तयार केला जातो, तसेच व्यवहारातील डेटा पेलोडमध्ये जोडलेल्या कॉन्ट्रॅक्ट इन्स्टन्सचे कन्स्ट्रक्टर आर्ग्युमेंट्स (opens in a new tab) असतात. संकलन हे डिटरमिनिस्टिक (deterministic) असते, याचा अर्थ जर समान सोर्स फाईल्स आणि संकलन सेटिंग्ज (उदा. कंपायलर आवृत्ती, ऑप्टिमायझर) वापरल्या गेल्या तर ते नेहमी समान आउटपुट (म्हणजेच कॉन्ट्रॅक्ट बाइटकोड) तयार करते.

A diagram showing showing smart contract source code verification

स्मार्ट कॉन्ट्रॅक्टची पडताळणी करताना मुळात खालील पायऱ्यांचा समावेश असतो:

  1. कंपायलरला सोर्स फाईल्स आणि संकलन सेटिंग्ज इनपुट करा.

  2. कंपायलर कॉन्ट्रॅक्टचा बाइटकोड आउटपुट करतो

  3. दिलेल्या पत्त्यावर प्रस्थापित केलेल्या कॉन्ट्रॅक्टचा बाइटकोड मिळवा

  4. प्रस्थापित बाइटकोडची पुनर्संकलित बाइटकोडशी तुलना करा. जर कोड जुळले, तर दिलेल्या सोर्स कोड आणि संकलन सेटिंग्जसह कॉन्ट्रॅक्टची पडताळणी होते.

  5. याव्यतिरिक्त, जर बाइटकोडच्या शेवटी असलेले मेटाडेटा हॅश जुळले, तर ती पूर्ण जुळणी (full match) असेल.

लक्षात घ्या की हे पडताळणीचे एक साधे वर्णन आहे आणि असे अनेक अपवाद आहेत जे यासह कार्य करणार नाहीत जसे की अपरिवर्तनीय व्हेरिएबल्स (opens in a new tab) असणे.

सोर्स कोड पडताळणी टूल्स

कॉन्ट्रॅक्ट्सची पडताळणी करण्याची पारंपारिक प्रक्रिया गुंतागुंतीची असू शकते. म्हणूनच आमच्याकडे इथेरियमवर प्रस्थापित केलेल्या स्मार्ट कॉन्ट्रॅक्ट्ससाठी सोर्स कोडची पडताळणी करण्यासाठी टूल्स आहेत. ही टूल्स सोर्स कोड पडताळणीचा मोठा भाग स्वयंचलित करतात आणि वापरकर्त्यांच्या फायद्यासाठी पडताळलेल्या कॉन्ट्रॅक्ट्सचे क्युरेशन देखील करतात.

Etherscan

जरी प्रामुख्याने इथेरियम ब्लॉक एक्सप्लोरर म्हणून ओळखले जात असले तरी, Etherscan स्मार्ट कॉन्ट्रॅक्ट डेव्हलपर्स आणि वापरकर्त्यांसाठी सोर्स कोड पडताळणी सेवा (opens in a new tab) देखील देते.

Etherscan तुम्हाला मूळ डेटा पेलोडमधून (सोर्स कोड, लायब्ररी पत्ता, कंपायलर सेटिंग्ज, कॉन्ट्रॅक्ट पत्ता इ.) कॉन्ट्रॅक्ट बाइटकोड पुनर्संकलित करण्याची अनुमती देते. जर पुनर्संकलित बाइटकोड ऑनचेन कॉन्ट्रॅक्टच्या बाइटकोडशी (आणि कन्स्ट्रक्टर पॅरामीटर्सशी) संबंधित असेल, तर कॉन्ट्रॅक्टची पडताळणी होते (opens in a new tab).

एकदा पडताळणी झाल्यानंतर, तुमच्या कॉन्ट्रॅक्टच्या सोर्स कोडला "Verified" लेबल मिळते आणि इतरांना ऑडिट करण्यासाठी ते Etherscan वर प्रकाशित केले जाते. हे Verified Contracts (opens in a new tab) विभागात देखील जोडले जाते—जे पडताळलेल्या सोर्स कोडसह स्मार्ट कॉन्ट्रॅक्ट्सचे भांडार आहे.

Etherscan हे कॉन्ट्रॅक्ट्सची पडताळणी करण्यासाठी सर्वाधिक वापरले जाणारे टूल आहे. तथापि, Etherscan च्या कॉन्ट्रॅक्ट पडताळणीमध्ये एक कमतरता आहे: ते ऑनचेन बाइटकोड आणि पुनर्संकलित बाइटकोडच्या मेटाडेटा हॅश ची तुलना करण्यात अपयशी ठरते. त्यामुळे Etherscan मधील जुळण्या या आंशिक जुळण्या (partial matches) असतात.

Etherscan वर कॉन्ट्रॅक्ट्सची पडताळणी करण्याबद्दल अधिक (opens in a new tab).

Blockscout

Blockscout (opens in a new tab) हा एक ओपन-सोर्स ब्लॉक एक्सप्लोरर आहे जो स्मार्ट कॉन्ट्रॅक्ट डेव्हलपर्स आणि वापरकर्त्यांसाठी कॉन्ट्रॅक्ट पडताळणी सेवा (opens in a new tab) देखील प्रदान करतो. एक ओपन-सोर्स पर्याय म्हणून, Blockscout पडताळणी कशी केली जाते यामध्ये पारदर्शकता देते आणि पडताळणी प्रक्रिया सुधारण्यासाठी कम्युनिटी योगदानास सक्षम करते.

इतर पडताळणी सेवांप्रमाणेच, Blockscout तुम्हाला बाइटकोड पुनर्संकलित करून आणि प्रस्थापित कॉन्ट्रॅक्टशी त्याची तुलना करून तुमच्या कॉन्ट्रॅक्टच्या सोर्स कोडची पडताळणी करण्याची अनुमती देते. एकदा पडताळणी झाल्यानंतर, तुमच्या कॉन्ट्रॅक्टला पडताळणी स्थिती प्राप्त होते आणि सोर्स कोड ऑडिटिंग आणि संवादासाठी सार्वजनिकरित्या उपलब्ध होतो. सोप्या ब्राउझिंग आणि शोधासाठी पडताळलेले कॉन्ट्रॅक्ट्स Blockscout च्या पडताळलेल्या कॉन्ट्रॅक्ट्स रिपॉझिटरी (opens in a new tab) मध्ये देखील सूचीबद्ध केले जातात.

Sourcify

Sourcify (opens in a new tab) हे कॉन्ट्रॅक्ट्सची पडताळणी करण्यासाठी आणखी एक टूल आहे जे ओपन-सोर्स आणि विकेंद्रित आहे. हा ब्लॉक एक्सप्लोरर नाही आणि केवळ विविध EVM आधारित नेटवर्क्सवरील (opens in a new tab) कॉन्ट्रॅक्ट्सची पडताळणी करतो. हे इतर टूल्ससाठी त्यावर तयार करण्यासाठी सार्वजनिक पायाभूत सुविधा म्हणून कार्य करते आणि मेटाडेटा फाईलमध्ये आढळणाऱ्या ABI आणि NatSpec (opens in a new tab) कमेंट्स वापरून अधिक मानवी-अनुकूल कॉन्ट्रॅक्ट संवाद सक्षम करण्याचे उद्दिष्ट ठेवते.

Etherscan च्या विपरीत, Sourcify मेटाडेटा हॅशसह पूर्ण जुळण्यांना (full matches) समर्थन देते. पडताळलेले कॉन्ट्रॅक्ट्स HTTP आणि IPFS (opens in a new tab) वरील त्याच्या सार्वजनिक रिपॉझिटरीमध्ये (opens in a new tab) सर्व्ह केले जातात, जे एक विकेंद्रित, कंटेंट-ॲड्रेस्ड (opens in a new tab) स्टोरेज आहे. यामुळे IPFS वरून कॉन्ट्रॅक्टची मेटाडेटा फाईल मिळवणे शक्य होते कारण जोडलेला मेटाडेटा हॅश हा IPFS हॅश असतो.

याव्यतिरिक्त, कोणीही IPFS वरून सोर्स कोड फाईल्स देखील मिळवू शकतो, कारण या फाईल्सचे IPFS हॅश देखील मेटाडेटामध्ये आढळतात. त्याच्या API किंवा UI (opens in a new tab) वर मेटाडेटा फाईल आणि सोर्स फाईल्स प्रदान करून किंवा प्लगइन्स वापरून कॉन्ट्रॅक्टची पडताळणी केली जाऊ शकते. Sourcify मॉनिटरिंग टूल नवीन ब्लॉक्सवरील कॉन्ट्रॅक्ट निर्मिती देखील ऐकते आणि जर त्यांचा मेटाडेटा आणि सोर्स फाईल्स IPFS वर प्रकाशित केल्या असतील तर कॉन्ट्रॅक्ट्सची पडताळणी करण्याचा प्रयत्न करते.

Sourcify वर कॉन्ट्रॅक्ट्सची पडताळणी करण्याबद्दल अधिक (opens in a new tab).

Tenderly

Tenderly प्लॅटफॉर्म (opens in a new tab) Web3 डेव्हलपर्सना स्मार्ट कॉन्ट्रॅक्ट्स तयार करण्यास, त्यांची चाचणी करण्यास, निरीक्षण करण्यास आणि ऑपरेट करण्यास सक्षम करते. डिबगिंग टूल्सना ऑब्झर्वेबिलिटी आणि इन्फ्रास्ट्रक्चर बिल्डिंग ब्लॉक्ससह एकत्रित करून, Tenderly डेव्हलपर्सना स्मार्ट कॉन्ट्रॅक्ट डेव्हलपमेंटला गती देण्यास मदत करते. Tenderly वैशिष्ट्ये पूर्णपणे सक्षम करण्यासाठी, डेव्हलपर्सना अनेक पद्धती वापरून सोर्स कोड पडताळणी करणे (opens in a new tab) आवश्यक आहे.

कॉन्ट्रॅक्टची खाजगी किंवा सार्वजनिकरित्या पडताळणी करणे शक्य आहे. जर खाजगीरित्या पडताळणी केली असेल, तर स्मार्ट कॉन्ट्रॅक्ट केवळ तुम्हाला (आणि तुमच्या प्रोजेक्टमधील इतर सदस्यांना) दृश्यमान असेल. कॉन्ट्रॅक्टची सार्वजनिकरित्या पडताळणी केल्याने ते Tenderly प्लॅटफॉर्म वापरणाऱ्या प्रत्येकासाठी दृश्यमान होते.

तुम्ही डॅशबोर्ड (opens in a new tab), Tenderly Hardhat प्लगइन (opens in a new tab), किंवा CLI (opens in a new tab) वापरून तुमच्या कॉन्ट्रॅक्ट्सची पडताळणी करू शकता.

डॅशबोर्डद्वारे कॉन्ट्रॅक्ट्सची पडताळणी करताना, तुम्हाला Solidity कंपायलरद्वारे व्युत्पन्न केलेली सोर्स फाईल किंवा मेटाडेटा फाईल, पत्ता/नेटवर्क आणि कंपायलर सेटिंग्ज आयात करणे आवश्यक आहे.

Tenderly Hardhat प्लगइन वापरल्याने कमी प्रयत्नात पडताळणी प्रक्रियेवर अधिक नियंत्रण मिळते, ज्यामुळे तुम्हाला स्वयंचलित (नो-कोड) आणि मॅन्युअल (कोड-आधारित) पडताळणी दरम्यान निवड करणे शक्य होते.

पुढील वाचन