Перейти до основного вмісту

Зрозумійте смарт-контракт токена ERC-20

Смарт-контракти
токени, лексеми
мова програмування
erc-20
Початківець
jdourlens
5 квітня 2020 р.
4 читається за хвилину

Одним із найважливіших стандартів смарт-контрактів на Ethereum є ERC-20, який став технічним стандартом, що використовується для всіх смарт-контрактів на блокчейні Ethereum для реалізації взаємозамінних токенів.

ERC-20 визначає загальний перелік правил, яких повинні дотримуватися всі взаємозамінні токени Ethereum. Отже, цей стандарт токенів надає розробникам усіх типів можливість точно передбачити, як нові токени працюватимуть у більшій системі Ethereum. Це спрощує та полегшує завдання розробників, оскільки вони можуть продовжувати свою роботу, знаючи, що кожен новий проєкт не потрібно буде переробляти щоразу, коли випускається новий токен, якщо він відповідає правилам.

Ось функції, які має реалізовувати ERC-20, представлені у вигляді інтерфейсу. Якщо ви не впевнені, що таке інтерфейс, перегляньте нашу статтю про ООП-програмування на Solidity (opens in a new tab).

Ось порядкове пояснення того, для чого призначена кожна функція. Після цього ми представимо просту реалізацію токену ERC-20.

Гетери

function totalSupply() external view returns (uint256);

Повертає кількість токенів в обігу. Ця функція є гетером і не змінює стан контракту. Майте на увазі, що в Solidity немає значень із рухомою комою. Тому більшість токенів використовують 18 десяткових розрядів і повертають загальну пропозицію та інші результати, наприклад 1000000000000000000 для 1 токена. Не кожен токен має 18 десяткових розрядів, і на це справді потрібно зважати, працюючи з токенами.

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

Повертає кількість токенів, що належать адресі (account). Ця функція є гетером і не змінює стан контракту.

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

Стандарт ERC-20 дозволяє одній адресі надавати дозвіл іншій адресі на отримання токенів з неї. Цей гетер повертає залишкову кількість токенів, які spender зможе витратити від імені owner. Ця функція є гетером, не змінює стан контракту і за замовчуванням має повертати 0.

Функції

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

Переміщує кількість (amount) токенів з адреси, що викликала функцію (msg.sender), на адресу одержувача. Ця функція генерує подію Transfer, яка визначена нижче. Функція повертає true, якщо переказ був можливий.

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

Встановлює allowance (ліміт) — кількість токенів, яку spender може переказати з балансу адреси, що викликала функцію (msg.sender). Ця функція генерує подію Approval. Функція повертає true, якщо ліміт було успішно встановлено.

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

Переміщує кількість (amount) токенів від sender до recipient за допомогою механізму лімітів. Потім amount вираховується з ліміту, наданого тому, хто викликає функцію. Ця функція генерує подію Transfer.

Події

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

Ця подія генерується, коли кількість токенів (value) надсилається з адреси from на адресу to.

У разі карбування нових токенів переказ зазвичай відбувається з адреси from 0x00..0000, а в разі спалювання токенів — на адресу to 0x00..0000.

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

Ця подія генерується, коли owner схвалює використання кількості токенів (value) для spender.

Базова реалізація токенів ERC-20

Ось найпростіший код, який можна взяти за основу для вашого токена ERC-20:

Ще однією чудовою реалізацією стандарту токенів ERC-20 є реалізація ERC-20 від OpenZeppelin (opens in a new tab).

Останнє оновлення сторінки: 3 березня 2026 р.

Цей посібник був корисним?