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

একটি সলিডিটি স্মার্ট কন্ট্রাক্ট থেকে ERC-20 টোকেনের ট্রান্সফার এবং অ্যাপ্রুভাল

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

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

এই স্মার্ট কন্ট্রাক্টের জন্য, আমরা একটি বাস্তব ডামি ডিসেন্ট্রালাইজড এক্সচেঞ্জ তৈরি করব যেখানে একজন ব্যবহারকারী আমাদের নতুন ডিপ্লয় করা 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, "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 ইভেন্ট।

লেনদেনে দুটি ইভেন্ট: Transfer এবং Bought

sell ফাংশন

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

তারপর যখন 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) দেখতে পাওয়া উচিত এবং আপনার টোকেন ব্যালেন্স ও ইথার ব্যালেন্স আপডেট হওয়া উচিত।

লেনদেনে দুটি ইভেন্ট: Transfer এবং Sold

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

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

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

পেজ সর্বশেষ আপডেট করা হয়েছে: 3 মার্চ, 2026

এই টিউটোরিয়ালটি কি সহায়ক ছিল?