Elewa mkataba-erevu wa tokeni ya ERC-20
Moja ya viwango muhimu vya mkataba-erevu kwenye Ethereum inajulikana kama ERC-20, ambayo imeibuka kama kiwango cha kiufundi kinachotumiwa kwa mikataba yote erevu kwenye mnyororo wa bloku wa Ethereum kwa utekelezaji wa tokeni zinazoweza kubadilishwa.
ERC-20 inafafanua orodha ya kawaida ya sheria ambazo tokeni zote za Ethereum zinazoweza kubadilishwa zinapaswa kuzingatia. Kwa hivyo, kiwango hiki cha tokeni huwawezesha wasanidi programu wa aina zote kutabiri kwa usahihi jinsi tokeni mpya zitakavyofanya kazi ndani ya mfumo mkuu wa Ethereum. Hii hurahisisha kazi za wasanidi programu, kwa sababu wanaweza kuendelea na kazi zao, wakijua kwamba kila mradi mpya hautahitaji kufanywa upya kila wakati tokeni mpya inapotolewa, mradi tu tokeni inafuata sheria.
Hizi hapa, zikiwasilishwa kama kiolesura, ni kazi ambazo ERC-20 lazima itekeleze. Ikiwa huna uhakika kuhusu kiolesura ni nini: angalia makala yetu kuhusu upangaji programu wa OOP katika Solidityopens in a new tab.
1pragma solidity ^0.6.0;23interface IERC20 {45 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);89 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);121314 event Transfer(address indexed from, address indexed to, uint256 value);15 event Approval(address indexed owner, address indexed spender, uint256 value);16}Onyesha yoteHaya ni maelezo ya mstari kwa mstari ya kila kazi inafanya nini. Baada ya hili tutawasilisha utekelezaji rahisi wa tokeni ya ERC-20.
Vipata
1function totalSupply() external view returns (uint256);Hurejesha kiasi cha tokeni zilizopo. Kazi hii ni kipata na haibadilishi hali ya mkataba. Kumbuka kuwa hakuna 'floats' katika Solidity. Kwa hivyo tokeni nyingi hutumia desimali 18 na zitarejesha jumla ya usambazaji na matokeo mengine kama ifuatavyo 1000000000000000000 kwa tokeni 1. Sio kila tokeni ina desimali 18 na hili ni jambo unalopaswa kulizingatia sana unaposhughulika na tokeni.
1function balanceOf(address account) external view returns (uint256);Hurejesha kiasi cha tokeni zinazomilikiwa na anwani (account). Kazi hii ni kipata na haibadilishi hali ya mkataba.
1function allowance(address owner, address spender) external view returns (uint256);Kiwango cha ERC-20 kinaruhusu anwani kutoa ruhusa kwa anwani nyingine ili iweze kuchukua tokeni kutoka kwayo. Kipata hiki hurejesha idadi iliyobaki ya tokeni ambazo spender ataruhusiwa kutumia kwa niaba ya owner. Kazi hii ni kipata na haibadilishi hali ya mkataba na inapaswa kurejesha 0 kama chaguo-msingi.
Kazi
1function transfer(address recipient, uint256 amount) external returns (bool);Huhamisha amount ya tokeni kutoka kwa anwani ya mwitaji wa kazi (msg.sender) hadi kwa anwani ya mpokeaji. Kazi hii hutoa tukio la Transfer lililofafanuliwa baadaye. Inarejesha 'true' ikiwa uhamisho uliwezekana.
1function approve(address spender, uint256 amount) external returns (bool);Weka kiasi cha allowance ambacho spender anaruhusiwa kuhamisha kutoka kwenye salio la mwitaji wa kazi (msg.sender). Kazi hii hutoa tukio la Approval. Kazi hurejesha ikiwa ruhusa iliwekwa kwa mafanikio.
1function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);Huhamisha amount ya tokeni kutoka kwa sender kwenda recipient kwa kutumia utaratibu wa ruhusa. Kisha amount inakatwa kutoka kwa ruhusa ya mwitaji. Kazi hii hutoa tukio la Transfer.
Matukio
1event Transfer(address indexed from, address indexed to, uint256 value);Tukio hili hutolewa wakati kiasi cha tokeni (value) kinatumwa kutoka anwani ya from kwenda anwani ya to.
Katika kisa cha kutengeneza tokeni mpya, uhamisho huwa kutoka kwa anwani ya 0x00..0000 huku katika kisa cha kuchoma tokeni uhamisho huwa kwenda 0x00..0000.
1event Approval(address indexed owner, address indexed spender, uint256 value);Tukio hili hutolewa wakati kiasi cha tokeni (value) kimeidhinishwa na owner kutumiwa na spender.
Utekelezaji wa msingi wa tokeni za ERC-20
Huu ndio msimbo rahisi zaidi wa kutumia kama msingi wa tokeni yako ya ERC-20:
1pragma solidity ^0.8.0;23interface IERC20 {45 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);89 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);121314 event Transfer(address indexed from, address indexed to, uint256 value);15 event Approval(address indexed owner, address indexed spender, uint256 value);16}171819contract ERC20Basic is IERC20 {2021 string public constant name = "ERC20Basic";22 string public constant symbol = "ERC";23 uint8 public constant decimals = 18;242526 mapping(address => uint256) balances;2728 mapping(address => mapping (address => uint256)) allowed;2930 uint256 totalSupply_ = 10 ether;313233 constructor() {34 balances[msg.sender] = totalSupply_;35 }3637 function totalSupply() public override view returns (uint256) {38 return totalSupply_;39 }4041 function balanceOf(address tokenOwner) public override view returns (uint256) {42 return balances[tokenOwner];43 }4445 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 }5253 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 }5859 function allowance(address owner, address delegate) public override view returns (uint) {60 return allowed[owner][delegate];61 }6263 function transferFrom(address owner, address buyer, uint256 numTokens) public override returns (bool) {64 require(numTokens <= balances[owner]);65 require(numTokens <= allowed[owner][msg.sender]);6667 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}Onyesha yoteUtekelezaji mwingine bora wa kiwango cha tokeni cha ERC-20 ni utekelezaji wa ERC-20 wa OpenZeppelinopens in a new tab.
Ukurasa ulihaririwa mwisho: 14 Februari 2026