Solidity তে Token Creation, Minting এবং Burning হল একটি স্মার্ট কন্ট্রাক্টের মাধ্যমে ডিজিটাল টোকেন তৈরি এবং তার পরবর্তী পরিবর্তন (যেমন নতুন টোকেন তৈরি করা বা পুরানো টোকেন ধ্বংস করা) পরিচালনা করার প্রক্রিয়া। এই কার্যক্রমগুলো একটি ব্লকচেইন ভিত্তিক টোকেনের জন্য গুরুত্বপূর্ণ, বিশেষত ERC20 বা ERC721 স্ট্যান্ডার্ডের টোকেনের জন্য। টোকেন সৃষ্টি, ইস্যু এবং ধ্বংস করাটা ডিজিটাল মুদ্রা এবং সম্পদের ব্যবস্থাপনায় অত্যন্ত গুরুত্বপূর্ণ।
এখানে আমরা ERC20 স্ট্যান্ডার্ডের উদাহরণে Token Creation, Minting, এবং Burning এর ব্যবহার ব্যাখ্যা করবো।
১. Token Creation (টোকেন তৈরি করা)
Token Creation একটি টোকেন স্মার্ট কন্ট্রাক্ট তৈরি করার প্রক্রিয়া, যা একটি নির্দিষ্ট স্ট্যান্ডার্ড অনুযায়ী তৈরি করা হয়। ERC20 এবং ERC721 দুটি জনপ্রিয় টোকেন স্ট্যান্ডার্ড। ERC20 হচ্ছে একটি ফাঙ্গিবল টোকেন (যা এক ধরনের টোকেনের প্রতিটি ইউনিট অপরটির সমান), এবং ERC721 হচ্ছে একটি নন-ফাঙ্গিবল টোকেন (NFT) যা ইউনিক হয়।
ERC20 Token Creation Example:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
interface IERC20 {
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address recipient, uint256 amount) external returns (bool);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
contract MyToken is IERC20 {
string public constant name = "MyToken";
string public constant symbol = "MTK";
uint8 public constant decimals = 18;
uint256 private _totalSupply;
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
constructor(uint256 initialSupply) {
_totalSupply = initialSupply * 10 ** uint256(decimals);
_balances[msg.sender] = _totalSupply; // Supply goes to the contract creator
}
function totalSupply() public view override returns (uint256) {
return _totalSupply;
}
function balanceOf(address account) public view override returns (uint256) {
return _balances[account];
}
function transfer(address recipient, uint256 amount) public override returns (bool) {
_transfer(msg.sender, recipient, amount);
return true;
}
function approve(address spender, uint256 amount) public override returns (bool) {
_approve(msg.sender, spender, amount);
return true;
}
function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
_transfer(sender, recipient, amount);
_approve(sender, msg.sender, _allowances[sender][msg.sender] - amount);
return true;
}
function _transfer(address sender, address recipient, uint256 amount) internal {
require(sender != address(0), "ERC20: transfer from the zero address");
require(recipient != address(0), "ERC20: transfer to the zero address");
require(_balances[sender] >= amount, "ERC20: transfer amount exceeds balance");
_balances[sender] -= amount;
_balances[recipient] += amount;
emit Transfer(sender, recipient, amount);
}
function _approve(address owner, address spender, uint256 amount) internal {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
}এখানে:
- ERC20 token তৈরি করার জন্য
name,symbol, এবংdecimalsডিফাইন করা হয়েছে। - কন্ট্রাক্টের
constructorফাংশনে টোকেনের ইনিশিয়াল সাপ্লাই নির্ধারণ করা হয়েছে, যা ডিপ্লয়ারের কাছে দেয়া হয়।
২. Minting (টোকেন মেন্টিং)
Minting হলো নতুন টোকেন তৈরি করার প্রক্রিয়া। এর মাধ্যমে নতুন টোকেন কন্ট্রাক্টের মধ্যে তৈরি করা হয় এবং তা ব্যবহারকারীদের কাছে বিতরণ করা হয়। ERC20 টোকেনের ক্ষেত্রে, এটি সাধারণত কন্ট্রাক্টের মালিক বা অ্যাডমিন দ্বারা সম্পাদিত হয়।
Minting Example (ERC20):
pragma solidity ^0.8.0;
contract MintableToken is MyToken {
address public owner;
modifier onlyOwner() {
require(msg.sender == owner, "You are not the owner");
_;
}
constructor(uint256 initialSupply) MyToken(initialSupply) {
owner = msg.sender;
}
function mint(address account, uint256 amount) public onlyOwner {
_mint(account, amount);
}
function _mint(address account, uint256 amount) internal {
require(account != address(0), "ERC20: mint to the zero address");
_totalSupply += amount;
_balances[account] += amount;
emit Transfer(address(0), account, amount);
}
}এখানে:
- mint ফাংশনটি কেবলমাত্র মালিকের মাধ্যমে কল করা যাবে এবং এটি নতুন টোকেন তৈরি করে একটি নির্দিষ্ট অ্যাড্রেসে পাঠাবে।
_mintফাংশনটি নতুন টোকেন তৈরি এবং সরবরাহের জন্য ব্যবহৃত হয়।
৩. Burning (টোকেন বার্নিং)
Burning হলো একটি প্রক্রিয়া যার মাধ্যমে টোকেন ব্লকচেইন থেকে স্থায়ীভাবে মুছে ফেলা হয়। এটি সাধারণত টোকেন সাপ্লাই কমাতে ব্যবহৃত হয়, যার ফলে টোকেনের মান বা দাম বৃদ্ধি পেতে পারে। burn ফাংশন একটি নির্দিষ্ট পরিমাণ টোকেন নিয়ে সেটি ব্লকচেইনে ধ্বংস করে।
Burning Example (ERC20):
pragma solidity ^0.8.0;
contract BurnableToken is MyToken {
function burn(uint256 amount) public {
_burn(msg.sender, amount);
}
function _burn(address account, uint256 amount) internal {
require(account != address(0), "ERC20: burn from the zero address");
require(_balances[account] >= amount, "ERC20: burn amount exceeds balance");
_balances[account] -= amount;
_totalSupply -= amount;
emit Transfer(account, address(0), amount); // Emitting Transfer event to signal the burning
}
}এখানে:
- burn ফাংশনটি ব্যবহারকারীকে নির্দিষ্ট পরিমাণ টোকেন বার্ন করার সুযোগ দেয়।
_burnফাংশনটিmsg.senderএর ব্যালেন্স থেকে টোকেন অপসারণ করে এবং টোকেনের মোট সাপ্লাই কমিয়ে দেয়।
সারাংশ
Token Creation, Minting এবং Burning হল টোকেন ব্যবস্থাপনার মূল অংশ যা ব্লকচেইন ভিত্তিক ক্রিপ্টোকারেন্সি এবং ডিজিটাল অ্যাসেটের জন্য ব্যবহৃত হয়। Token Creation এর মাধ্যমে ERC20 বা ERC721 স্ট্যান্ডার্ডের ভিত্তিতে টোকেন তৈরি করা হয়। Minting নতুন টোকেন তৈরি করার প্রক্রিয়া এবং Burning হলো টোকেন ধ্বংস করার প্রক্রিয়া, যা সাপ্লাই কমাতে সহায়ক হয়। এগুলোর মাধ্যমে টোকেন ব্যবস্থাপনা আরও দক্ষ এবং নিরাপদ হয়, যা ডিজিটাল অর্থনীতি এবং ব্লকচেইন প্রোজেক্টের জন্য অপরিহার্য।
Read more