মূল কন্টেন্টে যান

Solidity স্মার্ট কন্ট্রাক্ট থেকে ERC-20 টোকেন হস্তান্তর এবং অনুমোদন

স্মার্ট কন্ট্রাক্ট
টোকেন
Solidity
erc-20
মধ্যবর্তী
jdourlens
7 এপ্রিল, 2020
7 মিনিট পড়ার সময়

পূর্ববর্তী টিউটোরিয়ালে আমরা ইথেরিয়াম ব্লকচেইনে Solidity-তে একটি ERC-20 টোকেনের গঠন সম্পর্কে জেনেছি। এই নিবন্ধে আমরা দেখব কীভাবে Solidity ভাষা ব্যবহার করে একটি টোকেনের সাথে ইন্টারঅ্যাক্ট করার জন্য একটি স্মার্ট কন্ট্রাক্ট ব্যবহার করা যায়।

এই স্মার্ট কন্ট্রাক্টের জন্য, আমরা একটি বাস্তব ডামি বিকেন্দ্রীকৃত এক্সচেঞ্জ তৈরি করব যেখানে একজন ব্যবহারকারী আমাদের নতুন ডিপ্লয় করা ERC-20 টোকেন-এর বিনিময়ে ইথার ট্রেড করতে পারবেন।

এই টিউটোরিয়ালের জন্য আমরা পূর্ববর্তী টিউটোরিয়ালে লেখা কোডটিকে ভিত্তি হিসেবে ব্যবহার করব। আমাদের DEX এর কনস্ট্রাক্টরে কন্ট্রাক্টের একটি ইনস্ট্যান্স তৈরি করবে এবং নিচের কাজগুলো সম্পাদন করবে:

  • টোকেনকে ইথারে বিনিময় করা
  • ইথারকে টোকেনে বিনিময় করা

আমরা আমাদের সাধারণ ERC20 কোডবেস যোগ করে আমাদের বিকেন্দ্রীকৃত এক্সচেঞ্জ কোড শুরু করব:

আমাদের নতুন DEX স্মার্ট কন্ট্রাক্ট ERC-20 ডিপ্লয় করবে এবং সরবরাহকৃত সবকিছু পাবে:

সুতরাং এখন আমাদের কাছে আমাদের DEX আছে এবং এর কাছে সমস্ত টোকেন রিজার্ভ উপলব্ধ রয়েছে। কন্ট্রাক্টটির দুটি ফাংশন রয়েছে:

  • buy: ব্যবহারকারী ইথার পাঠাতে পারেন এবং বিনিময়ে টোকেন পেতে পারেন
  • sell: ব্যবহারকারী ইথার ফেরত পেতে টোকেন পাঠানোর সিদ্ধান্ত নিতে পারেন

buy ফাংশন

চলুন buy ফাংশনটি কোড করি। আমাদের প্রথমে বার্তায় থাকা ইথারের পরিমাণ পরীক্ষা করতে হবে এবং যাচাই করতে হবে যে কন্ট্রাক্টগুলোর কাছে পর্যাপ্ত টোকেন আছে এবং বার্তায় কিছু ইথার রয়েছে। যদি কন্ট্রাক্টের কাছে পর্যাপ্ত টোকেন থাকে তবে এটি ব্যবহারকারীকে সেই সংখ্যক টোকেন পাঠাবে এবং Bought ইভেন্ট এমিট করবে।

মনে রাখবেন যে যদি আমরা কোনো ত্রুটির ক্ষেত্রে রিকোয়ার ফাংশন কল করি, তবে পাঠানো ইথার সরাসরি রিভার্ট হয়ে যাবে এবং ব্যবহারকারীকে ফেরত দেওয়া হবে।

বিষয়গুলো সহজ রাখার জন্য, আমরা শুধু 1 Wei-এর বিনিময়ে 1 টোকেন বিনিময় করব।

function buy() payable public {
    uint256 amountTobuy = msg.value;
    uint256 dexBalance = token.balanceOf(address(this));
    require(amountTobuy > 0, "You need to send some ether");
    require(amountTobuy <= dexBalance, "Not enough tokens in the reserve");
    token.transfer(msg.sender, amountTobuy);
    emit Bought(amountTobuy);
}

যদি কেনা সফল হয় তবে আমাদের ট্রানজ্যাকশনে দুটি ইভেন্ট দেখতে পাওয়া উচিত: টোকেন Transfer এবং Bought ইভেন্ট।

Two events in the transaction: Transfer and Bought

sell ফাংশন

বিক্রয়ের জন্য দায়ী ফাংশনটি প্রথমে ব্যবহারকারীকে আগে থেকে approve ফাংশন কল করে পরিমাণটি অনুমোদন করা রিকোয়ার করবে। হস্তান্তর অনুমোদন করার জন্য ব্যবহারকারীকে DEX দ্বারা ইনস্ট্যানশিয়েট করা ERC20Basic টোকেন কল করতে হবে। এটি প্রথমে DEX কন্ট্রাক্টের token() ফাংশন কল করে অর্জন করা যেতে পারে, যাতে DEX যেখানে token নামক ERC20Basic কন্ট্রাক্ট ডিপ্লয় করেছে সেই ঠিকানাটি পুনরুদ্ধার করা যায়। তারপর আমরা আমাদের সেশনে সেই কন্ট্রাক্টের একটি ইনস্ট্যান্স তৈরি করি এবং এর approve ফাংশন কল করি। এরপর আমরা DEX-এর sell ফাংশন কল করতে এবং ইথারের বিনিময়ে আমাদের টোকেনগুলো সোয়াপ করতে সক্ষম হই। উদাহরণস্বরূপ, একটি ইন্টারেক্টিভ Brownie সেশনে এটি দেখতে এমন হয়:

তারপর যখন sell ফাংশন কল করা হয়, আমরা পরীক্ষা করব যে কলারের ঠিকানা থেকে কন্ট্রাক্টের ঠিকানায় হস্তান্তর সফল হয়েছে কিনা এবং তারপর কলারের ঠিকানায় ইথারগুলো ফেরত পাঠাব।

function sell(uint256 amount) public {
    require(amount > 0, "You need to sell at least some tokens");
    uint256 allowance = token.allowance(msg.sender, address(this));
    require(allowance >= amount, "Check the token allowance");
    token.transferFrom(msg.sender, address(this), amount);
    payable(msg.sender).transfer(amount);
    emit Sold(amount);
}

যদি সবকিছু ঠিকঠাক কাজ করে তবে আপনার ট্রানজ্যাকশনে 2টি ইভেন্ট (একটি Transfer এবং Sold) দেখতে পাওয়া উচিত এবং আপনার টোকেন ব্যালেন্স ও ইথার ব্যালেন্স আপডেট হওয়া উচিত।

Two events in the transaction: Transfer and Sold


এই টিউটোরিয়াল থেকে আমরা দেখেছি কীভাবে একটি ERC-20 টোকেনের ব্যালেন্স এবং অ্যালাউন্স পরীক্ষা করতে হয় এবং ইন্টারফেস ব্যবহার করে একটি ERC20 স্মার্ট কন্ট্রাক্টের Transfer এবং TransferFrom কল করতে হয়।

একবার আপনি একটি ট্রানজ্যাকশন করলে, আপনার কন্ট্রাক্টে করা ট্রানজ্যাকশনগুলোর জন্য অপেক্ষা করতে এবং বিস্তারিত জানতে (opens in a new tab) আমাদের একটি JavaScript টিউটোরিয়াল রয়েছে এবং যতক্ষণ আপনার কাছে ABI থাকে ততক্ষণ টোকেন হস্তান্তর বা অন্য কোনো ইভেন্ট দ্বারা তৈরি ইভেন্টগুলো ডিকোড করার জন্য একটি টিউটোরিয়াল (opens in a new tab) রয়েছে।

এখানে টিউটোরিয়ালের সম্পূর্ণ কোড দেওয়া হলো: