ERC-20 ٹوکن اسمارٹ کانٹریکٹ کو سمجھیں
Ethereum پر سب سے اہم اسمارٹ کانٹریکٹ اسٹینڈرڈز میں سے ایک کو ERC-20 کے نام سے جانا جاتا ہے، جو فنجیبل ٹوکن کے نفاذ کے لیے Ethereum بلاک چین پر تمام اسمارٹ کانٹریکٹس کے لیے استعمال ہونے والے تکنیکی معیار کے طور پر ابھرا ہے۔
ERC-20 ان اصولوں کی ایک مشترکہ فہرست کی وضاحت کرتا ہے جن پر تمام فنجیبل Ethereum ٹوکنز کو عمل کرنا چاہیے۔ نتیجتاً، یہ ٹوکن اسٹینڈرڈ ہر قسم کے ڈیولپرز کو بااختیار بناتا ہے کہ وہ درست طریقے سے پیشین گوئی کر سکیں کہ نئے ٹوکنز بڑے Ethereum سسٹم کے اندر کیسے کام کریں گے۔ یہ ڈیولپرز کے کاموں کو آسان اور سہل بناتا ہے، کیونکہ وہ اپنا کام یہ جان کر جاری رکھ سکتے ہیں کہ جب تک ٹوکن قواعد کی پیروی کرتا ہے، ہر نئے پروجیکٹ کو ہر بار نیا ٹوکن جاری ہونے پر دوبارہ کرنے کی ضرورت نہیں ہوگی۔
یہاں ایک انٹرفیس کے طور پر پیش کیے گئے وہ فنکشنز ہیں جنہیں ERC-20 کو نافذ کرنا چاہیے۔ اگر آپ کو یقین نہیں ہے کہ انٹرفیس کیا ہے: تو Solidity میں OOP پروگرامنگ (opens in a new tab) کے بارے میں ہمارا مضمون دیکھیں۔
1pragma solidity ^0.6.0;2
3interface IERC20 {4
5 function totalSupply() external view returns (uint256);6 function balanceOf(address account) external view returns (uint256);7 function allowance(address owner, address spender) external view returns (uint256);8
9 function transfer(address recipient, uint256 amount) external returns (bool);10 function approve(address spender, uint256 amount) external returns (bool);11 function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);12
13
14 event Transfer(address indexed from, address indexed to, uint256 value);15 event Approval(address indexed owner, address indexed spender, uint256 value);16}یہاں لائن بہ لائن وضاحت دی گئی ہے کہ ہر فنکشن کس لیے ہے۔ اس کے بعد ہم ERC-20 ٹوکن کا ایک سادہ نفاذ پیش کریں گے۔
گیٹرز (Getters)
1function totalSupply() external view returns (uint256);موجود ٹوکنز کی مقدار واپس کرتا ہے۔ یہ فنکشن ایک گیٹر (getter) ہے اور کانٹریکٹ کی اسٹیٹ (state) میں ترمیم نہیں کرتا ہے۔ ذہن میں رکھیں کہ Solidity میں کوئی فلوٹس (floats) نہیں ہیں۔ اس لیے زیادہ تر ٹوکنز 18 اعشاریہ (decimals) اپناتے ہیں اور کل سپلائی اور دیگر نتائج کو 1 ٹوکن کے لیے 1000000000000000000 کے طور پر واپس کریں گے۔ ہر ٹوکن میں 18 اعشاریہ نہیں ہوتے ہیں اور ٹوکنز کے ساتھ کام کرتے وقت آپ کو واقعی اس چیز کا خیال رکھنے کی ضرورت ہے۔
1function balanceOf(address account) external view returns (uint256);کسی ایڈریس (account) کی ملکیت والے ٹوکنز کی مقدار واپس کرتا ہے۔ یہ فنکشن ایک گیٹر ہے اور کانٹریکٹ کی اسٹیٹ میں ترمیم نہیں کرتا ہے۔
1function allowance(address owner, address spender) external view returns (uint256);ERC-20 اسٹینڈرڈ ایک ایڈریس کو دوسرے ایڈریس کو الاؤنس (allowance) دینے کی اجازت دیتا ہے تاکہ وہ اس سے ٹوکن بازیافت کر سکے۔ یہ گیٹر باقی ماندہ ٹوکنز کی تعداد واپس کرتا ہے جو spender کو owner کی جانب سے خرچ کرنے کی اجازت ہوگی۔ یہ فنکشن ایک گیٹر ہے اور کانٹریکٹ کی اسٹیٹ میں ترمیم نہیں کرتا ہے اور اسے بائی ڈیفالٹ 0 واپس کرنا چاہیے۔
فنکشنز
1function transfer(address recipient, uint256 amount) external returns (bool);ٹوکنز کی amount کو فنکشن کالر ایڈریس (msg.sender) سے وصول کنندہ کے ایڈریس پر منتقل کرتا ہے۔ یہ فنکشن بعد میں بیان کردہ Transfer ایونٹ کو خارج (emit) کرتا ہے۔ اگر منتقلی ممکن ہو تو یہ true واپس کرتا ہے۔
1function approve(address spender, uint256 amount) external returns (bool);allowance کی وہ مقدار سیٹ کریں جو spender کو فنکشن کالر (msg.sender) کے بیلنس سے منتقل کرنے کی اجازت ہے۔ یہ فنکشن Approval ایونٹ کو خارج کرتا ہے۔ فنکشن یہ واپس کرتا ہے کہ آیا الاؤنس کامیابی کے ساتھ سیٹ کیا گیا تھا۔
1function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);الاؤنس میکانزم کا استعمال کرتے ہوئے ٹوکنز کی amount کو sender سے recipient میں منتقل کرتا ہے۔ اس کے بعد کالر کے الاؤنس سے رقم کاٹ لی جاتی ہے۔ یہ فنکشن Transfer ایونٹ کو خارج کرتا ہے۔
ایونٹس
1event Transfer(address indexed from, address indexed to, uint256 value);یہ ایونٹ اس وقت خارج ہوتا ہے جب ٹوکنز کی مقدار (value) from ایڈریس سے to ایڈریس پر بھیجی جاتی ہے۔
نئے ٹوکنز منٹ (mint) کرنے کی صورت میں، منتقلی عام طور پر 0x00..0000 ایڈریس from (سے) ہوتی ہے جبکہ ٹوکنز کو برن (burn) کرنے کی صورت میں منتقلی 0x00..0000 to (تک) ہوتی ہے۔
1event Approval(address indexed owner, address indexed spender, uint256 value);یہ ایونٹ اس وقت خارج ہوتا ہے جب ٹوکنز کی مقدار (value) کو owner کی طرف سے spender کے ذریعے استعمال کرنے کی منظوری دی جاتی ہے۔
ERC-20 ٹوکنز کا ایک بنیادی نفاذ
آپ کے ERC-20 ٹوکن کی بنیاد رکھنے کے لیے سب سے آسان کوڈ یہ ہے:
1pragma solidity ^0.8.0;2
3interface IERC20 {4
5 function totalSupply() external view returns (uint256);6 function balanceOf(address account) external view returns (uint256);7 function allowance(address owner, address spender) external view returns (uint256);8
9 function transfer(address recipient, uint256 amount) external returns (bool);10 function approve(address spender, uint256 amount) external returns (bool);11 function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);12
13
14 event Transfer(address indexed from, address indexed to, uint256 value);15 event Approval(address indexed owner, address indexed spender, uint256 value);16}17
18
19contract ERC20Basic is IERC20 {20
21 string public constant name = "ERC20Basic";22 string public constant symbol = "ERC";23 uint8 public constant decimals = 18;24
25
26 mapping(address => uint256) balances;27
28 mapping(address => mapping (address => uint256)) allowed;29
30 uint256 totalSupply_ = 10 ether;31
32
33 constructor() {34 balances[msg.sender] = totalSupply_;35 }36
37 function totalSupply() public override view returns (uint256) {38 return totalSupply_;39 }40
41 function balanceOf(address tokenOwner) public override view returns (uint256) {42 return balances[tokenOwner];43 }44
45 function transfer(address receiver, uint256 numTokens) public override returns (bool) {46 require(numTokens <= balances[msg.sender]);47 balances[msg.sender] = balances[msg.sender]-numTokens;48 balances[receiver] = balances[receiver]+numTokens;49 emit Transfer(msg.sender, receiver, numTokens);50 return true;51 }52
53 function approve(address delegate, uint256 numTokens) public override returns (bool) {54 allowed[msg.sender][delegate] = numTokens;55 emit Approval(msg.sender, delegate, numTokens);56 return true;57 }58
59 function allowance(address owner, address delegate) public override view returns (uint) {60 return allowed[owner][delegate];61 }62
63 function transferFrom(address owner, address buyer, uint256 numTokens) public override returns (bool) {64 require(numTokens <= balances[owner]);65 require(numTokens <= allowed[owner][msg.sender]);66
67 balances[owner] = balances[owner]-numTokens;68 allowed[owner][msg.sender] = allowed[owner][msg.sender]-numTokens;69 balances[buyer] = balances[buyer]+numTokens;70 emit Transfer(owner, buyer, numTokens);71 return true;72 }73}ERC-20 ٹوکن اسٹینڈرڈ کا ایک اور بہترین نفاذ OpenZeppelin ERC-20 implementation (opens in a new tab) ہے۔
صفحہ کی آخری اپ ڈیٹ: ۳ مارچ، ۲۰۲۶