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

स्मार्ट अनुबंध की भाषाएँ

पेज का अंतिम अपडेट: 26 फ़रवरी 2026

एथेरियम के बारे में एक बड़ा पहलू यह है कि स्मार्ट अनुबंध को अपेक्षाकृत डेवलपर के अनुकूल भाषाओं का उपयोग करके प्रोग्राम किया जा सकता है। अगर आप पायथन या किसी कर्ली-ब्रैकेट भाषा (opens in a new tab) के अनुभवी हैं, तो आप परिचित सिंटैक्स वाली भाषा ढूंढ सकते हैं।

दो सबसे सक्रिय और अनुरक्षित भाषाएं हैं:

  • सॉलिडिटी
  • वाइपर

रीमिक्स IDE सॉलिडिटी और वाइपर दोनों में अनुबंध बनाने और परीक्षण करने के लिए एक व्यापक विकास परिवेश प्रदान करता है। कोडिंग शुरू करने के लिए इन-ब्राउज़र रीमिक्स IDE आज़माएं (opens in a new tab)

अधिक अनुभवी डेवलपर भी युल का उपयोग करना चाह सकते हैं, जो एथेरियम वर्चुअल मशीन के लिए एक मध्यवर्ती भाषा है, या युल+, जो युल का एक एक्सटेंशन है।

यदि आप उत्सुक हैं और नई भाषाओं का परीक्षण करने में मदद करना चाहते हैं जो अभी भी गहन विकास के अधीन हैं, तो आप Fe के साथ प्रयोग कर सकते हैं, जो उभरती हुई स्मार्ट अनुबंध भाषा है जो अभी भी अपनी प्रारंभिक अवस्था में है।

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

प्रोग्रामिंग भाषाओं, विशेष रूप से जावास्क्रिप्ट या पायथन का पिछला ज्ञान, आपको स्मार्ट अनुबंध भाषाओं में अंतर की समझ बनाने में मदद कर सकता है। हम यह भी अनुशंसा करते हैं कि आप भाषा की तुलना में बहुत अधिक गहराई में जाने से पहले स्मार्ट अनुबंधों को एक अवधारणा के रूप में समझ लें। स्मार्ट अनुबंध का परिचय

सॉलिडिटी

  • स्मार्ट अनुबंधों को लागू करने के लिए ऑब्जेक्ट-ओरिएंटेड, उच्च-स्तरीय भाषा।
  • कर्ली-ब्रैकेट भाषा जो सी++ से सबसे अधिक गहराई से प्रभावित हुई है।
  • स्टैटिक रूप से टाइप किया गया (वेरिएबल का प्रकार संकलन समय पर जाना जाता है)।
  • समर्थन करता है:
    • विरासत (आप अन्य अनुबंधों का विस्तार कर सकते हैं)।
    • लाइब्रेरी (आप पुन: प्रयोज्य कोड बना सकते हैं जिसे आप विभिन्न अनुबंधों से कॉल कर सकते हैं – जैसे अन्य ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग भाषाओं में स्टैटिक वर्ग में स्टैटिक फंक्शंस)।
    • जटिल यूज़र-परिभाषित प्रकार।

उदाहरण अनुबंध

1// SPDX-License-Identifier: GPL-3.0
2pragma solidity >= 0.7.0;
3
4contract Coin {
5 // "पब्लिक" कीवर्ड वेरिएबल्स को
6 // अन्य अनुबंधों से एक्सेस करने योग्य बनाता है
7 address public minter;
8 mapping (address => uint) public balances;
9
10 // इवेंट्स क्लाइंट्स को आपके द्वारा घोषित विशिष्ट
11 // अनुबंध परिवर्तनों पर प्रतिक्रिया करने की अनुमति देते हैं
12 event Sent(address from, address to, uint amount);
13
14 // कंस्ट्रक्टर कोड केवल तभी चलता है जब अनुबंध
15 // बनाया जाता है
16 constructor() {
17 minter = msg.sender;
18 }
19
20 // एक पते पर नए बनाए गए सिक्कों की राशि भेजता है
21 // इसे केवल अनुबंध निर्माता द्वारा ही कॉल किया जा सकता है
22 function mint(address receiver, uint amount) public {
23 require(msg.sender == minter);
24 require(amount < 1e60);
25 balances[receiver] += amount;
26 }
27
28 // किसी भी कॉलर से एक पते पर
29 // मौजूदा सिक्कों की एक राशि भेजता है
30 function send(address receiver, uint amount) public {
31 require(amount <= balances[msg.sender], "अपर्याप्त शेष राशि।");
32 balances[msg.sender] -= amount;
33 balances[receiver] += amount;
34 emit Sent(msg.sender, receiver, amount);
35 }
36}

इस उदाहरण से आपको यह पता चल जाना चाहिए कि सॉलिडिटी अनुबंध वाक्यविन्यास कैसा है। फ़ंक्शंस और वेरिएबल्स के अधिक विस्तृत विवरण के लिए, डॉक्स देखें (opens in a new tab)

वाइपर

  • Pythonic प्रोग्रामिंग भाषा
  • मजबूत टाइपिंग
  • छोटा और समझने योग्य कंपाइलर कोड
  • कुशल बाइटकोड जेनरेशन
  • अनुबंधों को अधिक सुरक्षित और ऑडिट करना आसान बनाने के उद्देश्य से सॉलिडिटी की तुलना में जानबूझकर कम विशेषताएं दी गई हैं। वाइपर इनका समर्थन नहीं करता है:
    • संशोधक
    • इनहेरिटेंस
    • इनलाइन असेंबली
    • फंक्शन ओवरलोडिंग
    • ऑपरेटर ओवरलोडिंग
    • पुनरावर्ती कॉलिंग
    • अनंत-लंबाई के लूप
    • बाइनरी निश्चित बिंदु

अधिक जानकारी के लिए, वाइपर तर्क पढ़ें (opens in a new tab)

उदाहरण

1# खुली नीलामी
2
3# नीलामी पैरामीटर
4
5# लाभार्थी सबसे ऊंची बोली लगाने वाले से पैसे प्राप्त करता है
6
7beneficiary: public(address)
8auctionStart: public(uint256)
9auctionEnd: public(uint256)
10
11# नीलामी की वर्तमान स्थिति
12
13highestBidder: public(address)
14highestBid: public(uint256)
15
16# अंत में सही पर सेट करें, किसी भी बदलाव को अस्वीकार करता है
17
18ended: public(bool)
19
20# रिफंड की गई बोलियों पर नज़र रखें ताकि हम निकासी पैटर्न का पालन कर सकें
21
22pendingReturns: public(HashMap[address, uint256])
23
24# `_bidding_time` के साथ एक साधारण नीलामी बनाएं
25
26# बोली लगाने के समय के सेकंड
27
28# लाभार्थी पता `_beneficiary` की ओर से।
29
30@external
31def __init__(_beneficiary: address, _bidding_time: uint256):
32 self.beneficiary = _beneficiary
33 self.auctionStart = block.timestamp
34 self.auctionEnd = self.auctionStart + _bidding_time
35
36# भेजे गए मूल्य के साथ नीलामी पर बोली लगाएं
37
38# इस लेन-देन के साथ।
39
40# मूल्य केवल तभी वापस किया जाएगा जब
41
42# नीलामी नहीं जीती जाती है।
43
44@external
45@payable
46def bid():
47 # जांचें कि क्या बोली लगाने की अवधि समाप्त हो गई है।
48 assert block.timestamp < self.auctionEnd
49 # जांचें कि क्या बोली काफी ऊंची है
50 assert msg.value > self.highestBid
51 # पिछले उच्च बोली लगाने वाले के लिए रिफंड ट्रैक करें
52 self.pendingReturns[self.highestBidder] += self.highestBid
53 # नई ऊंची बोली को ट्रैक करें
54 self.highestBidder = msg.sender
55 self.highestBid = msg.value
56
57# पहले से रिफंड की गई बोली वापस लें। निकासी पैटर्न है
58
59# सुरक्षा समस्या से बचने के लिए यहां उपयोग किया जाता है। अगर रिफंड सीधे थे
60
61# बोली() के हिस्से के रूप में भेजा गया, एक दुर्भावनापूर्ण बोली अनुबंध ब्लॉक कर सकता है
62
63# उन रिफंड और इस प्रकार नई उच्च बोलियों को आने से रोकें।
64
65@external
66def withdraw():
67 pending_amount: uint256 = self.pendingReturns[msg.sender]
68 self.pendingReturns[msg.sender] = 0
69 send(msg.sender, pending_amount)
70
71# नीलामी समाप्त करें और उच्चतम बोली भेजें
72
73# लाभार्थी को।
74
75@external
76def endAuction():
77 # यह उन कार्यों को संरचित करने के लिए एक अच्छा दिशानिर्देश है जो बातचीत करते हैं
78 # अन्य अनुबंधों के साथ (यानी, वे कार्यों को कॉल करते हैं या ईथर भेजते हैं)
79 # तीन चरणों में:
80 # 1. शर्तों की जांच
81 # 2. क्रियाएं करना (संभावित रूप से बदलती स्थितियां)
82 # 3. अन्य अनुबंधों के साथ बातचीत
83 # यदि ये चरण मिश्रित हो जाते हैं, तो दूसरा अनुबंध कॉल कर सकता है
84 # वर्तमान अनुबंध में वापस और स्थिति को संशोधित करें या कारण
85 # प्रभाव (ईथर भुगतान) कई बार किया जाना है।
86 # यदि आंतरिक रूप से बुलाए गए कार्यों में बाहरी के साथ सहभागिता शामिल है
87 # अनुबंध, उन्हें भी बातचीत के रूप में माना जाना चाहिए
88 # बाहरी अनुबंध।
89
90 # 1. शर्तें
91 # जांचें कि क्या नीलामी का अंतिम समय आ गया है
92 assert block.timestamp >= self.auctionEnd
93 # जांचें कि क्या यह फ़ंक्शन पहले ही कॉल किया जा चुका है
94 assert not self.ended
95
96 # 2. प्रभाव
97 self.ended = True
98
99 # 3. इंटरेक्शन
100 send(self.beneficiary, self.highestBid)

इस उदाहरण से आपको यह पता चल जाना चाहिए कि वाइपर अनुबंध वाक्यविन्यास कैसा है। फ़ंक्शंस और वेरिएबल्स के अधिक विस्तृत विवरण के लिए, डॉक्स देखें (opens in a new tab)

युल और युल+

यदि आप एथेरियम के लिए नए हैं और अभी तक स्मार्ट अनुबंध भाषाओं के साथ कोई कोडिंग नहीं की है, तो हम अनुशंसा करते हैं कि आप सॉलिडिटी या वाइपर के साथ शुरुआत करें। स्मार्ट अनुबंध सुरक्षा सर्वोत्तम प्रथाओं और EVM के साथ काम करने की बारीकियों से परिचित होने के बाद ही युल या युल+ को देखें।

युल

  • एथेरियम के लिए मध्यवर्ती भाषा।
  • यह EVM और Ewasm (opens in a new tab), एक एथेरियम फ्लेवर्ड वेबअसेंबली, का समर्थन करता है और इसे दोनों प्लेटफॉर्मों के लिए एक प्रयोग करने योग्य सामान्य भाजक के रूप में डिज़ाइन किया गया है।
  • उच्च-स्तरीय अनुकूलन चरणों के लिए अच्छा लक्ष्य जो EVM और Ewasm दोनों प्लेटफार्मों को समान रूप से लाभान्वित कर सकता है।

युल+

  • युल के लिए एक निम्न-स्तरीय, अत्यधिक कुशल एक्सटेंशन।
  • शुरुआत में इसे आशावादी रोलअप अनुबंध के लिए डिज़ाइन किया गया था।
  • युल+ को युल के लिए एक प्रयोगात्मक अपग्रेड प्रस्ताव के रूप में देखा जा सकता है, इसमें नई सुविधाएँ जोड़ सकते हैं।

उदाहरण अनुबंध

निम्नलिखित सरल उदाहरण एक पावर फंक्शन को लागू करता है। इसे solc --strict-assembly --bin input.yul का उपयोग करके संकलित किया जा सकता है। उदाहरण input.yul फ़ाइल में स्टोर किया जाना चाहिए।

1{
2 function power(base, exponent) -> result
3 {
4 switch exponent
5 case 0 { result := 1 }
6 case 1 { result := base }
7 default
8 {
9 result := power(mul(base, base), div(exponent, 2))
10 if mod(exponent, 2) { result := mul(base, result) }
11 }
12 }
13 let res := power(calldataload(0), calldataload(32))
14 mstore(0, res)
15 return(0, 32)
16}

यदि आप पहले से ही स्मार्ट अनुबंधों में अच्छी तरह से अनुभवी हैं, तो युल में एक पूर्ण ERC20 कार्यान्वयन यहां (opens in a new tab) पाया जा सकता है।

Fe

  • एथेरियम वर्चुअल मशीन (EVM) के लिए स्टैटिक रूप से टाइप की गई भाषा।
  • पायथन और रस्ट से प्रेरित।
  • सीखने में आसान होने का लक्ष्य है -- यहां तक कि उन डेवलपर्स के लिए भी जो एथेरियम पारिस्थितिकी इकोसिस्टम में नए हैं।
  • Fe का विकास अभी भी अपने शुरुआती चरण में है, जनवरी 2021 में भाषा की अल्फा रिलीज़ हुई थी।

उदाहरण अनुबंध

निम्नलिखित Fe में लागू एक साधारण अनुबंध है।

1type BookMsg = bytes[100]
2
3contract GuestBook:
4 pub guest_book: map<address, BookMsg>
5
6 event Signed:
7 book_msg: BookMsg
8
9 pub def sign(book_msg: BookMsg):
10 self.guest_book[msg.sender] = book_msg
11
12 emit Signed(book_msg=book_msg)
13
14 pub def get_msg(addr: address) -> BookMsg:
15 return self.guest_book[addr].to_mem()
16

कैसे चुनें

किसी भी अन्य प्रोग्रामिंग भाषा की तरह, यह ज्यादातर सही काम के साथ-साथ व्यक्तिगत प्राथमिकताओं के लिए सही उपकरण चुनने के बारे में है।

यदि आपने अभी तक किसी भी भाषा को आजमाया नहीं है, तो यहां कुछ बातें दी गई हैं जिन पर आपको विचार करना चाहिए:

सॉलिडिटी के बारे में क्या अच्छा है?

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

वाइपर के बारे में क्या बढ़िया है?

  • पायथन डेवलपर के लिए आरंभ करने का शानदार तरीका जो स्मार्ट अनुबंध लिखना चाहते हैं।
  • वाइपर में कम विशेषताएं हैं जो विचारों के त्वरित प्रोटोटाइप के लिए इसे शानदार बनाती हैं।
  • वाइपर का उद्देश्य ऑडिट करना आसान और अधिकतम मानव-पठनीय होना है।

युल और युल+ के बारे में क्या बढ़िया है?

  • सरलीकृत और कार्यात्मक निम्न-स्तरीय भाषा।
  • अधूरी EVM के बहुत करीब पहुंचने देता है, जो आपके अनुबंधों के गैस उपयोग को अनुकूलित करने में मदद कर सकता है।

भाषाओं की तुलना

मूल सिंटैक्स, अनुबंध जीवनचक्र, इंटरफेस, ऑपरेटर, डेटा संरचनाएं, फ़ंक्शन, नियंत्रण प्रवाह और अधिक की तुलना के लिए, Auditless द्वारा इस चीटशीट (opens in a new tab) को देखें।

आगे की रीडिंग

क्या यह लेख सहायक था?