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

Solidity स्मार्ट कॉन्ट्रॅक्टमधून ERC-20 टोकनचे हस्तांतरण आणि मंजूरी

स्मार्ट कॉन्ट्रॅक्ट
tokens
Solidity
erc-20
मध्यम
jdourlens
7 एप्रिल, 2020
6 मिनिट वाचन

मागील ट्युटोरियलमध्ये आपण Ethereum ब्लॉकचेनवरील Solidity मधील ERC-20 टोकनची रचना अभ्यासली. या लेखात आपण पाहू की Solidity भाषा वापरून टोकनसोबत संवाद साधण्यासाठी आपण स्मार्ट कॉन्ट्रॅक्टचा कसा वापर करू शकतो.

या स्मार्ट कॉन्ट्रॅक्टसाठी, आम्ही एक प्रत्यक्ष डमी विकेंद्रित एक्सचेंज तयार करू जिथे वापरकर्ता आमच्या नवीन तैनात केलेल्या ERC-20 टोकनच्या बदल्यात ईथरचा व्यापार करू शकतो.

या ट्युटोरियलसाठी आम्ही मागील ट्युटोरियलमध्ये लिहिलेला कोड आधार म्हणून वापरणार आहोत. आमचा DEX त्याच्या कन्स्ट्रक्टरमध्ये कॉन्ट्रॅक्टचा इन्स्टन्स तयार करेल आणि खालील कार्ये पार पाडेल:

  • टोकनची ईथरमध्ये देवाणघेवाण करणे
  • ईथरची टोकनमध्ये देवाणघेवाण करणे

आपण आपला सोपा ERC20 कोडबेस जोडून आपला विकेंद्रित एक्सचेंज कोड सुरू करू:

आमचा नवीन DEX स्मार्ट कॉन्ट्रॅक्ट ERC-20 तैनात करेल आणि पुरवलेल्या सर्व गोष्टी मिळवेल:

तर आता आपल्याकडे आपला DEX आहे आणि त्यात सर्व टोकन राखीव निधी उपलब्ध आहे. कॉन्ट्रॅक्टमध्ये दोन फंक्शन्स आहेत:

  • buy: वापरकर्ता ईथर पाठवून बदल्यात टोकन्स मिळवू शकतो
  • sell: वापरकर्ता ईथर परत मिळवण्यासाठी टोकन्स पाठवण्याचा निर्णय घेऊ शकतो

buy फंक्शन

चला buy फंक्शन कोड करूया. आपल्याला आधी मेसेजमध्ये किती ईथर आहे हे तपासावे लागेल आणि कॉन्ट्रॅक्ट्सकडे पुरेसे टोकन आहेत आणि मेसेजमध्ये काही ईथर आहे याची पडताळणी करावी लागेल. जर कॉन्ट्रॅक्टकडे पुरेसे टोकन असतील, तर ते वापरकर्त्याला टोकनची संख्या पाठवेल आणि 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);
}

buy यशस्वी झाल्यास, आपल्याला ट्रांझॅक्शनमध्ये दोन इव्हेंट दिसले पाहिजेत: टोकन Transfer आणि Bought इव्हेंट.

ट्रांझॅक्शनमधील दोन इव्हेंट: Transfer आणि Bought

sell फंक्शन

विक्रीसाठी जबाबदार फंक्शनला आधी approve फंक्शन कॉल करून वापरकर्त्याकडून रकमेला मंजुरी देण्याची आवश्यकता असेल. हस्तांतरणाला मंजुरी देण्यासाठी DEX द्वारे तयार केलेल्या ERC20Basic टोकनला वापरकर्त्याद्वारे कॉल करणे आवश्यक आहे. हे साध्य करण्यासाठी प्रथम DEX कॉन्ट्रॅक्टचे token() फंक्शन कॉल करून तो ऍड्रेस मिळवावा लागेल जिथे DEX ने token नावाचा ERC20Basic कॉन्ट्रॅक्ट तैनात केला आहे. त्यानंतर आम्ही आमच्या सेशनमध्ये त्या कॉन्ट्रॅक्टचा एक इन्स्टन्स तयार करतो आणि त्याचे approve फंक्शन कॉल करतो. त्यानंतर आपण DEX चे sell फंक्शन कॉल करू शकतो आणि आपले टोकन परत ईथरसाठी स्वॅप करू शकतो. उदाहरणार्थ, इंटरऍक्टिव्ह ब्राउनी सेशनमध्ये हे असे दिसते:

मग जेव्हा 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) दिसले पाहिजेत आणि तुमचा टोकन बॅलन्स आणि ईथर बॅलन्स अपडेट झालेला दिसेल.

ट्रांझॅक्शनमधील दोन इव्हेंट: Transfer आणि Sold

या ट्युटोरियलमधून आपण ERC-20 टोकनचा बॅलन्स आणि भत्ता कसा तपासावा आणि इंटरफेस वापरून ERC20 स्मार्ट कॉन्ट्रॅक्टचे Transfer आणि TransferFrom कसे कॉल करावे हे पाहिले.

एकदा तुम्ही व्यवहार केल्यावर, तुमच्याकडे तुमच्या करारासाठी केलेल्या व्यवहारांची प्रतीक्षा करण्यासाठी आणि तपशील मिळवण्यासाठी (opens in a new tab) एक जावास्क्रिप्ट ट्युटोरियल आहे आणि जोपर्यंत तुमच्याकडे ABI असेल तोपर्यंत टोकन हस्तांतरणाद्वारे किंवा इतर कोणत्याही इव्हेंट्सद्वारे तयार केलेले इव्हेंट्स डीकोड करण्यासाठी एक ट्युटोरियल (opens in a new tab) आहे.

ट्युटोरियलसाठी संपूर्ण कोड येथे आहे:

पृष्ठ शेवटचे अपडेट: 3 मार्च, 2026

हे ट्युटोरियल उपयुक्त होते का?