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

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

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

पूर्वअटी

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

डेटा

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

स्टोरेज

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

// Solidity उदाहरण
contract SimpleStorage {
    uint storedData; // स्थिती व्हेरिएबल
    // ...
}
# Vyper उदाहरण
storedData: int128

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

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

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

  • बुलियन (boolean)
  • इंटिजर (integer)
  • फिक्स्ड पॉइंट नंबर्स
  • फिक्स्ड-साइज बाइट अ‍ॅरे
  • डायनॅमिकली साइज्ड बाइट अ‍ॅरे
  • रॅशनल आणि इंटिजर लिटरल्स
  • स्ट्रिंग लिटरल्स
  • हेक्साडेसिमल लिटरल्स
  • एनम्स (enums)

अधिक स्पष्टीकरणासाठी, डॉक्स पहा:

मेमरी

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

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

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

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

उदाहरणे:

प्रॉप (Prop)स्थिती व्हेरिएबलवर्णन
block.timestampuint256वर्तमान ब्लॉक पर्व (epoch) टाइमस्टॅम्प
msg.senderaddressसंदेश पाठवणारा (वर्तमान कॉल)

फंक्शन्स

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

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

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

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

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

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

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

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

व्ह्यू (View) फंक्शन्स

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

// Solidity उदाहरण
function balanceOf(address _owner) public view returns (uint256 _balance) {
    return ownerPizzaCount[_owner];
}
dappName: public(string)

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

स्थिती बदलणे कशाला मानले जाते:

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

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

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

# Vyper उदाहरण

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

अंगभूत (Built-in) फंक्शन्स

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

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

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

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

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

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

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

घटना आणि नोंदी

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

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

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

हॅलो वर्ल्ड

टोकन

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

पुढील वाचन

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