ERC-1155 — это стандарт «мульти-токенов» в экосистеме Ethereum и других EVM-сетях.
В отличие от ERC-20 и ERC-721, где один контракт описывает один тип токена, ERC-1155 позволяет:
- держать десятки и сотни типов токенов внутри одного смарт-контракта;
- сочетать взаимозаменяемые и невзаимозаменяемые токены;
- делать массовые переводы нескольких токенов в одной транзакции, экономя gas.
Именно поэтому стандарт ERC-1155 стал де-факто основой для игровых активов, коллекций предметов и сложных NFT-экосистем.
Подробнее о семействах стандартов см. ERC-стандарты в Ethereum.
Ключевая идея ERC-1155
В ERC-1155 токен определяется парой:
- адрес контракта;
- идентификатор токена id.
Один контракт:
- хранит общую логику для всех токенов;
- ведёт балансы по схеме balances[id][owner];
- может смешивать:
- взаимозаменяемые «фишки» (как ERC-20);
- уникальные NFT-предметы (как ERC-721);
- гибриды (ограниченная серия предметов).
Это сильно снижает накладные расходы:
- не нужно разворачивать отдельный контракт под каждый тип токена;
- массовые операции с несколькими токенами проходят через один вызов.
Чем ERC-1155 отличается от ERC-20 и ERC-721
| Стандарт | Тип токенов | Особенности и сценарии |
|---|---|---|
| ERC-20 | Взаимозаменяемые | Один контракт = один тип токена. Простой учёт балансов, DeFi, стейблкоины. |
| ERC-721 | Невзаимозаменяемые (NFT) | Один контракт = коллекция уникальных tokenId. Метаданные и уникальные объекты. |
| ERC-1155 | Мульти-токены (fungible + NFT) | Один контракт = множество типов токенов. Массовые переводы, оптимизация gas, игровые предметы. |
Ключевые отличия ERC-1155:
- один контракт может вести целый каталог активов;
- интерфейс ориентирован на работу с массивами:
- balanceOfBatch, safeBatchTransferFrom;
- стандарт изначально проектировался с учётом экономии gas и массовых операций.
Обязательные функции ERC-1155
Базовый интерфейс стандарта (упрощённо):
- balanceOf(address account, uint256 id)
Возвращает баланс токена с идентификатором id у адреса account.
- balanceOfBatch(address[] accounts, uint256[] ids)
Пакетная версия для запросов нескольких балансов за один вызов.
- setApprovalForAll(address operator, bool approved)
Даёт/отзывает глобальное разрешение оператору управлять всеми токенами владельца в этом контракте.
- isApprovedForAll(address account, address operator)
Проверяет, является ли operator глобальным оператором для account.
- safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes data)
Переводит *один* тип токена id в количестве amount от from к to.
Если to — контракт, он должен уметь принимать ERC-1155-токены, иначе транзакция откатится.
- safeBatchTransferFrom(address from, address to, uint256[] ids, uint256[] amounts, bytes data)
Пакетный перевод нескольких типов токенов за один вызов:
- уменьшает комиссию за gas;
- особенно полезен для игр и маркетплейсов.
Для идентификации интерфейса используется EIP-165 (контракт сообщает, какие интерфейсы он поддерживает).
События ERC-1155
Вместо событий Transfer/Approval из ERC-20 и ERC-721 используются:
- TransferSingle(operator, from, to, id, value)
Логирует перевод одного типа токена id в количестве value.
- TransferBatch(operator, from, to, ids, values)
Логирует массовый перевод нескольких ids и values.
- ApprovalForAll(account, operator, approved)
Аналогично ERC-721: массовое разрешение/отзыв прав оператора.
- URI(value, id)
Событие для установки или обновления URI метаданных для определённого id.
Благодаря этим событиям блок-обозреватели и маркетплейсы могут корректно отображать историю операций по всем токенам внутри одного контракта.
Метаданные и идентификаторы токенов
Для каждого id контракт может задавать свои метаданные:
- URI может включать шаблон, например:
https://example.com/metadata/{id}.json или ipfs://...;
- поле {id} подставляется в шестнадцатеричном формате по стандартным правилам.
За счёт этого:
- один контракт может описывать целую коллекцию предметов;
- часть из них ведёт себя как NFT (1 экземпляр или несколько уникальных);
- часть — как взаимозаменяемые «фишки» (например, внутриигровое золото или ресурсы).
Отображение в кошельках и на маркетплейсах зависит от того, как они интерпретируют id и связанные с ним метаданные.
Почему ERC-1155 популярен в играх и NFT-инфраструктуре
У стандарта есть несколько практических преимуществ:
- Экономия газа.
Массовые переводы и операции с несколькими токенами внутри контракта обходятся дешевле, чем взаимодействие с десятками отдельных контрактов ERC-20/ERC-721.
- Удобство для разработчиков игр.
В играх есть:
- валюты (fungible);
- предметы (NFT);
- расходники и ресурсы (fungible, но в разных видах).
Всё это удобно представить как «мульти-токены» одного контракта.
- Гибкость логики.
Легко создавать новые id с разной логикой дропа, крафта, сжигания и апгрейда, не деплоив новые контракты.
- Масштабируемость интерфейсов.
Биржи, маркетплейсы и dApp могут взаимодействовать с одной коллекцией через единый контракт, вместо множества адресов.
Типичные риски и особенности ERC-1155
- Сложность для новичков.
В отличие от «однозначного» ERC-20 или ERC-721, здесь нужно учитывать:
- id и amount одновременно;
- batch-операции;
- шаблонные URI.
Это усложняет ручной аудит и интеракцию с контрактом через низкоуровневые интерфейсы.
- Единый контракт — единая точка риска.
Ошибка в логике одного ERC-1155-контракта может затронуть все токены в нём.
Поэтому особенно важно использовать проверенные реализации библиотек.
- UX-зависимость от кошельков.
Не все кошельки одинаково удобно показывают ERC-1155:
- иногда NFT и предметы скрыты во вкладке «коллекции»;
- не всегда есть удобный просмотр всех id и их свойств.
- Разделение fungible / NFT на уровне интерфейса, а не стандарта.
Стандарт не «знает», является ли конкретный id NFT или взаимозаменяемым токеном — это логика уровня приложения.
Когда выбирать ERC-1155 вместо ERC-20/721
ERC-1155 оправдан, если:
- у проекта много типов активов, особенно в играх и коллекционных системах;
- важны массовые операции: аирдропы, раздачи наград, массовые трейды;
- хочется комбинировать:
- игровые валюты;
- предметы;
- ограниченные серии;
- важно сократить расходы на gas и упростить управление контрактами.
Если нужен один простой токен (стейблкоин, governance-токен) — достаточно классического ERC-20. Если выпускается узкая коллекция уникальных NFT без сложной структуры — подойдёт ERC-721.
Частые вопросы (FAQ) про ERC-1155
ERC-1155 — это NFT или нет? И да, и нет. ERC-1155 — каркас для мульти-токенов. Отдельные id могут вести себя как NFT (1 экземпляр) или как взаимозаменяемые токены (много одинаковых единиц). Всё зависит от логики контракта.
Можно ли в одном ERC-1155 контракте сделать и валюту, и предметы? Да, это типичный кейс:
- одна группа id — игровые валюты;
- другая — редкие предметы;
- третья — билеты/доступы и т.п.
Чем отличается safeBatchTransferFrom от нескольких safeTransferFrom? Пакетный метод:
- отправляет несколько токенов разных типов в одной транзакции;
- уменьшает суммарные комиссии за gas;
- логируется в одном событии TransferBatch, что упрощает анализ.
Поддерживают ли все кошельки ERC-1155? Современные кошельки и маркетплейсы — да, но качество поддержки разное. В старых или минималистичных интерфейсах ERC-1155-активы могут отображаться ограниченно.
