स्मार्ट करारांची चाचणी
पृष्ठ अखेरचे अद्यतन: २० ऑक्टोबर, २०२५
Ethereum सारखे सार्वजनिक ब्लॉकचेन अपरिवर्तनीय आहेत, ज्यामुळे स्मार्ट कराराचा कोड उपयोजनानंतर बदलणे कठीण होते. "व्हर्च्युअल अपग्रेड" करण्यासाठी करार अपग्रेड पॅटर्न्स अस्तित्वात आहेत, परंतु हे लागू करणे कठीण आहे आणि त्यासाठी सामाजिक सहमती आवश्यक आहे. शिवाय, एखादी त्रुटी शोधल्यानंतरच अपग्रेडद्वारे ती दुरुस्त केली जाऊ शकते—जर एखाद्या आक्रमणकर्त्याला प्रथम असुरक्षितता आढळली, तर तुमचा स्मार्ट करार धोक्यात येऊ शकतो.
या कारणांमुळे, Mainnet वर उपयोजन करण्यापूर्वी स्मार्ट करारांची चाचणी करणे हे सुरक्षिततेसाठी किमान आवश्यकता आहे. करारांची चाचणी घेण्यासाठी आणि कोडच्या अचूकतेचे मूल्यांकन करण्यासाठी अनेक तंत्रे आहेत; तुम्ही काय निवडता हे तुमच्या गरजांवर अवलंबून आहे. तरीही, विविध साधने आणि दृष्टिकोनांनी बनलेला एक चाचणी संच करार कोडमधील किरकोळ आणि मोठ्या दोन्ही सुरक्षा त्रुटी शोधण्यासाठी आदर्श आहे.
पूर्वतयारी
हे पृष्ठ Ethereum नेटवर्कवर उपयोजन करण्यापूर्वी स्मार्ट करारांची चाचणी कशी करावी हे स्पष्ट करते. तुम्ही स्मार्ट करारांशी परिचित आहात असे गृहीत धरले आहे.
स्मार्ट करार चाचणी म्हणजे काय?
स्मार्ट करार चाचणी ही स्मार्ट कराराचा कोड अपेक्षेप्रमाणे काम करतो की नाही हे सत्यापित करण्याची प्रक्रिया आहे. एखादा विशिष्ट स्मार्ट करार विश्वासार्हता, उपयोगिता आणि सुरक्षिततेच्या गरजा पूर्ण करतो की नाही हे तपासण्यासाठी चाचणी उपयुक्त आहे.
दृष्टिकोन वेगवेगळे असले तरी, बहुतेक चाचणी पद्धतींना स्मार्ट कराराला हाताळण्यासाठी अपेक्षित असलेल्या डेटाच्या लहान नमुन्यासह कार्यान्वित करणे आवश्यक आहे. जर करार नमुना डेटासाठी योग्य परिणाम देत असेल, तर तो योग्यरित्या कार्य करत आहे असे गृहीत धरले जाते. बहुतेक चाचणी साधने कराराची अंमलबजावणी अपेक्षित परिणामांशी जुळते की नाही हे तपासण्यासाठी चाचणी प्रकरणेopens in a new tab लिहिण्यासाठी आणि कार्यान्वित करण्यासाठी संसाधने प्रदान करतात.
स्मार्ट करारांची चाचणी करणे महत्त्वाचे का आहे?
स्मार्ट करार अनेकदा उच्च-मूल्याच्या आर्थिक मालमत्ता व्यवस्थापित करत असल्याने, किरकोळ प्रोग्रामिंग त्रुटी वापरकर्त्यांसाठी मोठ्या नुकसानीसopens in a new tab कारणीभूत ठरू शकतात. तथापि, कठोर चाचणीमुळे तुम्हाला स्मार्ट कराराच्या कोडमधील दोष आणि समस्या लवकर शोधण्यात आणि Mainnet वर लॉन्च करण्यापूर्वी त्या दुरुस्त करण्यात मदत होऊ शकते.
बग आढळल्यास करार अपग्रेड करणे शक्य असले तरी, अपग्रेड गुंतागुंतीचे असतात आणि अयोग्यरित्या हाताळल्यास त्रुटी येऊ शकतातopens in a new tab. कराराचे अपग्रेडेशन अपरिवर्तनीयतेच्या तत्त्वाला नाकारते आणि वापरकर्त्यांवर अतिरिक्त विश्वासाची गृहितके लादते. याउलट, तुमच्या कराराच्या चाचणीसाठी एक व्यापक योजना स्मार्ट करार सुरक्षा धोके कमी करते आणि उपयोजनानंतर जटिल लॉजिक अपग्रेड करण्याची गरज कमी करते.
स्मार्ट करारांची चाचणी करण्याच्या पद्धती
Ethereum स्मार्ट करारांच्या चाचणीच्या पद्धती दोन विस्तृत श्रेणींमध्ये येतात: स्वयंचलित चाचणी आणि मॅन्युअल चाचणी. स्वयंचलित चाचणी आणि मॅन्युअल चाचणी अद्वितीय फायदे आणि तोटे देतात, परंतु तुम्ही तुमच्या करारांचे विश्लेषण करण्यासाठी एक मजबूत योजना तयार करण्यासाठी दोन्ही एकत्र करू शकता.
स्वयंचलित चाचणी
स्वयंचलित चाचणी अशा साधनांचा वापर करते जी अंमलबजावणीमधील त्रुटींसाठी स्मार्ट कराराचा कोड आपोआप तपासतात. स्वयंचलित चाचणीचा फायदा करार कार्यक्षमतेच्या मूल्यांकनासाठी स्क्रिप्ट्सopens in a new tab वापरण्यापासून मिळतो. स्क्रिप्टेड चाचण्या कमीत कमी मानवी हस्तक्षेपासह वारंवार चालवण्यासाठी शेड्यूल केल्या जाऊ शकतात, ज्यामुळे स्वयंचलित चाचणी मॅन्युअल चाचणी पद्धतींपेक्षा अधिक कार्यक्षम बनते.
जेव्हा चाचण्या पुनरावृत्ती होणाऱ्या आणि वेळखाऊ असतात; मॅन्युअली करणे कठीण असते; मानवी त्रुटीस बळी पडण्याची शक्यता असते; किंवा गंभीर करार कार्यांचे मूल्यांकन करणे समाविष्ट असते तेव्हा स्वयंचलित चाचणी विशेषतः उपयुक्त आहे. परंतु स्वयंचलित चाचणी साधनांमध्ये काही तोटे असू शकतात—ते काही बग्स चुकवू शकतात आणि अनेक चुकीचे सकारात्मकopens in a new tab परिणाम देऊ शकतात. म्हणून, स्मार्ट करारांसाठी स्वयंचलित चाचणीला मॅन्युअल चाचणीसोबत जोडणे आदर्श आहे.
मॅन्युअल चाचणी
मॅन्युअल चाचणी मानवी-सहाय्यित असते आणि त्यात स्मार्ट कराराच्या अचूकतेचे विश्लेषण करताना तुमच्या चाचणी संचातील प्रत्येक चाचणी प्रकरण एकामागून एक कार्यान्वित करणे समाविष्ट असते. हे स्वयंचलित चाचणीच्या विपरीत आहे जिथे तुम्ही एकाच वेळी करारावर अनेक वेगळ्या चाचण्या चालवू शकता आणि सर्व अयशस्वी आणि यशस्वी चाचण्या दर्शवणारा अहवाल मिळवू शकता.
मॅन्युअल चाचणी एकाच व्यक्तीद्वारे केली जाऊ शकते जी विविध चाचणी परिस्थितींचा समावेश असलेल्या लिखित चाचणी योजनेचे पालन करते. तुम्ही मॅन्युअल चाचणीचा भाग म्हणून एका विशिष्ट कालावधीत अनेक व्यक्ती किंवा गटांना स्मार्ट कराराशी संवाद साधायला लावू शकता. चाचणी करणारे कराराच्या वास्तविक वर्तनाची अपेक्षित वर्तनाशी तुलना करतील, कोणत्याही फरकाला बग म्हणून चिन्हांकित करतील.
प्रभावी मॅन्युअल चाचणीसाठी भरीव संसाधने (कौशल्य, वेळ, पैसा आणि प्रयत्न) आवश्यक असतात, आणि मानवी त्रुटीमुळे—चाचण्या कार्यान्वित करताना काही त्रुटी चुकण्याची शक्यता असते. परंतु मॅन्युअल चाचणी देखील फायदेशीर असू शकते—उदाहरणार्थ, एक मानवी चाचणीकर्ता (उदा., एक ऑडिटर) स्वयंचलित चाचणी साधनाने चुकवलेल्या एज केसेस शोधण्यासाठी अंतर्ज्ञान वापरू शकतो.
स्मार्ट करारांसाठी स्वयंचलित चाचणी
युनिट चाचणी
युनिट चाचणी करार कार्यांचे स्वतंत्रपणे मूल्यांकन करते आणि प्रत्येक घटक योग्यरित्या कार्य करतो की नाही हे तपासते. चांगल्या युनिट चाचण्या सोप्या, चालवण्यास जलद असाव्यात आणि चाचण्या अयशस्वी झाल्यास काय चुकले याची स्पष्ट कल्पना द्यावी.
कार्य अपेक्षित मूल्ये परत करतात की नाही आणि कार्य अंमलबजावणीनंतर करार स्टोरेज योग्यरित्या अपडेट केले आहे की नाही हे तपासण्यासाठी युनिट चाचण्या उपयुक्त आहेत. शिवाय, कराराच्या कोडबेसमध्ये बदल केल्यानंतर युनिट चाचण्या चालवल्याने नवीन लॉजिक जोडल्याने त्रुटी येत नाहीत याची खात्री होते. प्रभावी युनिट चाचण्या चालवण्यासाठी खाली काही मार्गदर्शक तत्त्वे आहेत:
स्मार्ट करारांच्या युनिट चाचणीसाठी मार्गदर्शक तत्त्वे
१. तुमच्या करारांचे व्यावसायिक लॉजिक आणि कार्यप्रवाह समजून घ्या
युनिट चाचण्या लिहिण्यापूर्वी, स्मार्ट करार कोणती कार्यक्षमता देतो आणि वापरकर्ते त्या कार्यांमध्ये कसे प्रवेश करतील आणि त्यांचा वापर कसा करतील हे जाणून घेणे उपयुक्त ठरते. हे विशेषतः हॅपी पाथ चाचण्याopens in a new tab चालवण्यासाठी उपयुक्त आहे जे करारातील कार्ये वैध वापरकर्ता इनपुटसाठी योग्य आउटपुट परत करतात की नाही हे ठरवतात. आम्ही ही संकल्पना लिलाव कराराच्याopens in a new tab या (संक्षिप्त) उदाहरणाचा वापर करून स्पष्ट करू
1constructor(2 uint biddingTime,3 address payable beneficiaryAddress4 ) {5 beneficiary = beneficiaryAddress;6 auctionEndTime = block.timestamp + biddingTime;7 }89function bid() external payable {1011 if (block.timestamp > auctionEndTime)12 revert AuctionAlreadyEnded();1314 if (msg.value <= highestBid)15 revert BidNotHighEnough(highestBid);1617 if (highestBid != 0) {18 pendingReturns[highestBidder] += highestBid;19 }20 highestBidder = msg.sender;21 highestBid = msg.value;22 emit HighestBidIncreased(msg.sender, msg.value);23 }2425 function withdraw() external returns (bool) {26 uint amount = pendingReturns[msg.sender];27 if (amount > 0) {28 pendingReturns[msg.sender] = 0;2930 if (!payable(msg.sender).send(amount)) {31 pendingReturns[msg.sender] = amount;32 return false;33 }34 }35 return true;36 }3738function auctionEnd() external {39 if (block.timestamp < auctionEndTime)40 revert AuctionNotYetEnded();41 if (ended)42 revert AuctionEndAlreadyCalled();4344 ended = true;45 emit AuctionEnded(highestBidder, highestBid);4647 beneficiary.transfer(highestBid);48 }49}सर्व दाखवाहा एक साधा लिलाव करार आहे जो बोलीच्या कालावधीत बोली स्वीकारण्यासाठी डिझाइन केलेला आहे. जर highestBid वाढली, तर मागील सर्वोच्च बोली लावणाऱ्याला त्याचे पैसे परत मिळतात; एकदा बोलीचा कालावधी संपला की, beneficiary त्याचे पैसे मिळवण्यासाठी कराराला कॉल करतो.
अशा करारासाठी युनिट चाचण्या कराराशी संवाद साधताना वापरकर्ता कॉल करू शकणाऱ्या विविध कार्यांना कव्हर करतील. एक उदाहरण म्हणजे एक युनिट चाचणी जी तपासते की लिलाव चालू असताना वापरकर्ता बोली लावू शकतो की नाही (म्हणजे, bid() ला केलेले कॉल यशस्वी होतात) किंवा एक जी तपासते की वापरकर्ता सध्याच्या highestBid पेक्षा जास्त बोली लावू शकतो की नाही.
कराराचा कार्यान्वयन कार्यप्रवाह समजून घेतल्याने अंमलबजावणी आवश्यकता पूर्ण करते की नाही हे तपासणाऱ्या युनिट चाचण्या लिहिण्यास देखील मदत होते. उदाहरणार्थ, लिलाव करार निर्दिष्ट करतो की लिलाव संपल्यावर वापरकर्ते बोली लावू शकत नाहीत (म्हणजे, जेव्हा auctionEndTime हे block.timestamp पेक्षा कमी असते). म्हणून, एक डेव्हलपर एक युनिट चाचणी चालवू शकतो जी लिलाव संपल्यावर bid() फंक्शनला केलेले कॉल यशस्वी होतात की अयशस्वी होतात हे तपासते (म्हणजे, जेव्हा auctionEndTime > block.timestamp असते).
२. करार अंमलबजावणीशी संबंधित सर्व गृहितकांचे मूल्यांकन करा
कराराच्या अंमलबजावणीबद्दलच्या कोणत्याही गृहितकांचे दस्तऐवजीकरण करणे आणि त्या गृहितकांची वैधता सत्यापित करण्यासाठी युनिट चाचण्या लिहिणे महत्त्वाचे आहे. अनपेक्षित अंमलबजावणीपासून संरक्षण देण्याव्यतिरिक्त, चाचणी दावे तुम्हाला अशा ऑपरेशन्सबद्दल विचार करण्यास भाग पाडतात जे स्मार्ट कराराचे सुरक्षा मॉडेल तोडू शकतात. एक उपयुक्त टीप म्हणजे "हॅपी युझर टेस्ट"च्या पलीकडे जाऊन चुकीच्या इनपुटसाठी फंक्शन अयशस्वी होते की नाही हे तपासणाऱ्या नकारात्मक चाचण्या लिहिणे.
अनेक युनिट टेस्टिंग फ्रेमवर्क तुम्हाला दावे तयार करण्याची परवानगी देतात—साधी विधाने जी सांगतात की करार काय करू शकतो आणि काय करू शकत नाही—आणि अंमलबजावणी अंतर्गत ते दावे टिकतात की नाही हे पाहण्यासाठी चाचण्या चालवतात. पूर्वी वर्णन केलेल्या लिलाव करारावर काम करणारा एक डेव्हलपर नकारात्मक चाचण्या चालवण्यापूर्वी त्याच्या वर्तनाबद्दल खालील दावे करू शकतो:
-
लिलाव संपल्यावर किंवा सुरू झाला नसताना वापरकर्ते बोली लावू शकत नाहीत.
-
स्वीकार्य मर्यादेपेक्षा कमी बोली असल्यास लिलाव करार परत येतो.
-
बोली जिंकण्यात अयशस्वी झालेल्या वापरकर्त्यांना त्यांचे फंड परत मिळतात
टीप: गृहितकांची चाचणी करण्याचा आणखी एक मार्ग म्हणजे करारात फंक्शन मॉडिफायर्सopens in a new tab ट्रिगर करणाऱ्या चाचण्या लिहिणे, विशेषतः require, assert, आणि if…else विधाने.
३. कोड कव्हरेज मोजा
कोड कव्हरेजopens in a new tab हे एक चाचणी मेट्रिक आहे जे चाचण्यांदरम्यान तुमच्या कोडमध्ये कार्यान्वित केलेल्या शाखा, ओळी आणि विधानांची संख्या ट्रॅक करते. न तपासलेल्या असुरक्षिततेचा धोका कमी करण्यासाठी चाचण्यांमध्ये चांगले कोड कव्हरेज असावे. पुरेशा कव्हरेजशिवाय, तुम्ही चुकीच्या पद्धतीने गृहीत धरू शकता की तुमचा करार सुरक्षित आहे कारण सर्व चाचण्या पास होतात, तर न तपासलेल्या कोड मार्गांमध्ये अजूनही असुरक्षितता अस्तित्वात असते. तथापि, उच्च कोड कव्हरेज नोंदवल्याने स्मार्ट करारातील सर्व विधाने/कार्य अचूकतेसाठी पुरेशा प्रमाणात तपासली गेली असल्याची खात्री मिळते.
४. सुविकसित चाचणी फ्रेमवर्क वापरा
तुमच्या स्मार्ट करारांसाठी युनिट चाचण्या चालवण्यासाठी वापरल्या जाणार्या साधनांची गुणवत्ता महत्त्वपूर्ण आहे. एक आदर्श चाचणी फ्रेमवर्क म्हणजे जे नियमितपणे सांभाळले जाते; उपयुक्त वैशिष्ट्ये (उदा., लॉगिंग आणि रिपोर्टिंग क्षमता) प्रदान करते; आणि इतर डेव्हलपर्सनी मोठ्या प्रमाणावर वापरलेले आणि तपासलेले असावे.
Solidity स्मार्ट करारांसाठी युनिट टेस्टिंग फ्रेमवर्क वेगवेगळ्या भाषांमध्ये (मुख्यतः JavaScript, Python आणि Rust) येतात. वेगवेगळ्या चाचणी फ्रेमवर्कसह युनिट चाचण्या चालवणे कसे सुरू करावे याबद्दलच्या माहितीसाठी खालील काही मार्गदर्शक तत्त्वे पहा:
- Brownie सह युनिट चाचण्या चालवणेopens in a new tab
- Foundry सह युनिट चाचण्या चालवणेopens in a new tab
- Waffle सह युनिट चाचण्या चालवणेopens in a new tab
- Remix सह युनिट चाचण्या चालवणेopens in a new tab
- Ape सह युनिट चाचण्या चालवणेopens in a new tab
- Hardhat सह युनिट चाचण्या चालवणेopens in a new tab
- Wake सह युनिट चाचण्या चालवणेopens in a new tab
एकत्रीकरण चाचणी
युनिट चाचणी करार कार्यांना वेगळे करून डीबग करते, तर एकत्रीकरण चाचण्या स्मार्ट कराराच्या घटकांचे संपूर्णपणे मूल्यांकन करतात. एकत्रीकरण चाचणी क्रॉस-करार कॉल्स किंवा एकाच स्मार्ट करारातील वेगवेगळ्या कार्यांमधील परस्परसंवादातून उद्भवणाऱ्या समस्या शोधू शकते. उदाहरणार्थ, एकत्रीकरण चाचण्या इनहेरिटन्सopens in a new tab आणि अवलंबित्व इंजेक्शन यांसारख्या गोष्टी योग्यरित्या कार्य करतात की नाही हे तपासण्यात मदत करू शकतात.
जर तुमचा करार मॉड्युलर आर्किटेक्चरचा अवलंब करत असेल किंवा अंमलबजावणी दरम्यान इतर ऑनचेन करारांशी संवाद साधत असेल तर एकत्रीकरण चाचणी उपयुक्त आहे. एकत्रीकरण चाचण्या चालवण्याचा एक मार्ग म्हणजे एका विशिष्ट उंचीवर (Forgeopens in a new tab किंवा Hardhatopens in a new tab सारख्या साधनांचा वापर करून) आणि तुमच्या करार आणि उपयोजित करारांमधील परस्परसंवादांचे अनुकरण करणे.
फोर्क केलेला ब्लॉकचेन Mainnet प्रमाणेच वागेल आणि त्यात संबंधित स्थिती आणि शिल्लक असलेली खाती असतील. परंतु ते केवळ सँडबॉक्स्ड स्थानिक विकास वातावरण म्हणून कार्य करते, याचा अर्थ तुम्हाला व्यवहारांसाठी वास्तविक ETH ची गरज भासणार नाही, उदाहरणार्थ, किंवा तुमचे बदल वास्तविक Ethereum प्रोटोकॉलवर परिणाम करणार नाहीत.
गुणधर्म-आधारित चाचणी
गुणधर्म-आधारित चाचणी ही स्मार्ट करार काही परिभाषित गुणधर्म पूर्ण करतो की नाही हे तपासण्याची प्रक्रिया आहे. गुणधर्म कराराच्या वर्तनाबद्दल तथ्ये सांगतात जे वेगवेगळ्या परिस्थितीत खरे राहण्याची अपेक्षा असते—स्मार्ट कराराच्या गुणधर्माचे एक उदाहरण असू शकते "करारातील अंकगणितीय ऑपरेशन्स कधीही ओव्हरफ्लो किंवा अंडरफ्लो होत नाहीत."
स्थिर विश्लेषण आणि डायनॅमिक विश्लेषण हे गुणधर्म-आधारित चाचणी कार्यान्वित करण्यासाठी दोन सामान्य तंत्रे आहेत आणि दोन्ही सत्यापित करू शकतात की प्रोग्रामचा कोड (या प्रकरणात स्मार्ट करार) काही पूर्वनिर्धारित गुणधर्म पूर्ण करतो. काही गुणधर्म-आधारित चाचणी साधने अपेक्षित करार गुणधर्मांबद्दल पूर्वनिर्धारित नियमांसह येतात आणि त्या नियमांनुसार कोड तपासतात, तर इतर तुम्हाला स्मार्ट करारासाठी सानुकूल गुणधर्म तयार करण्याची परवानगी देतात.
स्थिर विश्लेषण
एक स्थिर विश्लेषक स्मार्ट कराराचा स्त्रोत कोड इनपुट म्हणून घेतो आणि करार गुणधर्म पूर्ण करतो की नाही हे घोषित करणारे परिणाम आउटपुट करतो. डायनॅमिक विश्लेषणाच्या विपरीत, स्थिर विश्लेषणात अचूकतेसाठी त्याचे विश्लेषण करण्यासाठी करार कार्यान्वित करणे समाविष्ट नाही. स्थिर विश्लेषण त्याऐवजी अंमलबजावणी दरम्यान स्मार्ट करार घेऊ शकणाऱ्या सर्व संभाव्य मार्गांबद्दल तर्क करतो (म्हणजे, स्त्रोत कोडच्या संरचनेचे परीक्षण करून हे ठरवण्यासाठी की रनटाइममध्ये कराराच्या ऑपरेशनसाठी त्याचा काय अर्थ होईल).
लिंटिंग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 हे स्मार्ट करारांमधील अनियंत्रित गुणधर्म सत्यापित करण्यासाठी डायनॅमिक विश्लेषण तंत्राचे एक उदाहरण आहे. एक फझर लक्ष्य करारातील फंक्शन्सना परिभाषित इनपुट मूल्याच्या यादृच्छिक किंवा विकृत भिन्नतांसह आमंत्रित करतो. जर स्मार्ट करार त्रुटीच्या स्थितीत प्रवेश करतो (उदा., जिथे एक दावा अयशस्वी होतो), तर समस्या ध्वजांकित केली जाते आणि असुरक्षित मार्गाकडे अंमलबजावणी चालवणारे इनपुट अहवालात तयार केले जातात.
स्मार्ट कराराच्या इनपुट प्रमाणीकरण यंत्रणेचे मूल्यांकन करण्यासाठी फझिंग उपयुक्त आहे कारण अनपेक्षित इनपुटच्या अयोग्य हाताळणीमुळे अनपेक्षित अंमलबजावणी होऊ शकते आणि धोकादायक परिणाम होऊ शकतात. गुणधर्म-आधारित चाचणीचा हा प्रकार अनेक कारणांसाठी आदर्श असू शकतो:
-
अनेक परिस्थिती कव्हर करण्यासाठी चाचणी प्रकरणे लिहिणे कठीण आहे. गुणधर्म चाचणीसाठी फक्त तुम्हाला वर्तन आणि वर्तनाची चाचणी घेण्यासाठी डेटाची श्रेणी परिभाषित करणे आवश्यक आहे—प्रोग्राम परिभाषित गुणधर्मावर आधारित स्वयंचलितपणे चाचणी प्रकरणे तयार करतो.
-
तुमचा चाचणी संच प्रोग्राममधील सर्व संभाव्य मार्ग पुरेशा प्रमाणात कव्हर करू शकत नाही. 100% कव्हरेजसह देखील, एज केसेस चुकण्याची शक्यता असते.
-
युनिट चाचण्या सिद्ध करतात की करार नमुना डेटासाठी योग्यरित्या कार्यान्वित होतो, परंतु नमुन्याबाहेरील इनपुटसाठी करार योग्यरित्या कार्यान्वित होतो की नाही हे अज्ञात राहते. गुणधर्म चाचण्या दावा अयशस्वी होण्यास कारणीभूत ठरणारे अंमलबजावणी ट्रेस शोधण्यासाठी दिलेल्या इनपुट मूल्याच्या एकाधिक भिन्नतांसह लक्ष्य करार कार्यान्वित करतात. म्हणून, एक गुणधर्म चाचणी अधिक हमी देते की करार इनपुट डेटाच्या विस्तृत वर्गासाठी योग्यरित्या कार्यान्वित होतो.
स्मार्ट करारांसाठी गुणधर्म-आधारित चाचणी चालवण्यासाठी मार्गदर्शक तत्त्वे
गुणधर्म-आधारित चाचणी चालवणे सामान्यतः स्मार्ट करारात सत्यापित करू इच्छित असलेल्या गुणधर्माची (उदा., पूर्णांक ओव्हरफ्लोचाopens in a new tab अभाव) किंवा गुणधर्मांच्या संग्रहाची व्याख्या करून सुरू होते. गुणधर्म चाचण्या लिहिताना तुम्हाला मूल्यांची एक श्रेणी देखील परिभाषित करण्याची आवश्यकता असू शकते ज्यामध्ये प्रोग्राम व्यवहार इनपुटसाठी डेटा तयार करू शकतो.
एकदा योग्यरित्या कॉन्फिगर केल्यावर, गुणधर्म चाचणी साधन तुमच्या स्मार्ट कराराच्या फंक्शन्सना यादृच्छिकपणे तयार केलेल्या इनपुटसह कार्यान्वित करेल. जर कोणतेही दावा उल्लंघन असेल, तर तुम्हाला मूल्यांकनाखालील गुणधर्माचे उल्लंघन करणाऱ्या ठोस इनपुट डेटासह एक अहवाल मिळायला हवा. वेगवेगळ्या साधनांसह गुणधर्म-आधारित चाचणी चालवणे सुरू करण्यासाठी खालील काही मार्गदर्शक तत्त्वे पहा:
- Slither सह स्मार्ट करारांचे स्थिर विश्लेषणopens in a new tab
- Wake सह स्मार्ट करारांचे स्थिर विश्लेषणopens in a new tab
- Brownie सह गुणधर्म-आधारित चाचणीopens in a new tab
- Foundry सह करारांचे फझिंगopens in a new tab
- Echidna सह करारांचे फझिंगopens in a new tab
- Wake सह करारांचे फझिंगopens in a new tab
- Manticore सह स्मार्ट करारांची प्रतिकात्मक अंमलबजावणीopens in a new tab
- Mythril सह स्मार्ट करारांची प्रतिकात्मक अंमलबजावणीopens in a new tab
स्मार्ट करारांसाठी मॅन्युअल चाचणी
स्मार्ट करारांची मॅन्युअल चाचणी अनेकदा स्वयंचलित चाचण्या चालवल्यानंतर विकास चक्रात नंतर येते. चाचणीचा हा प्रकार स्मार्ट कराराचे एक पूर्णपणे एकात्मिक उत्पादन म्हणून मूल्यांकन करतो हे पाहण्यासाठी की ते तांत्रिक आवश्यकतांमध्ये निर्दिष्ट केल्याप्रमाणे कार्य करते की नाही.
स्थानिक ब्लॉकचेनवर करारांची चाचणी करणे
स्थानिक विकास वातावरणात केलेली स्वयंचलित चाचणी उपयुक्त डीबगिंग माहिती प्रदान करू शकते, तरीही तुमचा स्मार्ट करार उत्पादन वातावरणात कसा वागतो हे तुम्हाला जाणून घ्यायचे असेल. तथापि, मुख्य Ethereum चेनवर उपयोजन केल्यास गॅस शुल्क लागते—तुमच्या स्मार्ट करारात अजूनही बग असल्यास तुम्ही किंवा तुमचे वापरकर्ते वास्तविक पैसे गमावू शकतात हे सांगायला नको.
तुमच्या कराराची स्थानिक ब्लॉकचेनवर (विकास नेटवर्क म्हणूनही ओळखले जाते) चाचणी करणे हे Mainnet वर चाचणी करण्यासाठी एक शिफारस केलेला पर्याय आहे. स्थानिक ब्लॉकचेन हे तुमच्या संगणकावर स्थानिक पातळीवर चालणाऱ्या Ethereum ब्लॉकचेनची एक प्रत आहे जी Ethereum च्या अंमलबजावणी स्तराच्या वर्तनाचे अनुकरण करते. त्यामुळे, तुम्ही महत्त्वपूर्ण ओव्हरहेड न होता कराराशी संवाद साधण्यासाठी व्यवहार प्रोग्राम करू शकता.
स्थानिक ब्लॉकचेनवर करार चालवणे मॅन्युअल एकत्रीकरण चाचणीचा एक प्रकार म्हणून उपयुक्त ठरू शकते. स्मार्ट करार अत्यंत संयोजनक्षम असतात, जे तुम्हाला विद्यमान प्रोटोकॉलसह समाकलित करण्याची परवानगी देतात—परंतु तुम्हाला अजूनही हे सुनिश्चित करणे आवश्यक आहे की अशा जटिल ऑनचेन परस्परसंवादातून योग्य परिणाम मिळतात.
टेस्टनेटवर करारांची चाचणी करणे
एक चाचणी नेटवर्क किंवा टेस्टनेट Ethereum Mainnet प्रमाणेच कार्य करते, फक्त ते वास्तविक-जगाचे मूल्य नसलेले इथर (ETH) वापरते. तुमचा करार टेस्टनेटवर उपयोजित करणे म्हणजे कोणीही निधी धोक्यात न घालवता त्याच्याशी संवाद साधू शकतो (उदा., dApp च्या फ्रंटएंडद्वारे).
मॅन्युअल चाचणीचा हा प्रकार वापरकर्त्याच्या दृष्टिकोनातून तुमच्या ॲप्लिकेशनच्या एंड-टू-एंड प्रवाहाचे मूल्यांकन करण्यासाठी उपयुक्त आहे. येथे, बीटा टेस्टर देखील चाचणी चालवू शकतात आणि कराराच्या व्यावसायिक लॉजिक आणि एकूण कार्यक्षमतेमधील कोणत्याही समस्यांबद्दल अहवाल देऊ शकतात.
स्थानिक ब्लॉकचेनवर चाचणी केल्यानंतर टेस्टनेटवर उपयोजन करणे आदर्श आहे कारण पहिले Ethereum व्हर्च्युअल मशीनच्या वर्तनाच्या जवळ आहे. म्हणून, अनेक Ethereum-नेटिव्ह प्रकल्पांसाठी वास्तविक-जगातील परिस्थितीनुसार स्मार्ट कराराच्या ऑपरेशनचे मूल्यांकन करण्यासाठी टेस्टनेटवर dApps उपयोजित करणे सामान्य आहे.
चाचणी विरुद्ध औपचारिक पडताळणी
चाचणी काही डेटा इनपुटसाठी करार अपेक्षित परिणाम परत करतो याची पुष्टी करण्यास मदत करत असली तरी, चाचण्यांदरम्यान न वापरलेल्या इनपुटसाठी तेच निर्णायकपणे सिद्ध करू शकत नाही. म्हणून, स्मार्ट कराराची चाचणी "कार्यात्मक अचूकतेची" हमी देऊ शकत नाही (म्हणजे, ते दाखवू शकत नाही की प्रोग्राम इनपुट मूल्यांच्या सर्व संचांसाठी आवश्यकतेनुसार वागतो).
औपचारिक पडताळणी ही प्रोग्रामचे औपचारिक मॉडेल औपचारिक तपशीलांशी जुळते की नाही हे तपासून सॉफ्टवेअरच्या अचूकतेचे मूल्यांकन करण्याचा एक दृष्टिकोन आहे. एक औपचारिक मॉडेल हे प्रोग्रामचे एक अमूर्त गणितीय प्रतिनिधित्व आहे, तर एक औपचारिक तपशील प्रोग्रामचे गुणधर्म (म्हणजे, प्रोग्रामच्या अंमलबजावणीबद्दल तार्किक दावे) परिभाषित करते.
कारण गुणधर्म गणितीय संज्ञांमध्ये लिहिलेले आहेत, त्यामुळे तर्काच्या तार्किक नियमांचा वापर करून प्रणालीचे औपचारिक (गणितीय) मॉडेल तपशील पूर्ण करते हे सत्यापित करणे शक्य होते. म्हणून, औपचारिक पडताळणी साधने प्रणालीच्या अचूकतेचा 'गणितीय पुरावा' तयार करतात असे म्हटले जाते.
चाचणीच्या विपरीत, औपचारिक पडताळणीचा वापर स्मार्ट कराराची अंमलबजावणी सर्व अंमलबजावणीसाठी औपचारिक तपशील पूर्ण करते हे सत्यापित करण्यासाठी केला जाऊ शकतो (म्हणजे, त्यात कोणतेही बग नाहीत) नमुना डेटासह कार्यान्वित करण्याची आवश्यकता न ठेवता. हे केवळ डझनभर युनिट चाचण्या चालवण्यासाठी लागणारा वेळ कमी करत नाही, तर छुपी असुरक्षितता पकडण्यात देखील अधिक प्रभावी आहे. त्यानुसार, औपचारिक पडताळणी तंत्र त्यांच्या अंमलबजावणीच्या अडचणी आणि उपयुक्ततेनुसार एका स्पेक्ट्रमवर अवलंबून असतात.
स्मार्ट करारांसाठी औपचारिक पडताळणीबद्दल अधिक.
चाचणी विरुद्ध ऑडिट आणि बग बाउंटीज
नमूद केल्याप्रमाणे, कठोर चाचणी क्वचितच करारात बग्सच्या अनुपस्थितीची हमी देऊ शकते; औपचारिक पडताळणी दृष्टिकोन अचूकतेची अधिक मजबूत हमी देऊ शकतात परंतु सध्या वापरण्यास कठीण आहेत आणि त्यावर मोठा खर्च येतो.
तरीही, तुम्ही स्वतंत्र कोड पुनरावलोकन मिळवून करार असुरक्षितता पकडण्याची शक्यता आणखी वाढवू शकता. स्मार्ट करार ऑडिटopens in a new tab आणि बग बाउंटीजopens in a new tab हे तुमच्या करारांचे विश्लेषण करण्यासाठी इतरांना मिळवण्याचे दोन मार्ग आहेत.
स्मार्ट करारांमध्ये सुरक्षा त्रुटी आणि खराब विकास पद्धतींची प्रकरणे शोधण्यात अनुभवी ऑडिटर्सद्वारे ऑडिट केले जाते. एका ऑडिटमध्ये सामान्यतः चाचणी (आणि शक्यतो औपचारिक पडताळणी) तसेच संपूर्ण कोडबेसचे मॅन्युअल पुनरावलोकन समाविष्ट असते.
याउलट, बग बाउंटी प्रोग्राममध्ये सामान्यतः एखाद्या व्यक्तीला (सामान्यतः व्हाइटहॅट हॅकर्सopens in a new tab म्हणून वर्णन केलेले) आर्थिक बक्षीस देणे समाविष्ट असते जो स्मार्ट करारात असुरक्षितता शोधतो आणि डेव्हलपर्सना ती उघड करतो. बग बाउंटी ऑडिटसारखेच आहेत कारण त्यात स्मार्ट करारांमधील दोष शोधण्यात मदत करण्यासाठी इतरांना विचारणे समाविष्ट आहे.
मुख्य फरक असा आहे की बग बाउंटी प्रोग्राम व्यापक डेव्हलपर/हॅकर समुदायासाठी खुले आहेत आणि अद्वितीय कौशल्ये आणि अनुभव असलेल्या नैतिक हॅकर्स आणि स्वतंत्र सुरक्षा व्यावसायिकांच्या विस्तृत वर्गाला आकर्षित करतात. स्मार्ट करार ऑडिटपेक्षा हा एक फायदा असू शकतो जे मुख्यत्वे मर्यादित किंवा संकुचित कौशल्य असलेल्या संघांवर अवलंबून असतात.
चाचणी साधने आणि लायब्ररी
युनिट चाचणी साधने
-
solidity-coverageopens in a new tab - Solidity मध्ये लिहिलेल्या स्मार्ट करारांसाठी कोड कव्हरेज साधन.
-
Waffleopens in a new tab - प्रगत स्मार्ट करार विकास आणि चाचणीसाठी फ्रेमवर्क (ethers.js वर आधारित).
-
Remix Testsopens in a new tab - Solidity स्मार्ट करारांची चाचणी करण्यासाठी साधन. Remix IDE "Solidity Unit Testing" प्लगइनच्या खाली कार्य करते जे करारासाठी चाचणी प्रकरणे लिहिण्यासाठी आणि चालवण्यासाठी वापरले जाते.
-
OpenZeppelin Test Helpersopens in a new tab - Ethereum स्मार्ट करार चाचणीसाठी Assertion लायब्ररी. तुमचे करार अपेक्षेप्रमाणे वागतात याची खात्री करा!
-
Brownie युनिट टेस्टिंग फ्रेमवर्कopens in a new tab - Brownie Pytest चा वापर करते, एक वैशिष्ट्य-समृद्ध चाचणी फ्रेमवर्क जे तुम्हाला कमीतकमी कोडसह लहान चाचण्या लिहू देते, मोठ्या प्रकल्पांसाठी चांगले स्केल करते आणि अत्यंत विस्तारणीय आहे.
-
Foundry Testsopens in a new tab - Foundry Forge देते, एक जलद आणि लवचिक Ethereum चाचणी फ्रेमवर्क जे साध्या युनिट चाचण्या, गॅस ऑप्टिमायझेशन तपासणी आणि करार फझिंग कार्यान्वित करण्यास सक्षम आहे.
-
Hardhat Testsopens in a new tab - ethers.js, Mocha, आणि Chai वर आधारित स्मार्ट करारांच्या चाचणीसाठी फ्रेमवर्क.
-
ApeWorxopens in a new tab - Ethereum व्हर्च्युअल मशीनला लक्ष्य करणाऱ्या स्मार्ट करारांसाठी Python-आधारित विकास आणि चाचणी फ्रेमवर्क.
-
Wakeopens in a new tab - युनिट टेस्टिंग आणि फझिंगसाठी Python-आधारित फ्रेमवर्क ज्यामध्ये मजबूत डीबगिंग क्षमता आणि क्रॉस-चेन टेस्टिंग सपोर्ट आहे, सर्वोत्तम वापरकर्ता अनुभव आणि कार्यक्षमतेसाठी pytest आणि Anvil चा वापर करते.
गुणधर्म-आधारित चाचणी साधने
स्थिर विश्लेषण साधने
-
Slitheropens in a new tab - असुरक्षितता शोधण्यासाठी, कोड आकलन वाढवण्यासाठी आणि स्मार्ट करारांसाठी सानुकूल विश्लेषण लिहिण्यासाठी Python-आधारित Solidity स्थिर विश्लेषण फ्रेमवर्क.
-
Ethlintopens in a new tab - Solidity स्मार्ट करार प्रोग्रामिंग भाषेसाठी शैली आणि सुरक्षा सर्वोत्तम पद्धती लागू करण्यासाठी लिंटर.
-
Cyfrin Aderynopens in a new tab - Web3 स्मार्ट करार सुरक्षा आणि विकासासाठी विशेषतः डिझाइन केलेले Rust-आधारित स्थिर विश्लेषक.
-
Wakeopens in a new tab - असुरक्षितता आणि कोड गुणवत्ता डिटेक्टरसह Python-आधारित स्थिर विश्लेषण फ्रेमवर्क, कोडमधून उपयुक्त माहिती काढण्यासाठी प्रिंटर आणि सानुकूल सबमॉड्यूल लिहिण्यासाठी समर्थन.
-
Slippyopens in a new tab - Solidity साठी एक साधा आणि शक्तिशाली लिंटर.
डायनॅमिक विश्लेषण साधने
-
Echidnaopens in a new tab - गुणधर्म-आधारित चाचणीद्वारे स्मार्ट करारांमधील असुरक्षितता शोधण्यासाठी जलद करार फझर.
-
Diligence Fuzzingopens in a new tab - स्मार्ट करार कोडमधील गुणधर्म उल्लंघन शोधण्यासाठी उपयुक्त स्वयंचलित फझिंग साधन.
-
Manticoreopens in a new tab - EVM बाइटकोडचे विश्लेषण करण्यासाठी डायनॅमिक प्रतिकात्मक अंमलबजावणी फ्रेमवर्क.
-
Mythrilopens in a new tab - टेंट विश्लेषण, कॉन्कोलिक विश्लेषण आणि नियंत्रण प्रवाह तपासणी वापरून करार असुरक्षितता शोधण्यासाठी EVM बाइटकोड मूल्यांकन साधन.
-
Diligence Scribbleopens in a new tab - Scribble ही एक स्पेसिफिकेशन भाषा आणि रनटाइम पडताळणी साधन आहे जे तुम्हाला स्मार्ट करारांना गुणधर्मांसह भाष्य करण्याची परवानगी देते जे तुम्हाला Diligence Fuzzing किंवा MythX सारख्या साधनांसह करारांची स्वयंचलितपणे चाचणी करण्याची परवानगी देते.
संबंधित ट्युटोरियल्स
- विविध चाचणी उत्पादनांचे विहंगावलोकन आणि तुलना _
- स्मार्ट करारांची चाचणी करण्यासाठी Echidna कसे वापरावे
- स्मार्ट कॉन्ट्रॅक्ट बग शोधण्यासाठी मँटिकोरचा वापर कसा करावा
- स्मार्ट कॉन्ट्रॅक्ट बग शोधण्यासाठी स्लिथरचा वापर कसा करावा
- चाचणीसाठी Solidity करारांना कसे मॉक करावे
- Foundry वापरून Solidity मध्ये युनिट चाचण्या कशा चालवाव्यातopens in a new tab