मुख्य सामग्री पर जाएं
Change page

स्मार्ट अनुबंधों की संरचना

पृष्ठ संपादित करें (opens in a new tab)

एक स्मार्ट अनुबंध एक प्रोग्राम है जो एथेरियम पर एक पते पर चलता है। वे डेटा और फंक्शंस से बने होते हैं जो लेनदेन प्राप्त करने पर निष्पादित हो सकते हैं। स्मार्ट अनुबंध क्या होता है, इसका अवलोकन यहां दिया गया है।

पूर्वापेक्षाएं

पहले सुनिश्चित करें कि आपने स्मार्ट अनुबंधों के बारे में पढ़ा है। यह दस्तावेज़ मानता है कि आप जावास्क्रिप्ट या पायथन जैसी प्रोग्रामिंग भाषाओं से पहले से ही परिचित हैं।

डेटा

किसी भी अनुबंध डेटा को एक स्थान पर निर्दिष्ट किया जाना चाहिए: या तो storage या memory पर। स्मार्ट अनुबंध में भंडारण को संशोधित करना महंगा है, इसलिए आपको यह विचार करने की आवश्यकता है कि आपका डेटा कहां रहना चाहिए।

भंडारण

लगातार डेटा को भंडारण के रूप में संदर्भित किया जाता है और इसे स्टेट वेरिएबल्स द्वारा दर्शाया जाता है। ये मान ब्लॉकचेन पर स्थायी रूप से संग्रहित हो जाते हैं। आपको प्रकार घोषित करने की आवश्यकता है ताकि अनुबंध इस बात पर नज़र रख सके कि संकलित होने पर ब्लॉकचेन पर उसे कितने भंडारण की आवश्यकता है।

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

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

एक address प्रकार एक एथेरियम पता रख सकता है जो 20 बाइट्स या 160 बिट्स के बराबर होता है। यह हेक्साडेसिमल नोटेशन में अग्रणी 0x के साथ लौटता है।

अन्य प्रकारों में शामिल हैं:

  • बूलियन
  • पूर्णांक
  • निश्चित बिंदु संख्याएँ
  • निश्चित आकार की बाइट सरणियाँ
  • गतिशील आकार की बाइट सरणियाँ
  • परिमेय और पूर्णांक लिटरल
  • स्ट्रिंग लिटरल
  • हेक्साडेसिमल लिटरल
  • एनम्स

अधिक स्पष्टीकरण के लिए, दस्तावेज़ों पर एक नज़र डालें:

मेमोरी

मान जो केवल अनुबंध फंक्शन के निष्पादन के जीवनकाल के लिए संग्रहित होते हैं, उन्हें मेमोरी वेरिएबल्स कहा जाता है। चूंकि ये ब्लॉकचेन पर स्थायी रूप से संग्रहित नहीं होते हैं, इसलिए इनका उपयोग करना बहुत सस्ता होता है।

सॉलिडिटी डॉक्स (opens in a new tab) में EVM डेटा (स्टोरेज, मेमोरी और स्टैक) कैसे संग्रहीत करता है, इसके बारे में अधिक जानें।

पर्यावरण वैरिएबल

आपके अनुबंध पर आपके द्वारा परिभाषित वेरिएबल्स के अलावा, कुछ विशेष वैश्विक वेरिएबल्स हैं। वे मुख्य रूप से ब्लॉकचेन या वर्तमान लेनदेन के बारे में जानकारी प्रदान करने के लिए उपयोग किए जाते हैं।

उदाहरण

प्रॉपस्टेट वेरिएबलविवरण
block.timestampuint256वर्तमान ब्लॉक युग टाइमस्टैम्प
msg.senderपतासंदेश का प्रेषक (वर्तमान कॉल)

फ़ंक्शन

सबसे सरल शब्दों में, फंक्शंस आने वाले लेनदेन के जवाब में जानकारी प्राप्त कर सकते हैं या जानकारी सेट कर सकते हैं।

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

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

वे public या private भी हो सकते हैं

  • public फ़ंक्शन को अनुबंध के भीतर से आंतरिक रूप से या संदेशों के माध्यम से बाहरी रूप से कॉल किया जा सकता है
  • private फ़ंक्शन केवल उस अनुबंध के लिए दिखाई देते हैं जिसमें उन्हें परिभाषित किया गया है और व्युत्पन्न अनुबंधों में नहीं

दोनों फंक्शंस और स्टेट वेरिएबल्स को सार्वजनिक या निजी बनाया जा सकता है

अनुबंध पर एक स्टेट वेरिएबल्स को अपडेट करने के लिए एक फंक्शन यहां है:

// Solidity उदाहरण
function update_name(string value) public {
    dapp_name = value;
}
  • प्रकार string का पैरामीटर value फ़ंक्शन: update_name में पास किया जाता है
  • इसे public घोषित किया गया है, जिसका अर्थ है कि कोई भी इसे एक्सेस कर सकता है
  • इसे view घोषित नहीं किया गया है, इसलिए यह अनुबंध की स्थिति को संशोधित कर सकता है

व्यू फ़ंक्शन

ये फंक्शंस अनुबंध के डेटा की स्थिति को संशोधित नहीं करने का वादा करते हैं। सामान्य उदाहरण "गेटर" फंक्शंस हैं – उदाहरण के लिए आप इसका उपयोग यूज़र की शेष राशि प्राप्त करने के लिए कर सकते हैं।

// 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. इवेंट्स उत्सर्जित करना (opens in a new tab)
  3. अन्य अनुबंध बनाना (opens in a new tab)
  4. selfdestruct का उपयोग करना।
  5. कॉल के माध्यम से ईथर भेजना।
  6. किसी भी ऐसे फ़ंक्शन को कॉल करना जो view या pure के रूप में चिह्नित नहीं है।
  7. निम्न-स्तरीय कॉल का उपयोग करना।
  8. इनलाइन असेंबली का उपयोग करना जिसमें कुछ ऑप्कोड होते हैं।

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

constructor फ़ंक्शन केवल एक बार निष्पादित होते हैं जब अनुबंध पहली बार परिनियोजित होता है। कई वर्ग-आधारित प्रोग्रामिंग भाषाओं में constructor की तरह, ये फ़ंक्शन अक्सर स्टेट वैरिएबल को उनके निर्दिष्ट मानों पर प्रारंभ करते हैं।

# Vyper उदाहरण

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

बिल्ट-इन फ़ंक्शन

आपके अनुबंध पर आपके द्वारा परिभाषित वेरिएबल्स और फंक्शंस के अलावा, कुछ विशेष बिल्ट-इन फंक्शंस हैं। सबसे स्पष्ट उदाहरण है:

  • address.send() – सॉलिडिटी
  • send(address) – वाइपर

ये अनुबंधों को ETH को अन्य खातों में भेजने की अनुमति देते हैं।

फ़ंक्शन लिखना

आपका फंक्शन निम्न आवश्यक करता है:

  • पैरामीटर वेरिएबल और प्रकार (यदि यह पैरामीटर स्वीकार करता है)
  • internal/external की घोषणा
  • pure/view/payable की घोषणा
  • रिटर्न प्रकार (यदि यह मान लौटाता है)

एक पूर्ण अनुबंध कुछ इस तरह दिख सकता है। यहाँ constructor फ़ंक्शन dapp_name वैरिएबल के लिए एक प्रारंभिक मान प्रदान करता है।

इवेंट्स और लॉग

इवेंट्स आपके स्मार्ट अनुबंध को आपके फ़्रंटएंड या अन्य सदस्यता लेने वाले एप्लिकेशन के साथ संवाद करने में सक्षम बनाते हैं। एक बार लेनदेन मान्य हो जाने और एक ब्लॉक में जोड़े जाने के बाद, स्मार्ट अनुबंध इवेंट्स का उत्सर्जन कर सकते हैं और जानकारी लॉग कर सकते हैं, जिसे फ्रंटएंड तब संसाधित और उपयोग कर सकता है।

एनोटेट किए गए उदाहरण

ये सॉलिडिटी में लिखे गए कुछ उदाहरण हैं। यदि आप कोड के साथ खेलना चाहते हैं, तो आप रीमिक्स (opens in a new tab) में उनके साथ इंटरैक्ट कर सकते हैं।

हैलो वर्ल्ड

टोकन

अद्वितीय डिजिटल संपत्ति

आगे की रीडिंग

स्मार्ट अनुबंधों के अधिक संपूर्ण अवलोकन के लिए सॉलिडिटी और वाइपर के प्रलेखन देखें:

पेज का अंतिम अपडेट: 15 अप्रैल 2026