Перейти к содержимому
Все статьи
Блокчейн

Как создать токен ERC-20: шаги, OpenZeppelin и вопросы подрядчику

·30 октября 2026 г.· 11 мин чтения
Нужен смарт-контракт или dApp?Разработка смарт-контрактов

Чтобы создать токен ERC-20, нужно определить параметры (название, тикер, десятичные знаки, эмиссию и права), написать контракт на основе OpenZeppelin Contracts 5.7, покрыть его тестами, развернуть в тестовой сети, затем в основной, и опубликовать исходный код в обозревателе блоков. Сам код базового токена занимает два десятка строк. Время уходит на решения о правах и экономике, и именно там совершают дорогие ошибки.

Что такое ERC-20 и что он не умеет

ERC-20 — стандарт интерфейса взаимозаменяемого токена в сетях EVM. Он задаёт функции transfer, approve, transferFrom, balanceOf, totalSupply, allowance и события Transfer и Approval. Благодаря стандарту токен сразу понимают кошельки, обозреватели и биржи. В BNB Chain тот же интерфейс называют BEP-20.

Стандарт не описывает, кто может выпускать новые токены, можно ли их сжигать, замораживать или останавливать переводы. Всё это — ваши решения, и каждое расширяет права владельца контракта. Чем больше у администратора полномочий, тем меньше токену доверяют держатели.

Шаг 1. Параметры токена

ПараметрЧто решитьТипичная ошибка
Название и тикерСтроки name и symbolТикер совпадает с известным токеном и путает пользователей
Десятичные знакиОбычно 18, как у эфира6 знаков «как у USDT» без причины ломают расчёты интеграций
ЭмиссияФиксированная при деплое или с выпуском позжеНеограниченный mint у одного ключа
РаспределениеКому и когда уходят токеныВсё на один кошелёк без вестинга
Дополнительные функцииСжигание, permit, пауза, голосованиеВключены «на всякий случай»
ПраваКто владелец и как передаются праваВладелец — личный кошелёк разработчика

Шаг 2. Контракт на OpenZeppelin

OpenZeppelin Contracts — самая распространённая библиотека проверенных контрактов. Актуальный релиз — 5.7.0 от 29 июля 2026 года. В пятой ветке изменилось несколько вещей, о которых стоит знать: у Ownable владелец передаётся в конструктор явно, а все движения токенов проходят через единую внутреннюю функцию _update. Удобно начать с официального Contracts Wizard, он генерирует код под выбранные опции.

Учебный пример токена с фиксированной эмиссией и подписями permit:

  • pragma solidity 0.8.38;
  • import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
  • import {ERC20Permit} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol";
  • contract ExampleToken is ERC20, ERC20Permit {
  • constructor(address treasury) ERC20("Example Token", "EXT") ERC20Permit("Example Token") { _mint(treasury, 1_000_000 * 10 ** decimals()); }
  • }

Здесь нет функции выпуска после деплоя, поэтому эмиссия зафиксирована навсегда. Это самый простой для доверия вариант. Если выпуск нужен, добавьте AccessControl с отдельной ролью MINTER_ROLE и отдайте её мультиподписи, а не одному ключу. О ролях подробно — в статье о контроле доступа.

Что изменилось в OpenZeppelin 5.6 и 5.7

  • В 5.7 у EIP712, а значит и у ERC20Permit, название и версия домена должны укладываться в 31 байт, иначе конструктор откатится.
  • В 5.7 классический ReentrancyGuard помечен устаревшим: в 6.0 его заменит ReentrancyGuardTransient.
  • В 5.6 прокси ERC1967Proxy и TransparentUpgradeableProxy требуют данные инициализации при создании.

В какой сети выпускать

Один и тот же контракт можно развернуть в Ethereum, Arbitrum, Base, Polygon PoS или BNB Chain. Выбор зависит не от кода, а от того, где ваши пользователи, сколько они готовы платить за перевод и какие биржи и кошельки им нужны. Выпуск сразу в нескольких сетях без моста создаёт несколько независимых токенов с одинаковым названием, и общая эмиссия перестаёт быть очевидной. Если нужен мультисетевой токен, это отдельная архитектура с мостом и своими рисками. Сравнение сетей — в статье о выборе сети для контракта.

Шаг 3. Тесты

Даже для простого токена тесты обязательны. Проверьте, что эмиссия ушла на нужный адрес, totalSupply совпадает с суммой балансов, перевод сверх остатка откатывается, approve и transferFrom работают, а подпись permit с истёкшим deadline или чужим nonce отклоняется. Фаззинг в Foundry позволяет прогнать переводы на сотнях случайных сумм. Как это настроить — в статье о тестировании смарт-контрактов.

Шаг 4. Деплой и верификация

  1. Разверните контракт в тестовой сети (например, Sepolia для Ethereum) и пройдите сценарии через кошелёк.
  2. Подготовьте ключ деплоя: зашифрованный keystore или аппаратный кошелёк, а не ключ в файле .env.
  3. Разверните контракт в основной сети скриптом, который записывает адрес и параметры.
  4. Опубликуйте исходный код в обозревателе (Etherscan, BscScan и аналоги), чтобы держатели видели код.
  5. Передайте права администратора мультиподписи и проверьте это ончейн.

Подробно про ключи, скрипты и верификацию — в отдельном разборе деплоя смарт-контракта.

Шаг 5. После запуска

Добавьте токен в списки кошельков, подготовьте страницу с адресом контракта и предупреждением о поддельных копиях. Мошенники часто выпускают токен с тем же названием и тикером в первые часы после запуска. Настройте оповещения о крупных переводах и о любых вызовах административных функций — это задача мониторинга контрактов.

Частые ошибки при запуске

  • Пул ликвидности или раздача стартуют раньше, чем права переданы мультиподписи.
  • Адрес контракта публикуют в одном канале, а в другом висит старый тестовый адрес.
  • Токены команды лежат на обычном кошельке без вестинга, и держатели видят это в обозревателе.
  • В контракте осталась тестовая функция выпуска, доступная владельцу.
  • Исходный код не верифицирован, и пользователи не могут убедиться, что контракт делает то, что заявлено.

10 вопросов подрядчику

ВопросХороший ответТревожный ответ
На чём построен токен?OpenZeppelin 5.x, версия зафиксирована«Написали свой, так гибче»
Кто сможет выпускать токены?Никто или роль у мультиподписи«Ваш кошелёк, это удобно»
Есть ли пауза или чёрный список?Только если это требование продукта, с объяснением рисков«Добавили на всякий случай»
Какие тесты будут?Юнит, фаззинг, покрытие ключевых сценариев«Проверим вручную в тестнете»
Как храните ключ деплоя?Keystore или аппаратный кошелёк«В .env на сервере»
Будет ли верификация кода?Да, во всех сетях«Не обязательно»
Кому достанутся права после запуска?Мультиподписи заказчика«Останутся у нас для поддержки»
Нужен ли внешний аудит?Зависит от суммы и логики, объясняет критерии«Наш код не нуждается в аудите»
Получу ли я репозиторий?Да, со скриптами деплоя и тестами«Отдадим только адрес контракта»
Что делать при инциденте?Есть план, контакты, роли«Блокчейн нельзя взломать»

Зачем заказчику свой репозиторий и что в нём должно быть, мы писали в статье о репозитории кода. Если хотите выпустить токен с нормальными правами и тестами, посмотрите решение для токенов ERC-20 и BEP-20 или общую страницу разработки смарт-контрактов.

Вопросы и ответы

Можно ли создать токен ERC-20 бесплатно?

Код можно сгенерировать бесплатно в OpenZeppelin Wizard, но деплой в основной сети всегда стоит газа. Кроме того, без тестов и продуманных прав такой токен рискован для держателей.

Чем ERC-20 отличается от BEP-20?

По интерфейсу почти ничем: BEP-20 — название того же стандарта в BNB Chain. Отличаются сети, комиссии и аудитория, а код контракта обычно одинаковый.

Сколько десятичных знаков ставить токену?

Обычно 18. Другое значение выбирают, только если есть понятная причина, например совместимость с конкретной системой учёта.

Нужен ли аудит для простого токена?

Если код взят из OpenZeppelin без изменений, риск ниже, но ревью прав и скриптов деплоя всё равно нужно. Любая собственная логика — комиссии, локи, чёрные списки — повод для внешнего аудита.

Можно ли изменить токен после выпуска?

Обычный контракт изменить нельзя. Обновляемый токен через прокси возможен, но тогда у кого-то есть право поменять логику, и держатели должны об этом знать.

Нужна помощь с проектом?

Обсудим задачу и предложим решение — от сайта до SaaS и защиты.

Связаться