Перейти к основному контенту

Понимание смарт-контракта токена ERC-20

Умные контракты
токенов
Solidity
erc-20
Beginner
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. Функция возвращает значение, указывающее, было ли разрешение успешно установлено.

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

Перемещает amount токенов от sender к recipient с помощью механизма разрешений. Затем amount вычитается из разрешенной суммы (allowance) для вызывающего. Эта функция генерирует событие 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);

Это событие генерируется, когда определенное количество (value) токенов одобрено owner для использования spender.

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

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

Другой отличной реализацией стандарта токенов ERC-20 является реализация ERC-20 от OpenZeppelin (opens in a new tab).

Последнее обновление страницы: 3 марта 2026 г.

Было ли это руководство полезным?