ERC-1155 и унификация активов: полувзаимозаменяемые токены и объединение нескольких ресурсов
Продолжим наше путешествие по стандартам активов Ethereum. Изучив ERC-20, представляющий «деньги», и ERC-721, обозначающий «коллекционные предметы», пришло время погрузиться в стандарт, который объединяет лучшее из обоих миров и разработан для эффективности: ERC-1155.
3.4 ERC-1155 и унификация активов: полувзаимозаменяемые токены и объединение нескольких ресурсов
ERC-1155 позволяет одному контракту одновременно размещать взаимозаменяемые токены (FT), невзаимозаменяемые токены (NFT) и «полувзаимозаменяемые» активы, поддерживая пакетные операции, которые могут сократить стоимость газа для экономик с несколькими активами примерно до одной десятой от традиционных стандартов.
Зачем нам нужен ERC-1155?
До появления ERC-1155 разработчики сталкивались со сложной проблемой. Представьте, что вы создаете ончейн-игру:
- Вам нужна «монета», котора я полностью взаимозаменяема, идеально подходящая для стандарта ERC-20.
- Вам также нужно различное уникальное «эпическое оружие», каждое с разными атрибутами, подходящее для стандарта ERC-721.
Эта настройка требует от вашей игры развертывания и поддержки как минимум двух отдельных смарт-контрактов, что приводит к нескольким проблемам:
- Фрагментация нескольких контрактов: Логика кода дублируется, что увеличивает сложность и стоимость разработки, тестирования и аудита.
- Дорогие пакетные переводы: Если игрок хочет обменять 1000 монет и 5 различных видов оружия одновременно, ему необходимо инициировать несколько независимых транзакций, что приводит к высоким комиссиям за газ.
- Сложное объединение активов: Объединение билетов, сувениров и игровых предметов в «стартовый набор» для продажи часто требует использования дополнительных централизованных баз данных или сложных ончейн-контрактов «обертывания».
ERC-1155 был разработан для решения этих проблем неэффективности и фрагментированного опыта.
Ключевая концепция: Один контракт, всеобъемлющий
Основная концепция ERC-1155 заключается в создании мультитокенового контейнера. Он устраняет различие между контрактами токенов и контрактами NFT, используя унифицированную структуру для управления всеми типами активов.
- Единый контракт с несколькими ресурсами: Внутри контракта больше нет только одного баланса, а есть сопоставление
(ID -> Account -> Balance). ЗдесьIDпредставляет тип актива.
- Когда
ID=0, это могут быть «монеты», взаимозаменяемый токен (FT). - Когда
ID=1, это может быть «эпический посох» с предложением в 1 единицу, фактически невзаимозаменяемый токен (NFT).
- Полувзаимозаменяемый токен (SFT): Это мощная концепция, представленная ERC-1155. Актив может иметь разные состояния на разных этапах своего жизненного цикла. Например, «билет на мероприятие» с ID 2 изначально имеет предложение в 5000 единиц, что делает их взаимозаменяемыми (FT); как только пользователь входит на место проведения, билет может быть «сожжен» в уникальный памятный NFT с вашим номером места и временем входа (Ссылка: blog.chainsafe.io).
- Пакетный интерфейс: Это «убойная функция» ERC-1155. Он предоставляет ряд функций для пакетных операций:
safeBatchTransferFrom: Позволяет переводить несколько активов с разными ID на несколько разных адресов за одну транзакцию.balanceOfBatch: Позволяет запрашивать балансы нескольких активов для нескольких адресов одновременно.- Соответствующее событие
TransferBatchтакже позволяет офчейн-приложениям эффективно индексировать пакетные операции.
- Унифицированные метаданные: Функция
uri(id)возвращает строку шаблона URI, напримерhttps://myapi.com/metadata/{id}. Как только фронтенд-приложение получает ее, ему нужно только заменить заполнитель{id}на конкретный ID актива, чтобы запросить соответствующий файл метаданных JSON. - Обязательное подтверждение получателя: Чтобы предотвратить ошибочную передачу активов контрактам, которые не могут их обрабатывать (т.е. «черным дырам»), ERC-1155 требует, чтобы любой контракт, получающий активы, реализовывал интерфейс
IERC1155Receiver; в противном случае транзакция завершится неудачей. Это значительно повышает безопасность активов (Ссылка: docs.openzeppelin.com).
Скачок в эффективности использования газа
Возможность пакетной обработки ERC-1155 обеспечивает невероятную экономию газа. Согласно тестам, при одновременной передаче 100 различных активов использование safeBatchTransferFrom может сэкономить от 70% до 90% коми ссий за газ по сравнению с индивидуальным вызовом функции transfer ERC-20 или ERC-721. (Ссылка: nftnewstoday.com)
Это преимущество в эффективности особенно важно в следующих сценариях:
- Массовые аирдропы: Команды проектов могут распространять различные токены вознаграждений тысячам адресов за один раз.
- Выпадение игровых предметов: После победы над Боссом вы можете «выбросить» монеты, зелья и снаряжение в рюкзак игрока за одну транзакцию.
- Сопоставление на рынке блокчейн-игр: На рынке NFT покупатели могут «сметать» несколько различных серий активов за один раз, оплачивая комиссию за газ только одной транзакции.
Основные варианты использования
ERC-1155 стал предпочтительным стандартом для создания сложных ончейн-экономических систем.
- Экономика блокчейн-игр: Единый контракт может управлять всеми экономическими ресурсами в игровом мире: монетами (FT), деревом (FT), обычными мечами (SFT), эпическими ограниченными скинами (NFT). Платформа блокчейн-игр Enjin была первоначальным инициатором этого стандарта, а Immutable X и другие решения Layer 2 широко приняли его в качестве основного стандарта активов (Ссылка: research.aimultiple.com).
- Билеты и членские карты: Обычные билеты на один и тот же концерт принадлежат к одному и тому же ID актива и могут продаваться оптом; после выступления билеты могут быть преобразованы в уникальные цифровые памятные NFT-заглушки.
- RWA и индексные фонды: Различные доли владения собственностью или различные компоненты акций в индексном фонде могут быть сопоставлены как несколько ID активов в одном контракте ERC-1155, что облегчает массовые подписки и погашения для пользователей.
- Пакетные аирдропы / Игровые лутбоксы: Одна транзакция может распределять различные типы активов на большое количество адресов, сохраняя затраты на газ в экономически приемлемом диапазоне.
Риски и лучшие практики
- Постоянство URI: Если шаблон URI метаданных указывает на централизованный сервер, то при его отключении все активы могут стать «безымянными» оболочками. Лучшая практика — использовать адреса IPFS или Arweave в качестве URI для обеспечения постоянной доступности метаданных.
- Область авторизации: Пакетная авторизация (
setApprovalForAll) даетоператорубольшие полномочия по управлению всеми вашими активами в рамках этого контракта. Обязательно авторизуйте только те контракты, которым вы полностью доверяете, и регулярно проверяйте и отзывайте авторизации. - Реентрантность в функциях обратного вызова: При реализации функций обратного вызова
onERC1155ReceivedиonERC1155BatchReceivedостерегайтесь атак р еентрантности и избегайте вызова ненадежных внешних контрактов внутри функций. - Шаблоны контрактов: Настоятельно рекомендуется использовать полностью проверенные шаблоны контрактов
ERC1155от OpenZeppelin в сочетании с расширениями, такими какERC1155SupplyиAccessControl, для управления предложением и разрешениями, минимизируя риск внесения уязвимостей при самостоятельном написании кода.
Упражнения для читателя
- Откройте Remix и импортируйте шаблон контракта
ERC1155PresetMinterPauserот OpenZeppelin:
- Введите базовый URI (например,
https://my-api.com/) во время развертывания. - Вызовите функцию
mint, чтобы отчеканить 1000 монет (ID=0) и 1 меч (ID=1) для себя. - Используйте функцию
safeBatchTransferFromдля перевода 100 монет и 1 меча вашему другу за одну транзакцию. Проверьте потребление газа этой транзакцией на Etherscan (тестовая с еть) и сравните его с общим газом двух отдельных переводов.
- Концептуальный дизайн: Представьте «полувзаимозаменяемый» билет на мероприятие. Опишите основную логику, которую должен включать его контракт ERC-1155:
- Как разрешить свободную торговлю всеми билетами (с одинаковым ID) до начала мероприятия?
- Как разработать функцию
expire(), которая уничтожает все неиспользованные билеты после мероприятия и отправляет уникальный памятный NFT (новый ID) держателям использованных билетов?
Дополнительное чтение
- EIP-1155: Стандарт нескольких токенов: Прочитайте оригинальный текст предложения по улучшению Ethereum, чтобы понять его мотивы дизайна и полные спецификации интерфейса.
- Документация OpenZeppelin: ERC-1155: Узнайте, как использовать стандартные библиотеки контрактов для реализации ERC-1155 и практические модули расширения, такие как
ERC1155SupplyиERC1155Pausable. - MetaMask «Простое руководство по токенам ERC-1155»: Краткое руководство для начинающих с понятными примерами.
- NFT News Today «Освоение ERC-1155»: Углубленное обсуждение концепции полувзаимозаменяемых токенов (SFT) и их реальных примеров применения.
В следующем разделе (3.5) мы переключим наше внимание с самого стандарта активов на главное узкое место пользовательского опыта и рассмотрим решения: «Layer 2 и ERC-4337: Вывод пользовательского опыта на уровень Web2».