اہم مواد پر جائیں

ERC-20 ٹوکن اسمارٹ کنٹریکٹ کو سمجھیں

اسمارٹ معاہدات
tokens
solidity
erc-20
ابتدائی
jdourlens
5 اپریل، 2020
5 منٹ کی پڑھائی

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 ٹوکن کا ایک سادہ نفاذ پیش کریں گے۔

گیٹرز

1function totalSupply() external view returns (uint256);

موجود ٹوکنز کی مقدار واپس کرتا ہے۔ یہ فنکشن ایک گیٹر ہے اور کنٹریکٹ کی اسٹیٹ میں ترمیم نہیں کرتا ہے۔ ذہن میں رکھیں کہ Solidity میں کوئی فلوٹ نہیں ہیں۔ اس لیے زیادہ تر ٹوکن 18 ڈیسیملز اپناتے ہیں اور کل سپلائی اور دیگر نتائج اس طرح واپس کریں گے: 1 ٹوکن کے لیے 1000000000000000000۔ ہر ٹوکن میں 18 ڈیسیملز نہیں ہوتے ہیں اور یہ ایک ایسی چیز ہے جس پر آپ کو ٹوکنز کے ساتھ معاملہ کرتے وقت واقعی دھیان دینے کی ضرورت ہے۔

1function balanceOf(address account) external view returns (uint256);

ایک ایڈریس (account) کی ملکیت والے ٹوکنز کی مقدار واپس کرتا ہے۔ یہ فنکشن ایک گیٹر ہے اور کنٹریکٹ کی اسٹیٹ میں ترمیم نہیں کرتا ہے۔

1function allowance(address owner, address spender) external view returns (uint256);

ERC-20 اسٹینڈرڈ ایک ایڈریس کو اجازت دیتا ہے کہ وہ کسی دوسرے ایڈریس کو الاؤنس دے تاکہ وہ اس سے ٹوکن حاصل کر سکے۔ یہ گیٹر ٹوکنز کی باقی تعداد واپس کرتا ہے جو spender کو owner کی جانب سے خرچ کرنے کی اجازت ہوگی۔ یہ فنکشن ایک گیٹر ہے اور کنٹریکٹ کی اسٹیٹ میں ترمیم نہیں کرتا ہے اور اسے بطور ڈیفالٹ 0 واپس کرنا چاہیے۔

فنکشنز

1function transfer(address recipient, uint256 amount) external returns (bool);

ٹوکنز کی amount کو فنکشن کالر ایڈریس (msg.sender) سے وصول کنندہ کے ایڈریس پر منتقل کرتا ہے۔ یہ فنکشن Transfer ایونٹ جاری کرتا ہے جس کی تعریف بعد میں کی گئی ہے۔ اگر ٹرانسفر ممکن تھا تو یہ صحیح (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 میں منتقل کرتا ہے۔ پھر کالر کے الاؤنس سے amount کاٹ لی جاتی ہے۔ یہ فنکشن Transfer ایونٹ جاری کرتا ہے۔

ایونٹس

1event Transfer(address indexed from, address indexed to, uint256 value);

یہ ایونٹ اس وقت جاری ہوتا ہے جب ٹوکنز کی رقم (value) from ایڈریس سے to ایڈریس پر بھیجی جاتی ہے۔

نئے ٹوکنز کی منٹنگ کے معاملے میں، ٹرانسفر عام طور پر 0x00..0000 ایڈریس from ہوتا ہے، جبکہ ٹوکنز کو برن کرنے کے معاملے میں ٹرانسفر 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 امپلیمنٹیشنopens in a new tab ہے۔

صفحہ کی آخری تازہ کاری: 14 فروری، 2026

کیا یہ ٹیوٹوریل کارآمد تھا؟