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

स्मार्ट कॉन्ट्रॅक्ट्सची चाचणी

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

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

पूर्वतयारी

हे पृष्ठ इथेरियम नेटवर्कवर प्रस्थापित करण्यापूर्वी स्मार्ट कॉन्ट्रॅक्ट्सची चाचणी कशी करावी हे स्पष्ट करते. हे गृहीत धरते की तुम्हाला स्मार्ट कॉन्ट्रॅक्ट्सची माहिती आहे.

स्मार्ट कॉन्ट्रॅक्ट चाचणी म्हणजे काय?

स्मार्ट कॉन्ट्रॅक्ट चाचणी ही स्मार्ट कॉन्ट्रॅक्टचा कोड अपेक्षेप्रमाणे काम करतो की नाही हे पडताळून पाहण्याची प्रक्रिया आहे. एखादे विशिष्ट स्मार्ट कॉन्ट्रॅक्ट विश्वासार्हता, उपयोगिता आणि सुरक्षेच्या आवश्यकता पूर्ण करते की नाही हे तपासण्यासाठी चाचणी उपयुक्त आहे.

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

स्मार्ट कॉन्ट्रॅक्ट्सची चाचणी करणे का महत्त्वाचे आहे?

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

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

स्मार्ट कॉन्ट्रॅक्ट्सची चाचणी करण्याच्या पद्धती

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

स्वयंचलित चाचणी

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

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

मॅन्युअल चाचणी

मॅन्युअल चाचणी मानवी-सहाय्यित असते आणि स्मार्ट कॉन्ट्रॅक्टच्या अचूकतेचे विश्लेषण करताना तुमच्या टेस्ट सूटमधील प्रत्येक टेस्ट केस एकामागून एक कार्यान्वित करणे समाविष्ट असते. हे स्वयंचलित चाचणीच्या विपरीत आहे जिथे तुम्ही एकाच वेळी कॉन्ट्रॅक्टवर अनेक वेगळ्या चाचण्या चालवू शकता आणि सर्व अयशस्वी आणि उत्तीर्ण चाचण्या दर्शविणारा अहवाल मिळवू शकता.

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

प्रभावी मॅन्युअल चाचणीसाठी लक्षणीय संसाधने (कौशल्य, वेळ, पैसा आणि प्रयत्न) आवश्यक असतात आणि मानवी त्रुटीमुळे चाचण्या कार्यान्वित करताना काही त्रुटी चुकणे शक्य आहे. परंतु मॅन्युअल चाचणी देखील फायदेशीर ठरू शकते—उदाहरणार्थ, मानवी परीक्षक (उदा. ऑडिटर) स्वयंचलित चाचणी साधन चुकवू शकणाऱ्या एज केसेस शोधण्यासाठी अंतर्ज्ञानाचा वापर करू शकतो.

स्मार्ट कॉन्ट्रॅक्ट्ससाठी स्वयंचलित चाचणी

युनिट चाचणी

युनिट चाचणी कॉन्ट्रॅक्टच्या कार्यांचे स्वतंत्रपणे मूल्यांकन करते आणि प्रत्येक घटक योग्यरित्या कार्य करत असल्याचे तपासते. चांगल्या युनिट चाचण्या सोप्या, चालवण्यास जलद असाव्यात आणि चाचण्या अयशस्वी झाल्यास काय चूक झाली याची स्पष्ट कल्पना द्यावी.

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

स्मार्ट कॉन्ट्रॅक्ट्सच्या युनिट चाचणीसाठी मार्गदर्शक तत्त्वे

1. तुमच्या कॉन्ट्रॅक्टचे बिझनेस लॉजिक आणि वर्कफ्लो समजून घ्या

युनिट चाचण्या लिहिण्यापूर्वी, स्मार्ट कॉन्ट्रॅक्ट कोणती कार्यक्षमता देते आणि वापरकर्ते त्या कार्यांमध्ये कसा प्रवेश करतील आणि त्यांचा वापर कसा करतील हे जाणून घेणे उपयुक्त ठरते. हे विशेषतः हॅपी पाथ चाचण्या (opens in a new tab) चालवण्यासाठी उपयुक्त आहे जे कॉन्ट्रॅक्टमधील कार्ये वैध वापरकर्ता इनपुटसाठी योग्य आउटपुट देतात की नाही हे निर्धारित करतात. आम्ही ही संकल्पना लिलाव कॉन्ट्रॅक्ट (opens in a new tab)च्या या (संक्षिप्त) उदाहरणाचा वापर करून स्पष्ट करू.

हे एक साधे लिलाव कॉन्ट्रॅक्ट आहे जे बोली लावण्याच्या कालावधीत बोली प्राप्त करण्यासाठी डिझाइन केलेले आहे. जर highestBid वाढली, तर मागील सर्वोच्च बोली लावणाऱ्याला त्यांचे पैसे मिळतात; एकदा बोली लावण्याचा कालावधी संपला की, beneficiary त्यांचे पैसे मिळवण्यासाठी कॉन्ट्रॅक्टला कॉल करतो.

यासारख्या कॉन्ट्रॅक्टसाठी युनिट चाचण्यांमध्ये वापरकर्ता कॉन्ट्रॅक्टशी संवाद साधताना कॉल करू शकणाऱ्या विविध कार्यांचा समावेश असेल. याचे एक उदाहरण म्हणजे युनिट चाचणी जी लिलाव चालू असताना वापरकर्ता बोली लावू शकतो की नाही हे तपासते (म्हणजेच, bid() ला केलेले कॉल्स यशस्वी होतात) किंवा वापरकर्ता सध्याच्या highestBid पेक्षा जास्त बोली लावू शकतो की नाही हे तपासते.

कॉन्ट्रॅक्टचा ऑपरेशनल वर्कफ्लो समजून घेतल्याने अंमलबजावणी आवश्यकता पूर्ण करते की नाही हे तपासणाऱ्या युनिट चाचण्या लिहिण्यास मदत होते. उदाहरणार्थ, लिलाव कॉन्ट्रॅक्ट निर्दिष्ट करते की लिलाव संपल्यावर वापरकर्ते बोली लावू शकत नाहीत (म्हणजेच, जेव्हा auctionEndTime हे block.timestamp पेक्षा कमी असते). अशा प्रकारे, डेव्हलपर एक युनिट चाचणी चालवू शकतो जी लिलाव संपल्यावर bid() फंक्शनला केलेले कॉल्स यशस्वी होतात की अयशस्वी होतात हे तपासते (म्हणजेच, जेव्हा auctionEndTime > block.timestamp).

2. कॉन्ट्रॅक्ट अंमलबजावणीशी संबंधित सर्व गृहीतकांचे मूल्यांकन करा

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

अनेक युनिट चाचणी फ्रेमवर्क्स तुम्हाला दृढकथने (assertions) तयार करण्याची परवानगी देतात—साधी विधाने जी कॉन्ट्रॅक्ट काय करू शकते आणि काय करू शकत नाही हे सांगतात—आणि अंमलबजावणी अंतर्गत ती दृढकथने टिकून राहतात की नाही हे पाहण्यासाठी चाचण्या चालवतात. आधी वर्णन केलेल्या लिलाव कॉन्ट्रॅक्टवर काम करणारा डेव्हलपर नकारात्मक चाचण्या चालवण्यापूर्वी त्याच्या वर्तनाबद्दल खालील दृढकथने करू शकतो:

  • लिलाव संपल्यावर किंवा सुरू न झाल्यावर वापरकर्ते बोली लावू शकत नाहीत.

  • जर बोली स्वीकारार्ह मर्यादेपेक्षा कमी असेल तर लिलाव कॉन्ट्रॅक्ट रिव्हर्ट होते.

  • जे वापरकर्ते बोली जिंकण्यात अयशस्वी ठरतात त्यांच्या खात्यात त्यांचा निधी जमा केला जातो

टीप: गृहीतकांची चाचणी करण्याचा दुसरा मार्ग म्हणजे कॉन्ट्रॅक्टमध्ये फंक्शन मॉडिफायर्स (opens in a new tab) ट्रिगर करणाऱ्या चाचण्या लिहिणे, विशेषतः require, assert, आणि if…else विधाने.

3. कोड कव्हरेज मोजा

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

4. चांगल्या प्रकारे विकसित चाचणी फ्रेमवर्क्स वापरा

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

Solidity स्मार्ट कॉन्ट्रॅक्ट्ससाठी युनिट चाचणी फ्रेमवर्क्स वेगवेगळ्या भाषांमध्ये येतात (बहुतेक JavaScript, Python, आणि Rust). वेगवेगळ्या चाचणी फ्रेमवर्क्ससह युनिट चाचण्या कशा सुरू कराव्यात या माहितीसाठी खालील काही मार्गदर्शक तत्त्वे पहा:

एकत्रीकरण चाचणी

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

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

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

गुणधर्म-आधारित चाचणी

गुणधर्म-आधारित चाचणी ही स्मार्ट कॉन्ट्रॅक्ट काही परिभाषित गुणधर्म पूर्ण करते की नाही हे तपासण्याची प्रक्रिया आहे. गुणधर्म कॉन्ट्रॅक्टच्या वर्तनाबद्दल तथ्ये दृढकथन करतात जे वेगवेगळ्या परिस्थितींमध्ये सत्य राहणे अपेक्षित असते—स्मार्ट कॉन्ट्रॅक्ट गुणधर्माचे उदाहरण असू शकते "कॉन्ट्रॅक्टमधील अंकगणितीय ऑपरेशन्स कधीही ओव्हरफ्लो किंवा अंडरफ्लो होत नाहीत."

स्थिर विश्लेषण (Static analysis) आणि गतिशील विश्लेषण (dynamic analysis) ही गुणधर्म-आधारित चाचणी कार्यान्वित करण्यासाठी दोन सामान्य तंत्रे आहेत आणि दोन्ही हे सत्यापित करू शकतात की प्रोग्रामचा कोड (या प्रकरणात स्मार्ट कॉन्ट्रॅक्ट) काही पूर्वनिर्धारित गुणधर्म पूर्ण करतो. काही गुणधर्म-आधारित चाचणी साधने अपेक्षित कॉन्ट्रॅक्ट गुणधर्मांबद्दल पूर्वनिर्धारित नियमांसह येतात आणि त्या नियमांविरुद्ध कोड तपासतात, तर इतर तुम्हाला स्मार्ट कॉन्ट्रॅक्टसाठी सानुकूल गुणधर्म तयार करण्याची परवानगी देतात.

स्थिर विश्लेषण

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

कॉन्ट्रॅक्ट्सवर स्थिर विश्लेषण चालवण्यासाठी लिंटिंग (opens in a new tab) आणि स्थिर चाचणी (opens in a new tab) या सामान्य पद्धती आहेत. दोन्हीसाठी कंपायलरद्वारे आउटपुट केलेल्या अॅबस्ट्रॅक्ट सिंटॅक्स ट्रीज (opens in a new tab) आणि कंट्रोल फ्लो ग्राफ्स (opens in a new tab) सारख्या कॉन्ट्रॅक्टच्या अंमलबजावणीच्या निम्न-स्तरीय सादरीकरणांचे विश्लेषण करणे आवश्यक आहे.

बहुतेक प्रकरणांमध्ये, असुरक्षित रचनांचा वापर, सिंटॅक्स त्रुटी किंवा कॉन्ट्रॅक्टच्या कोडमधील कोडिंग मानकांचे उल्लंघन यासारख्या सुरक्षा समस्या शोधण्यासाठी स्थिर विश्लेषण उपयुक्त आहे. तथापि, स्थिर विश्लेषक सखोल असुरक्षितता शोधण्यात सामान्यतः कमकुवत असल्याचे ज्ञात आहे आणि ते जास्त फॉल्स पॉझिटिव्ह निर्माण करू शकतात.

गतिशील विश्लेषण

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

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

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

  1. अनेक परिस्थिती कव्हर करण्यासाठी टेस्ट केसेस लिहिणे कठीण आहे. गुणधर्म चाचणीसाठी फक्त तुम्हाला वर्तन आणि वर्तन तपासण्यासाठी डेटाची श्रेणी परिभाषित करणे आवश्यक आहे—प्रोग्राम परिभाषित गुणधर्मावर आधारित स्वयंचलितपणे टेस्ट केसेस तयार करतो.

  2. तुमचा टेस्ट सूट प्रोग्राममधील सर्व संभाव्य मार्गांना पुरेशा प्रमाणात कव्हर करू शकत नाही. 100% कव्हरेजसह देखील, एज केसेस चुकणे शक्य आहे.

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

स्मार्ट कॉन्ट्रॅक्ट्ससाठी गुणधर्म-आधारित चाचणी चालवण्यासाठी मार्गदर्शक तत्त्वे

गुणधर्म-आधारित चाचणी चालवणे सामान्यतः तुम्हाला स्मार्ट कॉन्ट्रॅक्टमध्ये सत्यापित करायचा असलेला गुणधर्म (उदा. पूर्णांक ओव्हरफ्लो (opens in a new tab) ची अनुपस्थिती) किंवा गुणधर्मांचा संग्रह परिभाषित करण्यापासून सुरू होते. गुणधर्म चाचण्या लिहिताना तुम्हाला मूल्यांची श्रेणी देखील परिभाषित करण्याची आवश्यकता असू शकते ज्यामध्ये प्रोग्राम व्यवहार इनपुटसाठी डेटा तयार करू शकतो.

एकदा योग्यरित्या कॉन्फिगर केल्यावर, गुणधर्म चाचणी साधन यादृच्छिकपणे व्युत्पन्न केलेल्या इनपुटसह तुमच्या स्मार्ट कॉन्ट्रॅक्टची कार्ये कार्यान्वित करेल. जर कोणतेही दृढकथन उल्लंघन असेल, तर तुम्हाला मूल्यांकनाखालील गुणधर्माचे उल्लंघन करणाऱ्या ठोस इनपुट डेटासह अहवाल मिळायला हवा. वेगवेगळ्या साधनांसह गुणधर्म-आधारित चाचणी चालवण्यास सुरुवात करण्यासाठी खालील काही मार्गदर्शक तत्त्वे पहा:

स्मार्ट कॉन्ट्रॅक्ट्ससाठी मॅन्युअल चाचणी

स्मार्ट कॉन्ट्रॅक्ट्सची मॅन्युअल चाचणी अनेकदा स्वयंचलित चाचण्या चालवल्यानंतर विकास चक्रात नंतर येते. चाचणीचा हा प्रकार स्मार्ट कॉन्ट्रॅक्टचे एक पूर्णपणे एकत्रित उत्पादन म्हणून मूल्यांकन करतो हे पाहण्यासाठी की ते तांत्रिक आवश्यकतांमध्ये निर्दिष्ट केल्याप्रमाणे कार्य करते की नाही.

स्थानिक ब्लॉकचेनवर कॉन्ट्रॅक्ट्सची चाचणी करणे

स्थानिक विकास वातावरणात केलेली स्वयंचलित चाचणी उपयुक्त डीबगिंग माहिती प्रदान करू शकते, परंतु तुम्हाला तुमचे स्मार्ट कॉन्ट्रॅक्ट उत्पादन वातावरणात कसे वागते हे जाणून घ्यायचे असेल. तथापि, मुख्य इथेरियम चेनवर प्रस्थापित करण्यासाठी गॅस शुल्क लागते—तुमच्या स्मार्ट कॉन्ट्रॅक्टमध्ये अद्याप बग असल्यास तुम्ही किंवा तुमचे वापरकर्ते वास्तविक पैसे गमावू शकता हे सांगायला नको.

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

स्थानिक ब्लॉकचेनवर कॉन्ट्रॅक्ट्स चालवणे मॅन्युअल एकत्रीकरण चाचणीचा एक प्रकार म्हणून उपयुक्त ठरू शकते. स्मार्ट कॉन्ट्रॅक्ट्स अत्यंत संयोज्य असतात, जे तुम्हाला विद्यमान प्रोटोकॉलसह एकत्रित करण्याची परवानगी देतात—परंतु तरीही तुम्हाला हे सुनिश्चित करावे लागेल की अशा जटिल ऑनचेन परस्परसंवादांमुळे योग्य परिणाम मिळतात.

डेव्हलपमेंट नेटवर्क्सबद्दल अधिक.

टेस्टनेट्सवर कॉन्ट्रॅक्ट्सची चाचणी करणे

टेस्ट नेटवर्क किंवा टेस्टनेट अगदी इथेरियम मेननेट प्रमाणेच काम करते, फक्त ते इथर (ETH) वापरते ज्याचे कोणतेही वास्तविक-जगातील मूल्य नसते. टेस्टनेट वर तुमचे कॉन्ट्रॅक्ट प्रस्थापित करणे म्हणजे कोणीही निधी धोक्यात न घालता त्याच्याशी संवाद साधू शकतो (उदा. dapp च्या फ्रंटएंडद्वारे).

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

स्थानिक ब्लॉकचेनवर चाचणी केल्यानंतर टेस्टनेटवर प्रस्थापित करणे आदर्श आहे कारण ते इथेरियम व्हर्च्युअल मशीनच्या वर्तनाच्या जवळ आहे. म्हणून, वास्तविक-जगातील परिस्थितींमध्ये स्मार्ट कॉन्ट्रॅक्टच्या ऑपरेशनचे मूल्यांकन करण्यासाठी अनेक इथेरियम-नेटिव्ह प्रकल्पांसाठी टेस्टनेटवर dapps प्रस्थापित करणे सामान्य आहे.

इथेरियम टेस्टनेट्सबद्दल अधिक.

चाचणी वि. औपचारिक पडताळणी

चाचणी काही डेटा इनपुटसाठी कॉन्ट्रॅक्ट अपेक्षित परिणाम देते याची पुष्टी करण्यास मदत करते, परंतु चाचण्यांदरम्यान न वापरलेल्या इनपुटसाठी ते निर्णायकपणे सिद्ध करू शकत नाही. म्हणून, स्मार्ट कॉन्ट्रॅक्टची चाचणी "कार्यात्मक अचूकतेची" हमी देऊ शकत नाही (म्हणजेच, ते हे दर्शवू शकत नाही की प्रोग्राम इनपुट मूल्यांच्या सर्व संचांसाठी आवश्यकतेनुसार वागतो).

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

गुणधर्म गणितीय परिभाषेत लिहिलेले असल्यामुळे, अनुमानाचे तार्किक नियम वापरून प्रणालीचे औपचारिक (गणितीय) मॉडेल तपशील पूर्ण करते हे सत्यापित करणे शक्य होते. अशा प्रकारे, औपचारिक पडताळणी साधने प्रणालीच्या अचूकतेचा 'गणितीय पुरावा' तयार करतात असे म्हटले जाते.

चाचणीच्या विपरीत, नमुना डेटासह कार्यान्वित करण्याची आवश्यकता न ठेवता स्मार्ट कॉन्ट्रॅक्टची अंमलबजावणी सर्व अंमलबजावणीसाठी (म्हणजेच, त्यात कोणतेही बग नाहीत) औपचारिक तपशील पूर्ण करते हे सत्यापित करण्यासाठी औपचारिक पडताळणीचा वापर केला जाऊ शकतो. यामुळे डझनभर युनिट चाचण्या चालवण्यात घालवलेला वेळ तर कमी होतोच, पण लपलेल्या असुरक्षितता पकडण्यातही ते अधिक प्रभावी आहे. असे म्हटले जात असले तरी, औपचारिक पडताळणी तंत्रे त्यांच्या अंमलबजावणीच्या अडचणी आणि उपयुक्ततेनुसार एका स्पेक्ट्रमवर असतात.

स्मार्ट कॉन्ट्रॅक्ट्ससाठी औपचारिक पडताळणीबद्दल अधिक.

चाचणी वि ऑडिट्स आणि बग बाउन्टीज

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

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

ऑडिट्स अशा ऑडिटर्सद्वारे केले जातात ज्यांना स्मार्ट कॉन्ट्रॅक्ट्समधील सुरक्षा त्रुटी आणि खराब विकास पद्धती शोधण्याचा अनुभव असतो. ऑडिटमध्ये सामान्यतः चाचणी (आणि शक्यतो औपचारिक पडताळणी) तसेच संपूर्ण कोडबेसचे मॅन्युअल पुनरावलोकन समाविष्ट असेल.

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

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

चाचणी साधने आणि लायब्ररी

युनिट चाचणी साधने

  • solidity-coverage (opens in a new tab) - Solidity मध्ये लिहिलेल्या स्मार्ट कॉन्ट्रॅक्ट्ससाठी कोड कव्हरेज साधन.

  • Waffle (opens in a new tab) - प्रगत स्मार्ट कॉन्ट्रॅक्ट विकास आणि चाचणीसाठी फ्रेमवर्क (ethers.js वर आधारित).

  • Remix Tests (opens in a new tab) - Solidity स्मार्ट कॉन्ट्रॅक्ट्सची चाचणी करण्यासाठी साधन. Remix IDE "Solidity Unit Testing" प्लगइन अंतर्गत कार्य करते जे कॉन्ट्रॅक्टसाठी टेस्ट केसेस लिहिण्यासाठी आणि चालवण्यासाठी वापरले जाते.

  • OpenZeppelin Test Helpers (opens in a new tab) - इथेरियम स्मार्ट कॉन्ट्रॅक्ट चाचणीसाठी दृढकथन लायब्ररी. तुमचे कॉन्ट्रॅक्ट्स अपेक्षेप्रमाणे वागतात याची खात्री करा!

  • Brownie युनिट चाचणी फ्रेमवर्क (opens in a new tab) - Brownie Pytest चा वापर करते, एक वैशिष्ट्यपूर्ण चाचणी फ्रेमवर्क जे तुम्हाला कमीतकमी कोडसह लहान चाचण्या लिहू देते, मोठ्या प्रकल्पांसाठी चांगले स्केल करते आणि अत्यंत विस्तारण्यायोग्य आहे.

  • Foundry Tests (opens in a new tab) - Foundry Forge ऑफर करते, एक जलद आणि लवचिक इथेरियम चाचणी फ्रेमवर्क जे साध्या युनिट चाचण्या, गॅस अनुकूलन तपासणी आणि कॉन्ट्रॅक्ट फझिंग कार्यान्वित करण्यास सक्षम आहे.

  • Hardhat Tests (opens in a new tab) - ethers.js, Mocha, आणि Chai वर आधारित स्मार्ट कॉन्ट्रॅक्ट्सची चाचणी करण्यासाठी फ्रेमवर्क.

  • ApeWorx (opens in a new tab) - इथेरियम व्हर्च्युअल मशीनला लक्ष्य करणाऱ्या स्मार्ट कॉन्ट्रॅक्ट्ससाठी Python-आधारित विकास आणि चाचणी फ्रेमवर्क.

  • Wake (opens in a new tab) - सर्वोत्तम वापरकर्ता अनुभव आणि कार्यप्रदर्शनासाठी pytest आणि Anvil चा वापर करून, मजबूत डीबगिंग क्षमता आणि क्रॉस-चेन चाचणी समर्थनासह युनिट चाचणी आणि फझिंगसाठी Python-आधारित फ्रेमवर्क.

गुणधर्म-आधारित चाचणी साधने

स्थिर विश्लेषण साधने

  • स्लिदर (opens in a new tab) - असुरक्षितता शोधण्यासाठी, कोड आकलन वाढवण्यासाठी आणि स्मार्ट कॉन्ट्रॅक्ट्ससाठी सानुकूल विश्लेषणे लिहिण्यासाठी Python-आधारित Solidity स्थिर विश्लेषण फ्रेमवर्क.

  • Ethlint (opens in a new tab) - Solidity स्मार्ट कॉन्ट्रॅक्ट प्रोग्रामिंग भाषेसाठी शैली आणि सुरक्षा सर्वोत्तम पद्धती लागू करण्यासाठी लिंटर.

  • Cyfrin Aderyn (opens in a new tab) - Web3 स्मार्ट कॉन्ट्रॅक्ट सुरक्षा आणि विकासासाठी विशेषतः डिझाइन केलेले Rust-आधारित स्थिर विश्लेषक.

  • Wake (opens in a new tab) - असुरक्षितता आणि कोड गुणवत्ता शोधक, कोडमधून उपयुक्त माहिती काढण्यासाठी प्रिंटर्स आणि सानुकूल सबमॉड्यूल्स लिहिण्यासाठी समर्थनासह Python-आधारित स्थिर विश्लेषण फ्रेमवर्क.

  • Slippy (opens in a new tab) - Solidity साठी एक साधे आणि शक्तिशाली लिंटर.

गतिशील विश्लेषण साधने

  • एकिडना (opens in a new tab) - गुणधर्म-आधारित चाचणीद्वारे स्मार्ट कॉन्ट्रॅक्ट्समधील असुरक्षितता शोधण्यासाठी जलद कॉन्ट्रॅक्ट फझर.

  • Diligence Fuzzing (opens in a new tab) - स्मार्ट कॉन्ट्रॅक्ट कोडमधील गुणधर्म उल्लंघने शोधण्यासाठी उपयुक्त स्वयंचलित फझिंग साधन.

  • मॅन्टिकोर (opens in a new tab) - EVM बाइटकोडचे विश्लेषण करण्यासाठी गतिशील प्रतीकात्मक अंमलबजावणी फ्रेमवर्क.

  • Mythril (opens in a new tab) - टेन्ट विश्लेषण, कॉन्कोलिक विश्लेषण आणि कंट्रोल फ्लो चेकिंग वापरून कॉन्ट्रॅक्ट असुरक्षितता शोधण्यासाठी EVM बाइटकोड मूल्यांकन साधन.

  • Diligence Scribble (opens in a new tab) - Scribble ही एक स्पेसिफिकेशन भाषा आणि रनटाइम पडताळणी साधन आहे जे तुम्हाला स्मार्ट कॉन्ट्रॅक्ट्सना गुणधर्मांसह भाष्य करण्याची परवानगी देते जे तुम्हाला Diligence Fuzzing किंवा MythX सारख्या साधनांसह कॉन्ट्रॅक्ट्सची स्वयंचलितपणे चाचणी करण्यास अनुमती देते.

पुढील वाचन

ट्यूटोरियल: इथेरियमवर स्मार्ट कॉन्ट्रॅक्ट चाचणी