Стандарты токенов: ERC-20, ERC-721, ERC-1155 и другие
Стандарты токенов для разработчиков: что определяют ERC-20, ERC-721, ERC-1155, TRC-20 и SPL, как работают десятичные знаки и что проверить перед интеграцией.

Стандарт токена — это опубликованная спецификация, которая сообщает контракту токена, какие функции предоставлять и какие события генерировать. Кошельки, биржи и приложения могут затем работать с любым соответствующим токеном без написания пользовательского кода для каждого из них. В этом руководстве рассматриваются стандарты, с которыми вы чаще всего столкнетесь (ERC-20, ERC-721, ERC-1155 и их аналоги в Tron и Solana). Также объясняется, как работают десятичные знаки ERC-20, и что нужно проверить перед интеграцией токена в платежный поток.
Краткое содержание
- Стандарт токена определяет интерфейс (функции и события) и правила поведения, чтобы программное обеспечение могло взаимодействовать с любым соответствующим токеном одинаковым образом.
- ERC-20 предназначен для взаимозаменяемых токенов, ERC-721 — для уникальных NFT, а ERC-1155 — для множества типов токенов в одном контракте.
- TRC-20 зеркалит ERC-20 в Tron, а Solana использует свою программу SPL Token, поэтому «один и тот же стандарт» никогда не означает «один и тот же блокчейн».
- Суммы в блокчейне — это целые числа. Необязательное значение
decimalsуказывает, где ставить десятичную точку для отображения. - Соответствие стандарту не гарантировано. Протестируйте реальное поведение каждого токена, прежде чем полагаться на него.
Содержание
- Что на самом деле определяет стандарт токена
- ERC-20: стандарт взаимозаменяемых токенов
- Десятичные знаки ERC-20: правильная обработка сумм
- ERC-721: невзаимозаменяемые токены
- ERC-1155: множество типов токенов в одном контракте
- Сравнение трех стандартов Ethereum
- Стандарты токенов в других блокчейнах
- Что проверить перед интеграцией токена
- Перспектива: почему стандарты — это только половина работы
- Применение стандартов на практике с Chaingateway
- Часто задаваемые вопросы
- Источники
Что на самом деле определяет стандарт токена
Токен — это не нативная монета. Это запись внутри смарт-контракта: кто сколько держит и какие правила регулируют его перемещение. Без общей спецификации каждый токен предоставлял бы свои имена функций, и каждому кошельку требовался бы индивидуальный код для чтения балансов или отправки переводов.
Стандарт решает эту проблему. Согласно странице стандартов токенов ethereum.org, стандарты определяют, как токены ведут себя и взаимодействуют, что сохраняет компонуемость смарт-контрактов и позволяет новым токенам работать с существующими децентрализованными биржами и приложениями. Обзор NIST по дизайну токенов описывает ERC как предоставляющие объявления функций и событий, ограничения и требования, а иногда — эталонные реализации.
На практике стандарт дает вам четыре вещи:
- Вызываемые функции, такие как чтение баланса или перемещение токенов.
- События, которые генерирует контракт, чтобы внешнее ПО могло отслеживать активность.
- Типы данных и ограничения, например, как представлены суммы.
- Требования к поведению, например, какие вызовы должны инициировать какие события.
В Ethereum эти спецификации предлагаются в виде ERC — категории прикладного уровня Ethereum Improvement Proposals. В других цепочках свои процессы и названия, но идея остаётся прежней.
ERC-20: стандарт взаимозаменяемых токенов
ERC-20 был создан в 2015 году и определяет стандартный API для токенов внутри смарт-контрактов, чтобы кошельки и децентрализованные биржи могли их повторно использовать. «Взаимозаменяемый» означает, что каждая единица взаимозаменяема с любой другой, как доллары или килограммы золота. Стейблкоины, токены управления и большинство платёжных токенов следуют ему.
Интерфейс, как указано в документации ERC-20, включает:
| Функция или событие | Что она делает |
|---|---|
totalSupply | Возвращает общее количество токенов в обращении |
balanceOf | Возвращает баланс одного адреса |
transfer | Перемещает токены от вызывающего к другому адресу |
approve | Позволяет другому адресу (потратителю) переместить до заданного количества ваших токенов |
allowance | Возвращает, сколько потратитель ещё может переместить от имени владельца |
transferFrom | Перемещает токены от имени владельца, используя одобрение |
name, symbol, decimals | Описательные метаданные, обычно присутствуют |
События Transfer, Approval | Генерируются при переводах и одобрениях |
Спецификация требует, чтобы переводы вызывали событие Transfer, а успешные вызовы approve — событие Approval. Это правило делает возможным обнаружение платежей: вы можете следить за событиями вместо опроса каждого адреса. Мы подробнее рассматриваем это в нашем руководстве по событию ERC-20 Transfer, а наш обзор стандарта ERC-20 проходит по всему интерфейсу.
Паттерн approve и transferFrom
Двухшаговый паттерн сбивает с толку новичков. С transfer держатель токенов отправляет их напрямую. С approve плюс transferFrom держатель сначала авторизует потратителя, а потратитель позже забирает токены. Так децентрализованная биржа или контракт подписки принимают оплату, не храня ваши ключи. Если вам нужно только отправить токены из контролируемого вами кошелька, достаточно transfer. Наш обзор как отправить ERC-20 токены сравнивает методы кошелька, кода и API.
ERC-20 decimals: правильная работа с суммами
Смарт-контракты не хранят дроби. Каждый баланс — целое число, а decimals сообщает, сколько правых цифр составляют дробную часть. Спецификация ERC-20 делает метод необязательным и приводит пример: с 8 decimals вы делите сумму токенов на 100000000, чтобы получить её пользовательское представление.
Это имеет три практические последствия.
Всегда считывайте decimals из контракта. Не зашивайте значение для всех токенов. Два токена, оба отображаемые как «1.00», могут храниться как совершенно разные целые числа.
Проводите вычисления с целыми числами или типами больших чисел. Сырые суммы могут превышать то, что стандартное число с плавающей точкой хранит точно. Используйте BigInt, BigNumber или десятичный тип вашего языка, и форматируйте для отображения только на последнем шаге.
Относитесь к отсутствующему методу decimals как к случаю, который нужно обрабатывать. Поскольку метод опционален, совместимый токен может его не предоставлять. Определите стратегию резервного варианта, например, отклонение токена или требование ручной настройки, вместо того чтобы молча предполагать значение по умолчанию.
Разобранный пример: токен с 6 знаками после запятой показывает исходный баланс 2500000. Деление на 10^6 дает 2,5 токена. Чтобы отправить 0,75 токена, вы передаете 750000, а не 0,75. Ошибочная передача отображаемого значения приведет к отправке ничтожно малой суммы, и транзакция все равно будет выполнена успешно.

ERC-721: не взаимозаменяемые токены
Если ERC-20 относится к каждой единице одинаково, то ERC-721 — это интерфейс для не взаимозаменяемых токенов, таких как уникальные произведения искусства или песни. У каждого токена есть свой уникальный идентификатор в рамках контракта, поэтому владение отслеживается по каждому токену, а не как баланс. Типичные варианты использования: коллекционные предметы, билеты, игровые предметы и доказательства владения.
Компромисс заключается в стоимости и сложности. Перемещение десяти несвязанных NFT означает десять отдельных переводов. Подробности интерфейса см. в нашем руководстве по стандарту ERC-721.
ERC-1155: множество типов токенов в одном контракте
ERC-1155 — это мульти-токен интерфейс. Один развернутый контракт может представлять любое количество взаимозаменяемых, не взаимозаменяемых или полувзаимозаменяемых типов токенов, каждый из которых идентифицируется по ID токена, который может иметь свои собственные метаданные и предложение. Спецификация также поддерживает передачу нескольких типов токенов за одну операцию.
Это делает его естественным выбором для игр, где один контракт может содержать валюту, набор расходников и несколько уникальных предметов. Вы развертываете контракт один раз и можете выполнять пакетные перемещения вместо отправки одной транзакции на каждый тип актива.
Сравнение трех стандартов Ethereum
| ERC-20 | ERC-721 | ERC-1155 | |
|---|---|---|---|
| Тип токена | Взаимозаменяемый | Не взаимозаменяемый | Взаимозаменяемый, не взаимозаменяемый или полувзаимозаменяемый |
| Отслеживает | Баланс на адрес | Владельца на ID токена | Балансы на адрес на ID токена |
| Необходимые контракты | Один на токен | Один на коллекцию | Один для многих типов токенов |
| Пакетные переводы | Не входит в стандарт | Не входит в стандарт | Встроены |
| Типичное использование | Стейблкоины, платежные и управляющие токены | Коллекционные предметы, билеты, уникальные активы | Игры, смешанные каталоги активов |
Стандарты токенов в других сетях
Названия меняются от сети к сети, но идея остается прежней.
Tron: TRC-20 и TRC-10. TRC-20 — это стандарт взаимозаменяемых токенов в TRON и он совместим с ERC-20 на уровне интерфейса, поэтому большинству контрактов токенов Ethereum требуется мало изменений для работы там. В Tron также есть более старый стандарт на уровне протокола — TRC-10. Мы объясняем практические различия в статье TRC-10 vs TRC-20.
BNB Chain: BEP-20. BEP-20 следует модели ERC-20 в EVM-совместимой сети, поэтому названия функций и формы событий будут выглядеть знакомо.
Solana: SPL-токены. Solana не разворачивает новый контракт для каждого токена. Токены создаются через общую программу SPL Token, а NFT — это просто токен, созданный с нулевым количеством десятичных знаков. Ментальная модель отличается от Ethereum, хотя цель совместимости одна и та же.
Экосистема Cosmos: CW20. Спецификация CW20 обрабатывает балансы и переводы с использованием целых чисел Uint128 и оставляет обработку десятичных знаков интерфейсу пользователя, что является тем же разделением на целочисленное и отображаемое представление, что и в ERC-20.
Стандарт с тем же именем в другой сети никогда не взаимозаменяем с оригиналом. TRC-20 USDT и ERC-20 USDT — это разные активы в разных сетях, и отправка в неверную сеть может привести к потере средств. Всегда связывайте адрес с его сетью в вашей модели данных.

Что проверить перед интеграцией токена
Стандарт описывает, что токен должен делать, а не то, что делает каждый развернутый контракт. Исследование 2022 года в IET Software сообщало, что неопределенность в интерфейсе ERC-20 может приводить к разным интерпретациям и уязвимостям соответствия среди реальных токенов.
Чек-лист интеграции токенов на ethereum.org — хорошая база. Он просит разработчиков проверить:
- соответствие и возвращаемые значения стандартных функций,
- опциональные функции и десятичные знаки,
- защиту от состояний гонки при одобрениях,
- внешние вызовы внутри токена,
- комиссии или проценты, взимаемые при переводе,
- возможность обновления, выпуска, приостановки и блокировки,
- риски владельца и команды, а также концентрацию предложения.
Для платежного продукта чаще всего проблемы вызывают поведение с комиссией при переводе (полученная сумма меньше отправленной), блокировка (перевод может быть заблокирован постфактум) и нестандартные возвращаемые значения. Тестируйте каждый токен, который планируете поддерживать, в тестовой сети с реальными переводами, и зачисляйте депозиты на основе фактически полученной суммы, а не запрошенной.
Перспектива: почему стандарты — это только половина работы
Стандарты решают проблему того, как один токен взаимодействует с одной цепочкой. Они не решают проблему запуска продукта в нескольких цепочках. Если вы принимаете платежи в Ethereum, Tron и Solana, вы все равно сталкиваетесь с разными форматами адресов, разными моделями комиссий, разными структурами событий и разной инфраструктурой узлов.
Мы создали Chaingateway именно для заполнения этого пробела. Наше видение заключается в том, что разработчикам не нужно поддерживать специфичные для цепочки эндпоинты или запускать свои узлы просто для того, чтобы узнать, что клиент заплатил. Именно поэтому мы возвращаем предварительно декодированные данные, чтобы перевод приходил в виде читаемых полей вместо необработанных тем логов, и почему мы автоматически оцениваем газ. Мы подписываем вебхук-запросы с помощью HMAC, чтобы ваш бэкенд мог проверить подлинность уведомления о платеже.
Наш совет для начинающих команд: выбирайте стандарт, соответствующий вашему активу (взаимозаменяемый, уникальный или смешанный), читайте десятичные знаки из контракта каждый раз и строите обнаружение платежей на событиях, а не на опросе. Все остальное — это сантехника, и сантехника — это то, что должен поглощать API.
— Bitblade
Применение стандартов на практике с Chaingateway
Если вы создаете платежи или кошельки на базе этих стандартов, наш Blockchain API предоставляет один REST-интерфейс для создания кошельков, отправки токенов и NFT-переводов, получения декодированных данных транзакций и оценки комиссий в Ethereum, Bitcoin, Tron, Solana, Polygon, BNB Chain и Arbitrum. Он поддерживает основные стандарты токенов, включая ERC-20, BEP-20, TRC-20 и ERC-721. Chaingateway Webhooks отправляют уведомления в реальном времени при поступлении платежа, поэтому вам не нужно опрашивать сеть.

Планы начинаются от €49 в месяц за Plus, Pro стоит €99, Premium — €249, а Enterprise — €499 в месяц. При годовой оплате это составляет €490, €990, €2 490 и €4 990 соответственно. Подробности о том, что включает каждый план, см. на странице цен. Что касается Ethereum, наш Ethereum API показывает, как отправлять ERC-20 токены через REST без web3.js.
Источники
- Стандарты токенов, ethereum.org
- Стандарты разработки Ethereum, ethereum.org
- Стандарт токена ERC-20, ethereum.org
- ERC-20: Стандарт токена, EIP-20
- ERC-1155: Стандарт мульти-токена, EIP-1155
- Чек-лист интеграции токена, ethereum.org
- Блокчейн-сети: Обзор проектирования и управления токенами, NIST
- Оценка соответствия смарт-контрактов топ-100 токенов Ethereum, IET Software
- Стандарт взаимозаменяемого токена TRC-20, документация разработчика TRON
- Токен, документация Solana SPL
- Спецификация CW20, CosmWasm
Рекомендуем
Часто задаваемые вопросы
Монета, например ETH, является нативной для своего блокчейна и оплачивает комиссии за транзакции. Токен создается смарт-контрактом, который следует стандарту и существует поверх этого блокчейна. Вам все равно нужна нативная монета для оплаты газа при перемещении токенов, что описано в нашем обзоре Ethereum.
Нет. Спецификация ERC-20 помечает её как необязательную. Большинство токенов её реализуют, но ваш код должен обрабатывать случай её отсутствия, а не предполагать значение по умолчанию.
Обе цепи используют один формат адреса, поэтому один и тот же адрес может существовать в обеих, но балансы разделены. Средства, отправленные в неверной сети, не появятся в другой. Наш руководство по адресам ERC-20 объясняет формат и то, как читать балансы.
Используйте ERC-20 (или эквиваленты TRC-20 или BEP-20) для взаимозаменяемых единиц, таких как платежный или утилитарный токен. Используйте ERC-721, когда каждый предмет должен быть уникальным, и ERC-1155, когда один контракт должен управлять несколькими видами активов. Сначала выберите сеть, так как инструментарий и комиссии каждой цепи определяют выбор.
Готовы собрать это сами? Получите свой API-ключ — 7-дневный пробный период, без карты — или посмотрите API блокчейна для полного справочника по эндпоинтам.