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

सॉलिडिटी स्मार्ट अनुबंध से ERC-20 टोकन का स्थानांतरण और अनुमोदन

स्मार्ट अनुबंध
टोकन
Solidity
erc-20
माध्यमिक
jdourlens
7 अप्रैल 2020
7 मिनट का पठन

पिछले ट्यूटोरियल में हमने एथेरियम ब्लॉकचेन पर सॉलिडिटी में एक ERC-20 टोकन की शारीरिक रचना का अध्ययन किया। इस लेख में हम देखेंगे कि हम सॉलिडिटी भाषा का उपयोग करके एक टोकन के साथ इंटरैक्ट करने के लिए एक स्मार्ट अनुबंध का उपयोग कैसे कर सकते हैं।

इस स्मार्ट अनुबंध के लिए, हम एक वास्तविक डमी विकेंद्रीकृत एक्सचेंज बनाएंगे जहां एक यूज़र हमारे नए तैनात ERC-20 टोकन के लिए ईथर का ट्रेड कर सकता है।

इस ट्यूटोरियल के लिए हम आधार के रूप में पिछले ट्यूटोरियल में लिखे गए कोड का उपयोग करेंगे। हमारा DEX अपने कंस्ट्रक्टर में अनुबंध का एक उदाहरण तत्काल करेगा और इसके संचालन करेगा:

  • टोकन को ईथर में एक्सचेंज करना
  • ईथर को टोकन में एक्सचेंज करना

हम अपना सरल ERC20 कोडबेस जोड़कर अपना विकेंद्रीकृत एक्सचेंज कोड शुरू करेंगे:

हमारा नया DEX स्मार्ट अनुबंध ERC-20 को तैनात करेगा और सभी आपूर्ति प्राप्त करेगा:

तो अब हमारे पास अपना DEX है और इसमें सभी टोकन रिज़र्व उपलब्ध हैं। अनुबंध में दो फ़ंक्शन हैं:

  • buy: यूज़र ईथर भेज सकता है और बदले में टोकन प्राप्त कर सकता है
  • sell: यूज़र ईथर वापस पाने के लिए टोकन भेजने का निर्णय ले सकता है

बाय फंक्शन

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

ध्यान दें कि यदि हम किसी त्रुटि के मामले में require फंक्शन को कॉल करते हैं, तो भेजा गया ईथर सीधे वापस कर दिया जाएगा और यूज़र को वापस दे दिया जाएगा।

चीजों को सरल रखने के लिए, हम सिर्फ 1 Wei के लिए 1 टोकन एक्सचेंज करते हैं।

function buy() payable public {
    uint256 amountTobuy = msg.value;
    uint256 dexBalance = token.balanceOf(address(this));
    require(amountTobuy > 0, "आपको कुछ ईथर भेजने की आवश्यकता है");
    require(amountTobuy <= dexBalance, "रिज़र्व में पर्याप्त टोकन नहीं हैं");
    token.transfer(msg.sender, amountTobuy);
    emit Bought(amountTobuy);
}

उस स्थिति में जहां खरीद सफल होती है, हमें ट्रांज़ैक्शन में दो इवेंट देखने चाहिए: टोकन Transfer और Bought इवेंट।

ट्रांज़ैक्शन में दो इवेंट्स: ट्रांसफर और बॉट

सेल फंक्शन

सेल के लिए जिम्मेदार फंक्शन को पहले यह आवश्यक होगा कि यूज़र ने पहले से approve फंक्शन को कॉल करके राशि को स्वीकृत कर लिया हो। ट्रांसफर को स्वीकृत करने के लिए यह आवश्यक है कि DEX द्वारा इंस्टेंटिऐट किए गए ERC20Basic टोकन को यूज़र द्वारा कॉल किया जाए। यह पहले DEX अनुबंध के token() फ़ंक्शन को कॉल करके उस पते को पुनः प्राप्त करने के लिए प्राप्त किया जा सकता है जहां DEX ने token नामक ERC20Basic अनुबंध को तैनात किया था। फिर हम अपने सत्र में उस अनुबंध का एक उदाहरण बनाते हैं और उसके approve फ़ंक्शन को कॉल करते हैं। फिर हम DEX के sell फ़ंक्शन को कॉल करने और अपने टोकन को ईथर के लिए वापस स्वैप करने में सक्षम हैं। उदाहरण के लिए, एक इंटरैक्टिव ब्राउनी सत्र में यह ऐसा दिखता है:

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

function sell(uint256 amount) public {
    require(amount > 0, "आपको कम से कम कुछ टोकन बेचने की ज़रूरत है");
    uint256 allowance = token.allowance(msg.sender, address(this));
    require(allowance >= amount, "टोकन अलाउंस की जाँच करें");
    token.transferFrom(msg.sender, address(this), amount);
    payable(msg.sender).transfer(amount);
    emit Sold(amount);
}

यदि सब कुछ काम करता है तो आपको ट्रांज़ैक्शन में 2 इवेंट (Transfer और Sold) और आपका टोकन बैलेंस और ईथर बैलेंस अपडेट होना चाहिए।

ट्रांज़ैक्शन में दो इवेंट: ट्रांसफर और सोल्ड

इस ट्यूटोरियल से हमने देखा कि ERC-20 टोकन के बैलेंस और अलाउंस की जांच कैसे करें और इंटरफ़ेस का उपयोग करके ERC20 स्मार्ट अनुबंध के Transfer और TransferFrom को कैसे कॉल करें।

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

ट्यूटोरियल के लिए पूरा कोड यहां दिया गया है:

पेज का अंतिम अपडेट: 3 मार्च 2026

क्या यह ट्यूटोरियल उपयोगी था?