स्मार्ट कॉन्ट्रॅक्टची ओळख
पृष्ठ अखेरचे अद्यतन: २५ फेब्रुवारी, २०२६
स्मार्ट कॉन्ट्रॅक्ट म्हणजे काय?
"स्मार्ट कॉन्ट्रॅक्ट" हा फक्त इथेरिअम ब्लॉकचेनवर चालणारा एक प्रोग्राम आहे. हा कोड (त्याची फंक्शन्स) आणि डेटा (त्याची स्टेट) यांचा संग्रह आहे जो इथेरिअम ब्लॉकचेनवरील विशिष्ट ॲड्रेसवर असतो.
स्मार्ट कॉन्ट्रॅक्ट्स हे इथेरिअम अकाउंट चा एक प्रकार आहेत. याचा अर्थ त्यांच्याकडे बॅलन्स असतो आणि ते व्यवहारांचे लक्ष्य असू शकतात. तथापि ते वापरकर्त्याद्वारे नियंत्रित केले जात नाहीत, त्याऐवजी ते नेटवर्कवर तैनात केले जातात आणि प्रोग्राम केल्यानुसार चालतात. वापरकर्ता खाती स्मार्ट कॉन्ट्रॅक्टवर परिभाषित फंक्शन कार्यान्वित करणाऱ्या व्यवहारांना सबमिट करून स्मार्ट कॉन्ट्रॅक्टशी संवाद साधू शकतात. स्मार्ट कॉन्ट्रॅक्ट्स नियमित कराराप्रमाणे नियम परिभाषित करू शकतात आणि कोडद्वारे त्यांची आपोआप अंमलबजावणी करू शकतात. स्मार्ट कॉन्ट्रॅक्ट्स डीफॉल्टनुसार हटवले जाऊ शकत नाहीत आणि त्यांच्यासोबतचे संवाद अपरिवर्तनीय आहेत.
पूर्वतयारी
तुम्ही नुकतीच सुरुवात करत असाल किंवा कमी तांत्रिक परिचय शोधत असाल, तर आम्ही आमच्या स्मार्ट कॉन्ट्रॅक्ट्सच्या परिचयाची शिफारस करतो.
स्मार्ट कॉन्ट्रॅक्ट्सच्या जगात प्रवेश करण्यापूर्वी तुम्ही खाती, व्यवहार आणि इथेरिअम व्हर्च्युअल मशीन बद्दल वाचले असल्याची खात्री करा.
एक डिजिटल वेंडिंग मशीन
निक स्झाबो (opens in a new tab) यांनी वर्णन केल्याप्रमाणे, स्मार्ट कॉन्ट्रॅक्टसाठी कदाचित सर्वोत्तम रूपक वेंडिंग मशीन आहे. योग्य इनपुटसह, विशिष्ट आउटपुटची हमी दिली जाते.
वेंडिंग मशीनमधून स्नॅक मिळवण्यासाठी:
1money + snack selection = snack dispensedहे लॉजिक वेंडिंग मशीनमध्ये प्रोग्राम केलेले आहे.
वेंडिंग मशीनप्रमाणेच स्मार्ट कॉन्ट्रॅक्टमध्ये लॉजिक प्रोग्राम केलेले असते. सॉलिडिटीमध्ये लिहिलेला स्मार्ट कॉन्ट्रॅक्ट असल्यास हे वेंडिंग मशीन कसे दिसेल याचे एक सोपे उदाहरण येथे आहे:
1pragma solidity 0.8.7;23contract VendingMachine {45 // Declare state variables of the contract6 address public owner;7 mapping (address => uint) public cupcakeBalances;89 // When 'VendingMachine' contract is deployed:10 // 1. set the deploying address as the owner of the contract11 // 2. set the deployed smart contract's cupcake balance to 10012 constructor() {13 owner = msg.sender;14 cupcakeBalances[address(this)] = 100;15 }1617 // Allow the owner to increase the smart contract's cupcake balance18 function refill(uint amount) public {19 require(msg.sender == owner, "Only the owner can refill.");20 cupcakeBalances[address(this)] += amount;21 }2223 // Allow anyone to purchase cupcakes24 function purchase(uint amount) public payable {25 require(msg.value >= amount * 1 ether, "You must pay at least 1 ETH per cupcake");26 require(cupcakeBalances[address(this)] >= amount, "Not enough cupcakes in stock to complete this purchase");27 cupcakeBalances[address(this)] -= amount;28 cupcakeBalances[msg.sender] += amount;29 }30}सर्व दाखवाज्याप्रमाणे वेंडिंग मशीनमुळे विक्रेता कर्मचाऱ्याची गरज नाहीशी होते, त्याचप्रमाणे स्मार्ट कॉन्ट्रॅक्ट अनेक उद्योगांमधील मध्यस्थांची जागा घेऊ शकतात.
परवानगीविरहित
कोणीही स्मार्ट कॉन्ट्रॅक्ट लिहू शकतो आणि ते नेटवर्कवर तैनात करू शकतो. तुम्हाला फक्त स्मार्ट कॉन्ट्रॅक्ट भाषेत कोड कसे करायचे हे शिकण्याची आणि तुमचा कॉन्ट्रॅक्ट तैनात करण्यासाठी पुरेसा ETH असणे आवश्यक आहे. स्मार्ट कॉन्ट्रॅक्ट तैनात करणे हे तांत्रिकदृष्ट्या एक व्यवहार आहे, त्यामुळे तुम्हाला साध्या ETH हस्तांतरणासाठी गॅस द्यावा लागतो त्याच प्रकारे गॅस द्यावा लागेल. तथापि, कॉन्ट्रॅक्ट तैनात करण्यासाठी गॅस खर्च खूप जास्त असतो.
इथेरिअममध्ये स्मार्ट कॉन्ट्रॅक्ट लिहिण्यासाठी डेव्हलपर-अनुकूल भाषा आहेत:
- Solidity
- Vyper
तथापि, ते तैनात करण्यापूर्वी त्यांना संकलित करणे आवश्यक आहे जेणेकरून इथेरिअमचे व्हर्च्युअल मशीन कॉन्ट्रॅक्टचा अर्थ लावू शकेल आणि संचयित करू शकेल. संकलनाबद्दल अधिक
कंपोझिबिलिटी
स्मार्ट कॉन्ट्रॅक्ट इथेरिअमवर सार्वजनिक आहेत आणि त्यांना मुक्त API म्हणून मानले जाऊ शकते. याचा अर्थ तुम्ही तुमच्या स्वतःच्या स्मार्ट कॉन्ट्रॅक्टमध्ये इतर स्मार्ट कॉन्ट्रॅक्ट्सना कॉल करू शकता जेणेकरून जे शक्य आहे ते मोठ्या प्रमाणात वाढवता येईल. कॉन्ट्रॅक्ट्स इतर कॉन्ट्रॅक्ट्स देखील तैनात करू शकतात.
स्मार्ट कॉन्ट्रॅक्ट कंपोझिबिलिटी बद्दल अधिक जाणून घ्या.
मर्यादा
स्मार्ट कॉन्ट्रॅक्ट्स एकटे "वास्तविक-जगातील" घटनांबद्दल माहिती मिळवू शकत नाहीत कारण ते ऑफचेन स्त्रोतांकडून डेटा मिळवू शकत नाहीत. याचा अर्थ ते वास्तविक जगातील घटनांना प्रतिसाद देऊ शकत नाहीत. हे डिझाइननुसार आहे. बाह्य माहितीवर अवलंबून राहण्याने सहमती धोक्यात येऊ शकते, जी सुरक्षा आणि विकेंद्रीकरणासाठी महत्त्वाची आहे.
तथापि, ब्लॉकचेन ॲप्लिकेशन्ससाठी ऑफचेन डेटा वापरता येणे महत्त्वाचे आहे. यावरील उपाय म्हणजे ऑरेकल्स जे ऑफचेन डेटा घेतात आणि स्मार्ट कॉन्ट्रॅक्ट्ससाठी उपलब्ध करतात.
स्मार्ट कॉन्ट्रॅक्ट्सची आणखी एक मर्यादा म्हणजे कमाल कॉन्ट्रॅक्ट आकार. एक स्मार्ट कॉन्ट्रॅक्ट जास्तीत जास्त 24KB असू शकतो अन्यथा त्याचा गॅस संपेल. डायमंड पॅटर्न (opens in a new tab) वापरून हे टाळता येऊ शकते.
मल्टीसिग कॉन्ट्रॅक्ट्स
मल्टीसिग (मल्टिपल-सिग्नेचर) कॉन्ट्रॅक्ट्स हे स्मार्ट कॉन्ट्रॅक्ट अकाउंट्स आहेत ज्यांना व्यवहार कार्यान्वित करण्यासाठी अनेक वैध स्वाक्षऱ्यांची आवश्यकता असते. इथर किंवा इतर टोकन्सची मोठी रक्कम असलेल्या कॉन्ट्रॅक्ट्ससाठी अयशस्वीतेचे एकल बिंदू टाळण्यासाठी हे खूप उपयुक्त आहे. मल्टीसिग्ज कॉन्ट्रॅक्टच्या अंमलबजावणीची आणि की व्यवस्थापनाची जबाबदारी अनेक पक्षांमध्ये विभागतात आणि एका खाजगी कीच्या नुकसानीमुळे निधीचे अपरिवर्तनीय नुकसान होण्यास प्रतिबंध करतात. या कारणास्तव, मल्टीसिग कॉन्ट्रॅक्ट्स साध्या DAO गव्हर्नन्ससाठी वापरले जाऊ शकतात. मल्टीसिगला कार्यान्वित करण्यासाठी M संभाव्य स्वीकार्य स्वाक्षऱ्यांपैकी N स्वाक्षऱ्यांची आवश्यकता असते (जेथे N ≤ M, आणि M > 1). N = 3, M = 5 आणि N = 4, M = 7 सामान्यतः वापरले जातात. एका 4/7 मल्टीसिगला सात संभाव्य वैध स्वाक्षऱ्यांपैकी चार स्वाक्षऱ्यांची आवश्यकता असते. याचा अर्थ तीन स्वाक्षऱ्या गमावल्या तरीही निधी परत मिळवता येतो. या प्रकरणात, याचा अर्थ असा आहे की कॉन्ट्रॅक्ट कार्यान्वित होण्यासाठी बहुसंख्य की-धारकांनी सहमत होऊन स्वाक्षरी करणे आवश्यक आहे.
स्मार्ट कॉन्ट्रॅक्ट संसाधने
OpenZeppelin Contracts - सुरक्षित स्मार्ट कॉन्ट्रॅक्ट डेव्हलपमेंटसाठी लायब्ररी.
- openzeppelin.com/contracts/ (opens in a new tab)
- GitHub (opens in a new tab)
- कम्युनिटी फोरम (opens in a new tab)