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

स्मार्ट करारांची रचना

स्मार्ट करार हा एक प्रोग्राम आहे जो Ethereum वरील एका पत्त्यावर (address) चालतो. ते डेटा आणि फंक्शन्सचे बनलेले असतात जे व्यवहार (transaction) प्राप्त झाल्यावर कार्यान्वित होऊ शकतात. स्मार्ट करार कशाने बनलेला आहे याचा आढावा येथे आहे.

पूर्वतयारी

आपण प्रथम स्मार्ट करार बद्दल वाचले असल्याची खात्री करा. हा दस्तऐवज असे गृहीत धरतो की आपण आधीच JavaScript किंवा Python सारख्या प्रोग्रामिंग भाषांशी परिचित आहात.

डेटा

कोणताही करार डेटा एका स्थानावर नियुक्त करणे आवश्यक आहे: एकतर storage किंवा memory मध्ये. स्मार्ट करारामध्ये स्टोरेजमध्ये बदल करणे महाग आहे, त्यामुळे तुमचा डेटा कोठे राहावा याचा विचार करणे आवश्यक आहे.

स्टोरेज

पर्सिस्टंट डेटाला स्टोरेज म्हणून संबोधले जाते आणि ते स्टेट व्हेरिएबल्सद्वारे दर्शविले जाते. ही मूल्ये कायमस्वरूपी ब्लॉकचेनवर संग्रहित केली जातात. तुम्ही प्रकार घोषित करणे आवश्यक आहे जेणेकरून करार संकलित (compile) झाल्यावर त्याला ब्लॉकचेनवर किती स्टोरेजची आवश्यकता आहे याचा मागोवा ठेवू शकेल.

// Solidity example
contract SimpleStorage {
    uint storedData; // State variable
    // ...
}
# Vyper example
storedData: int128

जर तुम्ही आधीच ऑब्जेक्ट-ओरिएंटेड भाषा प्रोग्राम केल्या असतील, तर तुम्ही बहुतांश प्रकारांशी परिचित असाल. तथापि, जर तुम्ही Ethereum विकासासाठी नवीन असाल तर address तुमच्यासाठी नवीन असावा.

एक address प्रकार Ethereum पत्ता धारण करू शकतो जो 20 बाइट्स किंवा 160 बिट्सच्या समान असतो. हे अग्रगण्य 0x सह हेक्साडेसिमल नोटेशनमध्ये परत येते.

इतर प्रकारांमध्ये हे समाविष्ट आहे:

  • बुलियन
  • पूर्णांक
  • फिक्स्ड पॉइंट नंबर्स
  • निश्चित-आकाराचे बाइट अॅरे
  • डायनॅमिक आकाराचे बाइट अॅरे
  • रेशनल आणि पूर्णांक लिटरल्स
  • स्ट्रिंग लिटरल्स
  • हेक्साडेसिमल लिटरल्स
  • एनम्स

अधिक स्पष्टीकरणासाठी, डॉक्सवर एक नजर टाका:

मेमरी

जी मूल्ये केवळ करार फंक्शनच्या अंमलबजावणीच्या जीवनकाळासाठी संग्रहित केली जातात त्यांना मेमरी व्हेरिएबल्स म्हणतात. हे ब्लॉकचेनवर कायमस्वरूपी संग्रहित नसल्यामुळे, ते वापरण्यासाठी खूप स्वस्त आहेत.

EVM डेटा (स्टोरेज, मेमरी आणि स्टॅक) कसे संग्रहित करते याबद्दल Solidity डॉक्स (opens in a new tab) मध्ये अधिक जाणून घ्या.

एनव्हायरनमेंट व्हेरिएबल्स

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

उदाहरणे:

प्रॉपस्टेट व्हेरिएबलवर्णन
block.timestampuint256सध्याचा ब्लॉक इपॉक टाइमस्टॅम्प
msg.senderपत्तासंदेशाचा प्रेषक (चालू कॉल)

फंक्शन्स

अत्यंत सोप्या भाषेत सांगायचे झाल्यास, फंक्शन्स येणाऱ्या व्यवहारांना प्रतिसाद म्हणून माहिती मिळवू शकतात किंवा सेट करू शकतात.

फंक्शन कॉलचे दोन प्रकार आहेत:

  • internal – हे EVM कॉल तयार करत नाहीत
    • अंतर्गत फंक्शन्स आणि स्टेट व्हेरिएबल्सना फक्त अंतर्गतच प्रवेश केला जाऊ शकतो (म्हणजे, चालू करारातून किंवा त्यातून मिळवलेल्या करारांमधून)
  • external – हे EVM कॉल तयार करतात
    • बाह्य फंक्शन्स करार इंटरफेसचा भाग आहेत, याचा अर्थ ते इतर करारांमधून आणि व्यवहारांद्वारे कॉल केले जाऊ शकतात. एक बाह्य फंक्शन f अंतर्गत कॉल केले जाऊ शकत नाही (म्हणजे, f() कार्य करत नाही, परंतु this.f() कार्य करते).

ते public किंवा private देखील असू शकतात

  • public फंक्शन्स कराराच्या आतून अंतर्गत किंवा संदेशांद्वारे बाह्यरित्या कॉल केले जाऊ शकतात
  • private फंक्शन्स फक्त त्या करारासाठी दिसतात ज्यात ते परिभाषित केले आहेत आणि व्युत्पन्न करारांमध्ये नाहीत

फंक्शन्स आणि स्टेट व्हेरिएबल्स दोन्ही सार्वजनिक किंवा खाजगी केले जाऊ शकतात

करारावरील स्टेट व्हेरिएबल अपडेट करण्यासाठी येथे एक फंक्शन आहे:

// Solidity example
function update_name(string value) public {
    dapp_name = value;
}
  • string प्रकारचा पॅरामीटर value फंक्शनमध्ये पास केला जातो: update_name
  • हे सार्वजनिक म्हणून घोषित केले आहे, म्हणजे कोणीही त्यात प्रवेश करू शकतो
  • हे व्ह्यू म्हणून घोषित केलेले नाही, त्यामुळे ते कराराची स्थिती सुधारित करू शकते

व्ह्यू फंक्शन्स

ही फंक्शन्स कराराच्या डेटाच्या स्थितीमध्ये बदल न करण्याचे वचन देतात. सामान्य उदाहरणे म्हणजे "गेटर" फंक्शन्स – उदाहरणार्थ, तुम्ही याचा वापर वापरकर्त्याची शिल्लक मिळवण्यासाठी करू शकता.

// Solidity example
function balanceOf(address _owner) public view returns (uint256 _balance) {
    return ownerPizzaCount[_owner];
}
dappName: public(string)

@view
@public
def readName() -> string:
  return dappName

स्टेट सुधारित करणे म्हणजे काय:

  1. स्टेट व्हेरिएबल्समध्ये लिहिणे.
  2. इव्हेंट्स एमिट करणे (opens in a new tab).
  3. इतर करार तयार करणे (opens in a new tab).
  4. selfdestruct वापरणे.
  5. कॉलद्वारे इथर पाठवणे.
  6. व्ह्यू किंवा प्युअर म्हणून चिन्हांकित नसलेले कोणतेही फंक्शन कॉल करणे.
  7. लो-लेव्हल कॉल्स वापरणे.
  8. विशिष्ट ऑपकोड असलेले इनलाइन असेंब्ली वापरणे.

कन्स्ट्रक्टर फंक्शन्स

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

# Vyper example

@external
def __init__(_beneficiary: address, _bidding_time: uint256):
    self.beneficiary = _beneficiary
    self.auctionStart = block.timestamp
    self.auctionEnd = self.auctionStart + _bidding_time

अंगभूत फंक्शन्स

आपण आपल्या करारावर परिभाषित केलेल्या व्हेरिएबल्स आणि फंक्शन्स व्यतिरिक्त, काही विशेष अंगभूत फंक्शन्स आहेत. सर्वात स्पष्ट उदाहरण आहे:

  • address.send() – Solidity
  • send(address) – Vyper

हे करारांना इतर खात्यांवर ETH पाठविण्याची परवानगी देतात.

फंक्शन्स लिहिणे

तुमच्या फंक्शनला आवश्यक आहे:

  • पॅरामीटर व्हेरिएबल आणि प्रकार (जर ते पॅरामीटर्स स्वीकारत असेल तर)
  • अंतर्गत/बाह्य ची घोषणा
  • प्युअर/व्ह्यू/पेएबल ची घोषणा
  • रिटर्न्स प्रकार (जर ते मूल्य परत करत असेल तर)

एक संपूर्ण करार काहीसा असा दिसू शकतो. येथे कन्स्ट्रक्टर फंक्शन dapp_name व्हेरिएबलसाठी प्रारंभिक मूल्य प्रदान करते.

इव्हेंट्स आणि लॉग

इव्हेंट्स तुमच्या स्मार्ट कराराला तुमच्या फ्रंटएंड किंवा इतर सदस्यत्व घेतलेल्या ॲप्लिकेशन्ससह संवाद साधण्यास सक्षम करतात. एकदा व्यवहार प्रमाणित झाल्यावर आणि ब्लॉकमध्ये जोडला गेल्यावर, स्मार्ट करार इव्हेंट एमिट करू शकतात आणि माहिती लॉग करू शकतात, ज्यावर फ्रंटएंड नंतर प्रक्रिया आणि उपयोग करू शकतो.

भाष्य केलेली उदाहरणे

ही Solidity मध्ये लिहिलेली काही उदाहरणे आहेत. तुम्हाला कोडसोबत खेळायचे असल्यास, तुम्ही Remix (opens in a new tab) मध्ये त्यांच्याशी संवाद साधू शकता.

हॅलो वर्ल्ड

टोकन

युनिक डिजिटल मालमत्ता

पुढील वाचन

स्मार्ट करारांच्या अधिक संपूर्ण विहंगावलोकनासाठी Solidity आणि Vyper चे दस्तऐवजीकरण पहा:

पृष्ठ शेवटचे अपडेट: 15 एप्रिल, 2026

हा लेख उपयुक्त होता का?