Ruka hadi kwenye maudhui makuu

Kuelewa mkataba mahiri wa tokeni ya ERC-20

mikataba mahiri
tokeni
Solidity
erc-20
Mwanzilishi
jdourlens
5 Aprili 2020
5 dakika za kusoma

Moja ya viwango muhimu zaidi vya mikataba mahiri kwenye Ethereum inajulikana kama ERC-20, ambayo imeibuka kama kiwango cha kiufundi kinachotumiwa kwa mikataba mahiri yote kwenye mnyororo wa vitalu wa Ethereum kwa utekelezaji wa tokheni mbadala.

ERC-20 inafafanua orodha ya kawaida ya sheria ambazo tokheni mbadala zote za Ethereum zinapaswa kuzingatia. Kwa hivyo, kiwango hiki cha tokeni kinawawezesha wasanidi wa aina zote kutabiri kwa usahihi jinsi tokeni mpya zitakavyofanya kazi ndani ya mfumo mkubwa wa Ethereum. Hii inarahisisha na kupunguza kazi za wasanidi, kwa sababu wanaweza kuendelea na kazi yao, wakijua kwamba kila mradi mpya hautahitaji kufanywa upya kila wakati tokeni mpya inapotolewa, mradi tu tokeni inafuata sheria.

Hapa kuna kazi ambazo ERC-20 lazima itekeleze, zilizowasilishwa kama kiolesura. Ikiwa huna uhakika kuhusu kiolesura ni nini: angalia makala yetu kuhusu upangaji wa OOP katika Solidity (opens in a new tab).

Hapa kuna maelezo ya mstari kwa mstari ya kazi ya kila kipengele. Baada ya haya tutawasilisha utekelezaji rahisi wa tokeni ya ERC-20.

Vipataji

function totalSupply() external view returns (uint256);

Hurejesha kiasi cha tokeni zilizopo. Kazi hii ni kipataji na haibadilishi hali ya mkataba. Kumbuka kwamba hakuna nambari za desimali (floats) katika Solidity. Kwa hivyo tokeni nyingi huchukua desimali 18 na zitarudisha usambazaji wa jumla na matokeo mengine kama ifuatavyo 1000000000000000000 kwa tokeni 1. Sio kila tokeni ina desimali 18 na hili ni jambo ambalo unahitaji kuliangalia sana unaposhughulika na tokeni.

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

Hurejesha kiasi cha tokeni zinazomilikiwa na anwani (account). Kazi hii ni kipataji na haibadilishi hali ya mkataba.

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

Kiwango cha ERC-20 kinaruhusu anwani kutoa kibali kwa anwani nyingine ili kuweza kupata tokeni kutoka kwayo. Kipataji hiki hurejesha idadi iliyobaki ya tokeni ambazo spender itaruhusiwa kutumia kwa niaba ya owner. Kazi hii ni kipataji na haibadilishi hali ya mkataba na inapaswa kurejesha 0 kwa chaguo-msingi.

Kazi

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

Huhamisha amount ya tokeni kutoka kwa anwani ya mpigaji wa kazi (msg.sender) hadi kwa anwani ya mpokeaji. Kazi hii hutoa tukio la Transfer lililofafanuliwa baadaye. Inarejesha kweli (true) ikiwa hamisho liliwezekana.

function approve(address spender, uint256 amount) external returns (bool);

Weka kiasi cha allowance ambacho spender inaruhusiwa kuhamisha kutoka kwa salio la mpigaji wa kazi (msg.sender). Kazi hii hutoa tukio la Uidhinishaji (Approval). Kazi inarejesha ikiwa kibali kiliwekwa kwa mafanikio.

function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

Huhamisha amount ya tokeni kutoka sender hadi recipient kwa kutumia utaratibu wa kibali. kiasi (amount) kisha hukatwa kutoka kwa kibali cha mpigaji. Kazi hii hutoa tukio la Transfer.

Matukio

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

Tukio hili hutolewa wakati kiasi cha tokeni (thamani) kinatumwa kutoka kwa anwani ya from hadi kwa anwani ya to.

Katika kesi ya ufuzi wa tokeni mpya, hamisho kawaida ni from anwani ya 0x00..0000 wakati katika kesi ya kuteketeza tokeni hamisho ni to 0x00..0000.

event Approval(address indexed owner, address indexed spender, uint256 value);

Tukio hili hutolewa wakati kiasi cha tokeni (value) kinapoidhinishwa na owner kutumiwa na spender.

Utekelezaji wa kimsingi wa tokeni za ERC-20

Hapa kuna msimbo rahisi zaidi wa kutumia kama msingi wa tokeni yako ya ERC-20:

Utekelezaji mwingine bora wa kiwango cha tokeni cha ERC-20 ni utekelezaji wa ERC-20 wa OpenZeppelin (opens in a new tab).