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

ERC-721 или ERC-1155: какой стандарт NFT выбрать

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

ERC-721 подходит, когда каждый токен уникален и существует в одном экземпляре: произведение, сертификат, место в клубе. ERC-1155 — когда нужно много видов токенов в одном контракте и у каждого вида может быть много одинаковых копий: игровые предметы, билеты, серии коллекционных карточек. ERC-1155 экономичнее при массовых операциях благодаря пакетным переводам, а ERC-721 проще и лучше поддерживается как «одна вещь — один токен». Выбор зависит от модели продукта, а не от моды.

Чем стандарты отличаются по сути

ERC-721 описывает невзаимозаменяемый токен: у каждого tokenId ровно один владелец. ERC-1155 — мультитокен: у каждого id есть баланс у каждого владельца, как у обычного токена. Если баланс у id может быть только 0 или 1 и всего выпущен один экземпляр, ERC-1155 ведёт себя как NFT. Если копий много, это «серийный» или полувзаимозаменяемый токен.

КритерийERC-721ERC-1155
МодельОдин tokenId — один владелецУ каждого id балансы у многих владельцев
Виды токенов в контрактеОбычно одна коллекция на контрактМного видов в одном контракте
Пакетный переводНет в стандарте, по одномуsafeBatchTransferFrom в стандарте
Владелец конкретного токенаownerOf(tokenId) в стандартеНет функции «кто владеет», только балансы
МетаданныеtokenURI(tokenId) для каждого токенаuri(id), допускается шаблон с подстановкой {id}
ОдобрениеНа конкретный токен или на всеТолько на все токены оператору
Колбэк получателюonERC721Received при safe-переводеonERC1155Received и батч-версия при каждом переводе
Где уместенУникальные объекты, искусство, сертификатыИгры, билеты, серии, наборы предметов

Газ: где разница реальная

При выпуске одного уникального токена стандарты сопоставимы. Разница проявляется при массовых операциях. В ERC-1155 один вызов переводит или выпускает несколько видов сразу, и общая стоимость ниже, чем у множества отдельных транзакций. Для ERC-721 существуют оптимизированные реализации массового минта, например ERC721A, но они меняют распределение затрат: минт дешевле, а первые переводы могут быть дороже. Перед выбором измеряйте газ на своих сценариях, например командой forge test --gas-report в Foundry. О приёмах экономии — в статье о газе в Ethereum.

Метаданные и где хранить картинки

Сам контракт хранит только ссылку на метаданные: JSON с названием, описанием, атрибутами и ссылкой на изображение. Где лежат эти файлы, определяет, насколько NFT долговечен.

ХранилищеПлюсыРиски
Свой сервер по httpsПросто, можно менятьСервер выключат — картинки пропадут; владелец может подменить содержимое
IPFS с закреплением (pinning)Адрес зависит от содержимого, подмена заметнаНужно оплачивать закрепление, иначе файлы могут исчезнуть из сети
ArweaveРазовая оплата постоянного храненияСвоя экосистема и инструменты
Прямо в контракте (on-chain SVG)Ни от кого не зависитДорого, подходит только для простой графики

Роялти: ERC-2981

ERC-2981 задаёт функцию royaltyInfo(tokenId, salePrice), которая сообщает маркетплейсу, кому и сколько платить автору при перепродаже. Важно понимать: стандарт только сообщает информацию. Заставить маркетплейс заплатить он не может, решение остаётся за площадкой. OpenZeppelin содержит готовую реализацию ERC2981, подходящую к обоим стандартам.

Безопасность: на что обратить внимание

  • Колбэки получателя. safeTransferFrom и _safeMint вызывают код получателя, если он контракт. Это точка повторного входа: изменяйте состояние до минта и используйте блокировку. Подробно — в статье о reentrancy.
  • Лимиты минта. Максимальная эмиссия, лимит на адрес и на транзакцию проверяются в контракте, а не только в интерфейсе.
  • Вайтлист по подписи или Merkle-дереву. Подпись должна содержать адрес, лимит и срок, иначе её используют повторно. Как защитить подписи — в статье об EIP-712 и повторе подписи.
  • Вывод выручки. Средства от продажи выводит роль у мультиподписи, а не любой адрес, и лучше по схеме «забери сам».
  • Одобрения. setApprovalForAll даёт оператору доступ ко всем токенам владельца. В OpenZeppelin 5.6 запрещено назначать оператором нулевой адрес.
  • Случайность при раскрытии. Хеш блока и время не подходят для распределения редких предметов, нужна верифицируемая случайность.

Изменения OpenZeppelin, о которых стоит знать

В OpenZeppelin 5.6 изменилось поведение ERC-1155: пакетный перевод с одним элементом теперь вызывает у получателя onERC1155BatchReceived, а не onERC1155Received. Если ваш контракт-получатель реализует только одну из функций, проверьте совместимость. Для ERC-721 в пятой ветке все движения токенов, включая минт и сжигание, проходят через внутреннюю функцию _update, и дополнительные проверки встраивают туда.

Расширения, которые часто просят

РасширениеЧто даётЦена
ERC721EnumerableПеребор всех токенов и токенов владельца прямо в контрактеЗаметно дороже минт и переводы; список часто проще строить по событиям индексатором
ERC721URIStorageОтдельная ссылка на метаданные для каждого токенаЛишняя запись в storage на каждый токен
ERC1155SupplyУчёт общего выпуска по каждому idДополнительные записи при минте и сжигании
ERC721Burnable, ERC1155BurnableСжигание владельцемНужно решить, может ли сжигать оператор
Непередаваемые токены (soulbound)Сертификаты и бейджи, которые нельзя продатьЗапрет переводов в _update, кроме минта и сжигания

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

Как выбрать: короткий алгоритм

  1. Каждый токен уникален и существует в одном экземпляре? Скорее ERC-721.
  2. Нужно много одинаковых копий одного предмета или билета? ERC-1155.
  3. Много видов предметов в одном продукте, например в игре? ERC-1155.
  4. Важна совместимость с инструментами, которые ожидают ownerOf? ERC-721.
  5. Пользователи часто переводят наборы предметов разом? ERC-1155.
  6. Сомневаетесь — опишите три главных сценария и измерьте газ на обоих стандартах.

Пример под задачу

ПродуктСтандартПочему
Коллекция из 5 000 уникальных изображенийERC-721Каждый токен уникален, важен ownerOf
Билеты на мероприятие с категориями местERC-1155Категория — id, места — количество
Игровые ресурсы и предметыERC-1155Много видов, пакетные переводы
Сертификат об окончании курсаERC-721Один документ — один владелец
Членство в клубе с уровнямиОба вариантаЗависит от того, уникально ли каждое членство

Для игровых и мини-приложений NFT часто дополняют интерфейсом в Telegram, такие проекты мы делаем в направлении мини-приложений. Готовое решение для коллекций с минтом, вайтлистом и выводом выручки описано на странице NFT-коллекции. Если нужна своя логика, начните со страницы разработки смарт-контрактов.

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

Чем ERC-721 отличается от ERC-1155?

В ERC-721 каждый токен уникален и у него один владелец. В ERC-1155 в одном контракте много видов токенов, и у каждого вида может быть много одинаковых копий у разных владельцев.

Какой стандарт дешевле по газу?

Для одного уникального токена разница небольшая. При массовом выпуске и переводе наборов ERC-1155 обычно экономичнее за счёт пакетных операций, но измерять стоит на своих сценариях.

Обязаны ли маркетплейсы платить роялти по ERC-2981?

Нет. Стандарт только сообщает, кому и сколько платить. Решение о выплате принимает площадка.

Можно ли сделать NFT, который нельзя продать?

Да. Для сертификатов и бейджей переводы запрещают в коде контракта, оставляя только выпуск и сжигание. Такие токены называют непередаваемыми или soulbound.

Где хранить картинки NFT?

Надёжнее всего в хранилище с адресацией по содержимому, например в IPFS с оплаченным закреплением или в Arweave. Свой сервер проще, но картинки пропадут, если его выключить.

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

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

Связаться