Przejdź do głównej treści

Zrozumienie inteligentnego kontraktu tokenu ERC-20

smart kontrakty
tokeny
Solidity
erc-20
Początkujący
jdourlens
5 kwietnia 2020
4 minuta czytania

Jeden z najważniejszych standardów inteligentnych kontraktów na Ethereum znany jest jako ERC-20, który stał się standardem technicznym stosowanym w odniesieniu do wszystkich inteligentnych kontraktów w blockchainie Ethereum do implementacji zamiennych tokenów.

ERC-20 określa wspólną listę zasad, których powinny przestrzegać wszystkie zamienne tokeny Ethereum. W konsekwencji ten standard tokenów umożliwia deweloperom wszystkich typów dokładnie przewidzieć, jak nowe tokeny będą funkcjonować w ramach większego systemu Ethereum. Upraszcza to i ułatwia pracę deweloperom, ponieważ mogą oni kontynuować swoją pracę, wiedząc, że żaden nowy projekt nie będzie musiał być ponownie tworzony za każdym razem, gdy pojawi się nowy token, o ile będzie on zgodny z zasadami.

Oto, przedstawione w formie interfejsu, funkcje, które musi zaimplementować ERC-20. Jeśli nie jesteś pewien, czym jest interfejs, sprawdź nasz artykuł o programowaniu obiektowym w Solidity (opens in a new tab).

Oto szczegółowe wyjaśnienie przeznaczenia każdej funkcji. Następnie przedstawimy prostą implementację tokenu ERC-20.

Gettery

function totalSupply() external view returns (uint256);

Zwraca liczbę istniejących tokenów. Ta funkcja jest getterem i nie modyfikuje stanu kontraktu. Pamiętaj, że w Solidity nie ma liczb zmiennoprzecinkowych. Dlatego większość tokenów przyjmuje 18 miejsc po przecinku i zwraca całkowitą podaż oraz inne wyniki jako 1000000000000000000 za 1 token. Nie każdy token ma 18 miejsc po przecinku i jest to coś, na co naprawdę trzeba uważać, mając do czynienia z tokenami.

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

Zwraca liczbę tokenów posiadanych przez dany adres (account). Ta funkcja jest getterem i nie modyfikuje stanu kontraktu.

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

Standard ERC-20 umożliwia jednemu adresowi przyznanie innemu adresowi zezwolenia na pobranie z niego tokenów. Ten getter zwraca pozostałą liczbę tokenów, które spender będzie mógł wydać w imieniu owner. Ta funkcja jest getterem, nie modyfikuje stanu kontraktu i domyślnie powinna zwracać 0.

Funkcje

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

Przenosi amount tokenów z adresu wywołującego funkcję (msg.sender) na adres odbiorcy. Ta funkcja emituje zdefiniowane później zdarzenie Transfer. Zwraca true, jeśli transfer był możliwy.

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

Ustawia allowance – kwotę, którą spender może przelać z salda wywołującego funkcję (msg.sender). Ta funkcja emituje zdarzenie Approval. Funkcja zwraca informację, czy allowance zostało pomyślnie ustawione.

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

Przenosi amount tokenów z adresu sender na adres recipient za pomocą mechanizmu allowance. Kwota amount jest następnie odejmowana od allowance osoby wywołującej. Ta funkcja emituje zdarzenie Transfer.

Zdarzenia

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

To zdarzenie jest emitowane, gdy liczba tokenów (value) jest wysyłana z adresu from na adres to.

W przypadku wybijania nowych tokenów transfer jest zazwyczaj from adresu 0x00..0000, natomiast w przypadku spalania tokenów transfer jest to adresu 0x00..0000.

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

To zdarzenie jest emitowane, gdy kwota tokenów (value) jest zatwierdzana przez owner do użycia przez spender.

Podstawowa implementacja tokenów ERC-20

Oto najprostszy kod, na którym można oprzeć swój token ERC-20:

Inną doskonałą implementacją standardu tokenów ERC-20 jest implementacja ERC-20 od OpenZeppelin (opens in a new tab).

Ostatnia aktualizacja strony: 3 marca 2026

Czy ten samouczek był pomocny?