Купить крипто
Рынки
Спот
ФьючерсыBTC
Сбережения
Центр событий
Хаб наград
Еще
Фестиваль с 0 комиссией
Мультитокеновый стандарт ERC-1155: Что такое мультитокеновый стандарт ERC-1155?ERC-1155 — это стандарт токенов Ethereum, который позволяет управлять множеством типов токенов одновременно с помощью одного смарт-контракта.Один контракт EМультитокеновый стандарт ERC-1155: Что такое мультитокеновый стандарт ERC-1155?ERC-1155 — это стандарт токенов Ethereum, который позволяет управлять множеством типов токенов одновременно с помощью одного смарт-контракта.Один контракт E

Мультитокеновый стандарт ERC-1155

2026/10/13 15:30
#Intermediate
Humanity
H$0.05468-9.15%
PX
PX$0.0125-5.30%
AINFT
NFT$0.0000002379-0.08%
SPACE ID
ID$0.03638-6.95%
TokenFi
TOKEN$0.002008-5.55%

Что такое мультитокеновый стандарт ERC-1155?

ERC-1155 — это стандарт токенов Ethereum, который позволяет управлять множеством типов токенов одновременно с помощью одного смарт-контракта.

Один контракт ERC-1155 может представлять взаимозаменяемые токены, невзаимозаменяемые токены (NFT), полу взаимозаменяемые токены или сочетание этих типов активов.

Официальная спецификация ERC-1155 устанавливает стандартизированные правила проверки балансов, одиночных и пакетных переводов, разрешений операторов, callback-функций получателя, событий и необязательных метаданных.

ERC-1155 классифицируется как финальный стандарт Ethereum Request for Comments.

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

У каждого ID токена могут быть собственные предложение, балансы, метаданные, редкость, назначение и экономические характеристики.

ERC-1155 был разработан, чтобы снизить стоимость и сложность развертывания и использования больших коллекций блокчейн-активов.

Зачем был создан ERC-1155?

В более ранних моделях токенов обычно требовались отдельные контракты для разных взаимозаменяемых активов или коллекций NFT.

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

Повторное развертывание контрактов увеличивает объем байткода, административную нагрузку, объем интеграционных работ и стоимость транзакций.

ERC-1155 объединяет множество типов токенов в одном контракте и применяет к ним общую систему переводов и разрешений.

Стандарт также поддерживает стандартизированные пакетные операции, позволяющие перемещать несколько ID токенов в одной транзакции.

Это делает его полезным для игр, цифровых коллекционных предметов, систем членства, токенизированных инвентарей, финансовых позиций, программ вознаграждений и других криптоприложений с множеством категорий активов.

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

Как работает ERC-1155

Контракт ERC-1155 хранит отдельный баланс для каждой комбинации адреса аккаунта и ID токена.

В одном контракте адрес может владеть десятью единицами токена с ID 1, одной единицей токена с ID 2 и ни одной единицей токена с ID 3.

Каждый ID токена может представлять взаимозаменяемый актив, уникальный NFT или актив с ограниченным взаимозаменяемым предложением.

При переводе токенов контракт уменьшает баланс отправителя по каждому соответствующему ID и увеличивает соответствующий баланс получателя.

Контракт генерирует стандартизированные события, позволяющие кошелькам и индексаторам восстановить данные о создании, переводе и сжигании токенов.

Если получателем является смарт-контракт, контракт ERC-1155 вызывает функцию получателя, чтобы проверить, принимает ли тот активы.

Узлы Ethereum выполняют эти правила и проверяют изменения балансов в соответствии с кодом развернутого контракта.

Что такое ID токена в ERC-1155?

ID токена — это беззнаковое целое число, которое обозначает один тип токена внутри контракта ERC-1155.

Тот же ID токена может существовать в другом контракте, но при этом не обозначать тот же актив.

Таким образом, ERC-1155-актив идентифицируется одновременно блокчейн-сетью, адресом контракта и ID токена.

ID токена 25 может обозначать взаимозаменяемый игровой ресурс в одном контракте и уникальный коллекционный предмет — в другом.

Стандарт не требует, чтобы ID начинались с нуля, шли по порядку или имели определенный смысл.

Разработчики могут присваивать ID в соответствии с архитектурой своего приложения.

Приложениям следует запрашивать достоверные данные контракта, а не предполагать, какие ID токенов существуют.

Взаимозаменяемые токены ERC-1155

ID токена ERC-1155 может представлять взаимозаменяемый актив, если существует несколько взаимозаменяемых единиц с этим ID.

Например, ID токена 1 может представлять игровую валюту с миллионом одинаковых единиц.

Для каждого держателя ведется количественный баланс по ID токена 1.

Единицы с одним ID обычно имеют одинаковые свойства, заданные контрактом.

В отличие от ERC-20, базовый интерфейс ERC-1155 не определяет отдельные функции для общего предложения, символа, названия или количества десятичных знаков каждого ID токена.

Если проекту нужны сведения о предложении или отображении, их необходимо предоставлять с помощью расширений, метаданных или пользовательских функций.

Невзаимозаменяемые токены ERC-1155

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

Адрес, на котором находится эта единственная единица, считается владельцем токена.

Другой ID в том же контракте может представлять отдельный уникальный предмет.

Например, ID токена 1001 может обозначать один меч, а ID 1002 — один участок виртуальной земли.

Базовый стандарт не требует, чтобы максимальное предложение по ID токена составляло одну единицу.

Если ID должен функционировать как NFT, уникальность необходимо обеспечить логикой выпуска токенов контракта.

Полу взаимозаменяемые токены

Полу взаимозаменяемый токен изначально состоит из взаимозаменяемых единиц, но позднее может приобрести особое значение или ограниченную применимость.

Распространенный пример — билеты на мероприятие: до его начала несколько билетов на места в одном секторе могут быть взаимозаменяемыми.

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

Полу взаимозаменяемая модель подходит и для игровых предметов с ограниченным тиражом или изменяемым состоянием.

ERC-1155 формально не классифицирует ID как взаимозаменяемые, невзаимозаменяемые или полу взаимозаменяемые.

Классификация зависит от предложения токена, метаданных, правил перевода и дизайна приложения.

Основные функции ERC-1155

Основной интерфейс включает функции проверки балансов, перевода токенов и управления разрешениями операторов.

Обязательные функции:

balanceOf
,
balanceOfBatch
,
setApprovalForAll
,
isApprovedForAll
,
safeTransferFrom
и
safeBatchTransferFrom
.

ERC-1155 также требует обнаружения интерфейсов ERC-165.

Базовый интерфейс не требует публичного выпуска или сжигания токенов, общего предложения, роялти, названий токенов, символов или функции decimals.

Эти функции можно добавить с помощью расширений или собственной логики реализации.

Функция balanceOf

Функция

balanceOf
возвращает количество токенов с одним ID, принадлежащих одному адресу.

В качестве входных данных ей нужны адрес аккаунта и ID токена.

Это отличается от ERC-20, где один контракт обычно представляет только один тип токена, поэтому функции нужен только адрес аккаунта.

Это также отличается от ERC-721, где

balanceOf
показывает количество отдельных NFT из коллекции, которыми владеет адрес.

Баланс ERC-1155 может равняться нулю, единице или любому большему целому числу, допустимому контрактом.

Согласно стандарту, запрос баланса нулевого адреса должен завершаться ошибкой.

Функция balanceOfBatch

Функция

balanceOfBatch
за один вызов получает балансы для нескольких аккаунтов и ID токенов.

Вызывающая сторона передает массив адресов аккаунтов и соответствующий ему массив ID токенов.

Каждое возвращаемое значение соответствует аккаунту и ID, находящимся на одной и той же позиции в массивах.

Длина обоих входных массивов должна быть одинаковой.

Функция может запрашивать несколько активов одного аккаунта или один актив для нескольких аккаунтов.

Пакетные запросы балансов сокращают количество отдельных вызовов, необходимых кошелькам, играм и аналитическим приложениям.

Функция safeTransferFrom

Функция

safeTransferFrom
переводит определенное количество токенов с одним ID с одного адреса на другой.

Вызывающая сторона должна быть держателем токена или оператором, которому этот держатель выдал разрешение.

У отправителя должен быть достаточный баланс выбранного ID токена.

Получателем не может быть нулевой адрес.

Функция также принимает поле bytes, которое может содержать данные, специфичные для приложения.

Если получатель — смарт-контракт, он должен принять перевод с помощью предусмотренной callback-функции получателя ERC-1155.

Успешный перевод генерирует событие

TransferSingle
.

Функция safeBatchTransferFrom

Функция

safeBatchTransferFrom
переводит несколько ID токенов и соответствующие им количества в одной транзакции.

Вызывающая сторона передает соответствующие друг другу массивы ID токенов и значений.

Количество токенов с каждым ID определяется значением на той же позиции во втором массиве.

Длина массивов должна быть одинаковой.

Вызывающая сторона должна быть держателем или одобренным оператором, а у держателя должны быть достаточные балансы по каждому элементу пакета.

Если один из обязательных переводов не удается выполнить, вся транзакция обычно отменяется.

Успешный пакетный перевод генерирует одно событие

TransferBatch
, а не отдельное событие для каждого ID токена.

Зачем нужны пакетные переводы

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

Пользователь игры может одновременно перевести валюту, материалы, броню и коллекционные предметы.

Приложение также может за одну операцию распределить несколько типов вознаграждений одному получателю.

Пакетная обработка может сократить повторные транзакционные издержки и снизить общую стоимость по сравнению с отправкой множества отдельных транзакций.

Точная экономия зависит от количества ID, реализации контракта, изменений хранилища, состояния сети и логики получателя.

Слишком большие пакеты все равно могут потребовать слишком много газа и не пройти из-за ограничения газа блока.

Приложениям следует устанавливать разумные ограничения на размер пакетов, задаваемых пользователями.

Разрешения операторов ERC-1155

В ERC-1155 используется модель разрешений оператора на всю коллекцию.

Функция

setApprovalForAll
позволяет держателю выдать или отозвать разрешение оператора.

Одобренный оператор может управлять всеми ID токенов ERC-1155, принадлежащими этому держателю в рамках контракта.

Разрешение распространяется на имеющиеся балансы и токены, которые держатель позднее получит из того же контракта.

Базовый стандарт не предусматривает функции для разрешения операций только с одним ID токена или ограниченным количеством токенов.

Такое широкое разрешение упрощает использование приложений, но создает существенный риск безопасности.

Перед выдачей разрешения пользователям следует проверить адрес оператора и контракт.

Функция isApprovedForAll

Функция

isApprovedForAll
показывает, имеет ли один адрес полномочия оператора в отношении токенов другого адреса.

Она возвращает

true
или
false
.

Разрешение действует только в том контракте ERC-1155, в котором оно было выдано.

Оно автоматически не предоставляет полномочий в отношении токенов ERC-20, NFT ERC-721 или активов из другого контракта ERC-1155.

Пользователям следует периодически проверять действующие разрешения операторов и отзывать те, которые больше не нужны.

Отключение кошелька от сайта не отменяет разрешение оператора, сохраненное в блокчейне.

Расширения для точечных разрешений

Широкая модель разрешений ERC-1155 может не подойти пользователю, который хочет разрешить операции только с отдельными ID токенов или их количеством.

Дополнительные стандарты или пользовательские контракты могут предоставлять более ограниченные разрешения.

Расширение разрешений ERC-5216 определяет разрешения на количество для конкретных ID токенов ERC-1155.

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

Кошелек должен четко различать ограниченное разрешение для ID токена и стандартное разрешение на всю коллекцию.

Интерфейс получателя ERC-1155

Смарт-контракт, получающий токены ERC-1155 через стандартный безопасный перевод, должен реализовать соответствующую функцию получателя.

Интерфейс получателя включает

onERC1155Received
для одиночного перевода и
onERC1155BatchReceived
для пакетного.

Идентификатор ERC-165 для интерфейса получателя —

0x4e2312e0
.

Получающий контракт проверяет оператора, прежнего держателя, ID токенов, количества и приложенные данные.

Он должен вернуть ожидаемое значение принятия, иначе перевод будет отменен.

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

Callback-функция получателя для одиночного перевода

Функция

onERC1155Received
вызывается после обновления баланса получателя при одиночном переводе.

Ожидаемое значение принятия —

0xf23a6e61
.

Получатель может проверить контракт токена, оператора, отправителя, ID токена, количество и приложенные данные.

Чтобы принять перевод, он возвращает требуемое значение.

Получатель может отклонить перевод, отменив выполнение или вернув другое значение.

Получающий контракт не должен зачислять депозит только на основании данных callback-функции без проверки вызывающего контракта токена.

Callback-функция получателя для пакетного перевода

Функция

onERC1155BatchReceived
обрабатывает получение нескольких ID токенов в одном переводе.

Ожидаемое значение принятия —

0xbc197c81
.

Массивы ID и количеств необходимо обрабатывать в соответствующем порядке.

Получателю следует проверить длину массивов и убедиться, что каждый поддерживаемый ID токена соответствует правилам приложения.

Неверное возвращаемое значение или отмена выполнения приведут к сбою всего пакетного перевода.

Пакетный получатель требует тщательной разработки, поскольку одна транзакция может передавать множество разных типов активов.

Callback-функции получателя и повторный вход

Callback-функции получателя ERC-1155 выполняют код внешнего контракта до завершения исходной транзакции перевода.

Получающий контракт может во время callback-вызова снова обратиться к контракту токена или другому приложению.

Это создает возможность повторного входа.

Спецификация ERC-1155 требует обновить балансы и события переводов до вызова функции получателя.

Однако прикладным контрактам все равно необходимо защищать собственную логику учета и авторизации.

Рекомендации по безопасности Solidity советуют по возможности завершать проверки и важные изменения состояния до взаимодействия с внешними контрактами.

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

События ERC-1155

Базовый стандарт определяет события

TransferSingle
,
TransferBatch
,
ApprovalForAll
и
URI
.

Эти журналы позволяют кошелькам, обозревателям, индексаторам и аналитическим системам отслеживать активность токенов.

Стандарт разработан таким образом, чтобы балансы токенов и изменения предложения можно было восстановить по событиям переводов.

При создании, переводе или сжигании токенов реализации должны генерировать соответствующие события.

Каждое событие необходимо рассматривать вместе с адресом контракта, который его сгенерировал.

Событие TransferSingle

Событие

TransferSingle
записывает оператора, отправителя, получателя, ID токена и количество для одного типа токена.

При обычном переводе адреса отправителя и получателя не равны нулю.

При выпуске токена в качестве отправителя используется нулевой адрес.

При сжигании токена нулевой адрес используется в качестве получателя.

Переводы с нулевым значением также должны генерировать соответствующее событие.

Наблюдатели могут использовать эти журналы для обновления индексируемых записей о балансах.

Событие TransferBatch

Событие

TransferBatch
записывает несколько ID токенов и количеств, переведенных за одну операцию.

ID и количества располагаются на соответствующих позициях массивов.

Событие также содержит данные об операторе, отправителе и получателе.

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

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

Событие ApprovalForAll

Событие

ApprovalForAll
фиксирует, включил или отключил владелец разрешение оператора.

В нем указываются владелец, оператор и статус разрешения.

Само событие не переводит токены.

Оно меняет возможность оператора инициировать будущие переводы от имени владельца.

Отзыв разрешения не отменяет транзакции, завершенные, пока это разрешение действовало.

Обнаружение интерфейса ERC-1155

ERC-1155 требует поддержки стандарта обнаружения интерфейсов ERC-165.

Идентификатор основного интерфейса ERC-1155 —

0xd9b67a26
.

Совместимый контракт должен возвращать

true
, если функция
supportsInterface
вызывается с этим значением.

Стандарт ERC-165 определяет, как смарт-контракты объявляют и обнаруживают поддерживаемые интерфейсы.

Обнаружение интерфейсов помогает приложениям избегать вызовов неподдерживаемых функций.

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

Метаданные ERC-1155

ERC-1155 включает необязательное расширение URI метаданных.

Расширение добавляет функцию

uri
, возвращающую расположение метаданных для ID токена.

Идентификатор этого интерфейса —

0x0e89341c
.

Возвращаемый URI обычно указывает на документ JSON с такими сведениями, как название, описание, изображение, атрибуты и внешние ресурсы.

В отличие от интерфейсов метаданных ERC-20 и ERC-721, базовая архитектура ERC-1155 не требует наличия функций

name
или
symbol
ончейн.

Тем не менее проекты могут добавить эти функции с помощью пользовательских расширений.

Подстановка {id} в метаданные

URI метаданных ERC-1155 может содержать плейсхолдер

{id}
.

Приложения заменяют этот плейсхолдер запрошенным ID токена в нижнем регистре шестнадцатеричного формата.

Значение должно содержать 64 символа, включая ведущие нули, и не должно включать префикс

0x
.

Такая структура позволяет одному базовому URI указывать на метаданные множества ID токенов.

Если приложение выполнит подстановку неправильно, оно может запросить не тот файл метаданных.

Событие URI

Событие

URI
объявляет URI метаданных, связанный с ID токена.

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

Если для этого ID было сгенерировано событие URI, функция

uri
должна возвращать то же значение, что и последнее такое событие.

Наличие действительного URI не доказывает, что ID токена был выпущен.

Чтобы определить существование токена, приложениям следует использовать балансы и события переводов, а не доступность метаданных.

Риски хранения метаданных

Метаданные ERC-1155 могут храниться на обычном сервере, в сети с адресацией по содержимому или непосредственно ончейн.

Контент на сервере может быть изменен или удален.

Хранение с адресацией по содержимому повышает целостность, если идентификатор соответствует файлу, но по-прежнему зависит от постоянной доступности данных.

Хранение метаданных ончейн уменьшает зависимость от внешнего хостинга, но увеличивает расходы на хранение и развертывание.

Изменяемый URI контракта может позволить менять названия, изображения, атрибуты или описания после приобретения токенов пользователями.

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

Выпуск токенов ERC-1155

Выпуск создает единицы токена и присваивает их адресу.

Базовый интерфейс ERC-1155 не определяет публичную функцию выпуска.

Каждая реализация определяет, кто может выпускать токены, какие ID можно создавать и действуют ли ограничения предложения.

При выпуске необходимо генерировать событие

TransferSingle
или
TransferBatch
, в котором отправителем указан нулевой адрес.

Если токены выпускаются на адрес смарт-контракта, обычно применяется соответствующая callback-функция получателя.

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

Сжигание токенов ERC-1155

Согласно реализации контракта, сжигание навсегда удаляет единицы токена из балансов.

Базовый интерфейс не требует публичной функции сжигания.

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

При сжигании необходимо генерировать соответствующее событие перевода, в котором получателем указан нулевой адрес.

Сжигание всех существующих единиц токена с определенным ID не обязательно запрещает повторный выпуск токенов с этим ID.

Результат зависит от правил предложения и контроля доступа, заданных контрактом.

Общее предложение ERC-1155

Базовый стандарт ERC-1155 не определяет функцию

totalSupply
.

Предложение каждого ID токена можно рассчитать по событиям выпуска и сжигания, если реализация соблюдает требования к событиям.

Для упрощения ончейн-запросов контракт может добавить расширение отслеживания предложения.

В актуальном API реализации ERC-1155 предусмотрено необязательное расширение, отслеживающее общее предложение для каждого ID токена.

Приложениям не следует предполагать, что в каждом контракте ERC-1155 доступны одни и те же функции предложения.

Перечисление ERC-1155

В ERC-1155 нет основной функции, которая перечисляет все ID токенов или всех держателей.

Стандарт предполагает, что офчейн-системы будут восстанавливать данные об активности токенов по событиям

TransferSingle
,
TransferBatch
и
URI
.

Обычно индексатор начинает работу с блока развертывания контракта и обрабатывает события до последнего блока.

Пропуск события может привести к неверным данным о балансах или предложении.

Контракты могут добавлять пользовательские функции перечисления, но они доступны не всегда.

Роялти ERC-1155

Базовый стандарт ERC-1155 не определяет роялти создателям.

Необязательный стандарт роялти ERC-2981 может предоставлять получателя роялти и рекомендуемую сумму выплаты при продаже токена.

ERC-2981 совместим с ERC-1155 и позволяет задавать общие или индивидуальные для токенов сведения о роялти.

Стандарт передает информацию о платежах, но не обязывает каждое приложение выплачивать роялти.

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

Стандартизированные ошибки ERC-1155

Исходный стандарт ERC-1155 не определяет пользовательские ошибки современного Solidity.

Финальный стандарт ERC-6093 определяет распространенные ошибки для реализаций ERC-1155.

К ним относятся ошибки недостаточного баланса, недействительного отправителя или получателя, отсутствующего разрешения оператора, недействительного оператора и несовпадающей длины массивов.

Стандартизированные ошибки помогают кошелькам и разработчикам единообразно объяснять причины сбоев транзакций.

Существующие контракты ERC-1155 не обязаны внедрять эти ошибки.

ERC-1155 и ERC-20

ERC-20 обычно представляет один тип взаимозаменяемого токена в каждом контракте.

ERC-1155 может представлять множество взаимозаменяемых и невзаимозаменяемых ID токенов в одном контракте.

В ERC-20 используются числовые разрешения для отдельных получателей средств, а базовый ERC-1155 применяет разрешение оператора на всю коллекцию.

ERC-1155 поддерживает стандартизированные пакетные переводы и callback-функции получателя.

В базовом стандарте ERC-20 этих функций нет.

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

ERC-1155 и ERC-721

ERC-721 предназначен для индивидуально принадлежащих невзаимозаменяемых ID токенов.

У одного действительного ID токена ERC-721 есть один владелец, а не количественный баланс для каждого аккаунта.

ERC-1155 хранит количество для каждой комбинации аккаунта и ID токена.

Это позволяет одному ID иметь множество взаимозаменяемых единиц, а другому ID в том же контракте — предложение в одну единицу.

ERC-1155 также поддерживает стандартизированные пакетные переводы, тогда как ERC-721 обычно переводит по одному NFT за раз.

Если каждый токен уникален, ERC-721 может обеспечить более простую модель владения.

Варианты использования ERC-1155

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

Системы мероприятий могут выпускать билеты нескольких категорий и в разных количествах с помощью одного контракта.

Проекты членства могут управлять разными уровнями доступа, группами с ограниченным сроком действия или пакетами преимуществ через отдельные ID токенов.

Проекты цифровых коллекционных предметов могут выпускать несколько взаимозаменяемых копий каждой работы.

Финансовые приложения могут использовать ID для обозначения сроков погашения, требований, групп риска или категорий позиций.

Системы вознаграждений могут за одну пакетную операцию распределять несколько типов баллов или предметов за достижения.

Стандарт не подтверждает, что какой-либо токен представляет действительное юридическое право или реальный актив.

Риски фишинга с разрешениями

Вредоносное приложение может попросить пользователя вызвать

setApprovalForAll
, выдавая запрос за проверку или подключение кошелька.

После одобрения оператор может перевести все ID токенов ERC-1155 пользователя в рамках этого контракта.

Разрешение может распространяться и на токены, которые пользователь получит позднее.

Перед подписанием пользователям следует проверить сеть, контракт токена, адрес оператора и тип разрешения.

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

Для отмены разрешения оператора ERC-1155 никогда не требуется фраза восстановления или приватный ключ.

Риски пакетной обработки

Пакетные операции обрабатывают массивы, элементы которых должны оставаться согласованными по позициям.

Несовпадение ID и количеств должно приводить к сбою транзакции.

Неверная индексация может привести к переводу неправильного количества актива.

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

Получатель может принимать одни ID токенов и отклонять другие, поэтому до подтверждения получения ему следует проверить весь пакет.

Приложениям следует ограничивать размер пакетов и тестировать повторяющиеся или неотсортированные ID в соответствии с правилами реализации.

Риски получателя и повторного входа

Безопасные переводы вызывают внешний код получателя после обновления балансов.

Вредоносный получатель может попытаться повторно войти в функции выпуска, перевода, продажи, стейкинга, кредитования или вывода.

Контракт может оставаться уязвимым, даже если одна функция защищена от повторного входа, но другая функция предоставляет доступ к связанному состоянию.

Разработчикам следует использовать согласованную логику изменения состояния для одиночных и пакетных операций.

Callback-функции получателя должны проверять вызывающий контракт токена и не должны автоматически доверять переданным пользователем данным.

При тестировании безопасности следует проверять вложенные переводы, пересылающие активы контракты-получатели, отмененные callback-вызовы и взаимодействие между контрактами.

Риски предложения и подлинности

ID токена ERC-1155 может казаться уникальным, если в данный момент существует только одна единица.

При этом у уполномоченного эмитента может оставаться возможность выпустить дополнительные единицы позднее.

Название, изображение или ID коллекции также могут быть скопированы в другом контракте.

Адрес контракта и сеть — важные составляющие идентичности актива.

Прежде чем полагаться на заявления о дефицитности, пользователям следует проверить полномочия на выпуск, расширения для отслеживания предложения, права администратора и возможности обновления.

Соответствие ERC-1155 не подтверждает подлинность, редкость, обеспеченность или финансовую ценность.

Риски обновляемых контрактов

Контракт ERC-1155 может работать через обновляемый прокси.

Уполномоченный администратор может иметь возможность менять выпуск, переводы, разрешения, метаданные, комиссии или поведение получателя.

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

Компрометация ключа обновления может подвергнуть риску все ID токенов контракта.

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

Контракт может поддерживать нужный интерфейс и при этом сохранять широкие централизованные полномочия.

Как разработчикам реализовать ERC-1155

Разработчикам следует использовать активно поддерживаемую и проверенную реализацию, а не переписывать чувствительную логику балансов без веской причины.

Актуальное руководство по разработке ERC-1155 содержит основные контракты и объясняет работу балансов мультитокенов и пакетных операций.

Для функций выпуска токенов и администрирования следует использовать явный контроль доступа.

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

Разработчикам следует генерировать все обязательные события и возвращать корректные значения интерфейса ERC-165.

Тесты должны охватывать одиночные и пакетные переводы, разрешения, сжигание, выпуск, несовпадение массивов, недействительных получателей, вредоносные callback-вызовы и изменения метаданных.

Как пользователям оценить токен ERC-1155

Сначала проверьте блокчейн-сеть, адрес контракта и ID токена.

Затем определите, должен ли токен быть взаимозаменяемым, невзаимозаменяемым или полу взаимозаменяемым.

Далее проверьте текущее предложение, полномочия на выпуск и ограничения предложения.

После этого изучите разрешения операторов, связанные с кошельком.

Затем выясните, где хранятся метаданные и могут ли они измениться.

Далее проверьте полномочия администратора, возможность приостановки или заморозки операций и право на обновление.

Затем выясните, создают ли callback-функции получателя или внешние контракты дополнительные риски.

После этого изучите аудиты и проверенный исходный код, не считая их гарантиями.

Затем выясните, какие права или полезные функции действительно предоставляет токен.

Перед переводом ценных активов сначала протестируйте незнакомый контракт с небольшим количеством токенов.

Пример пакетного перевода ERC-1155

Предположим, у Алисы есть 100 единиц токена с ID 1, пять единиц токена с ID 2 и одна единица токена с ID 3.

Она хочет отправить Бобу десять единиц с ID 1, две единицы с ID 2 и одну единицу с ID 3.

Кошелек Алисы вызывает

safeBatchTransferFrom
с массивами из трех ID и соответствующих им количеств.

Контракт проверяет балансы Алисы и полномочия вызывающей стороны.

Он уменьшает балансы Алисы и увеличивает балансы Боба по каждому указанному ID.

Контракт генерирует одно событие

TransferBatch
, описывающее весь перевод.

Если Боб использует смарт-контракт, контракт токена вызывает

onERC1155BatchReceived
.

Если получатель вернет корректное значение принятия, транзакция будет завершена.

Если проверка баланса или требование к получателю не выполнены, весь пакетный перевод отменяется.

Распространенные ошибки при работе с ERC-1155

Распространенная ошибка — предполагать, что каждый ID токена ERC-1155 является NFT.

Другая ошибка — считать, что одна единица является максимальным предложением для ID токена.

Третья ошибка — выдавать оператору разрешение, не понимая, что оно распространяется на все ID контракта.

Четвертая ошибка — считать, что отключение кошелька отзывает ончейн-разрешение.

Пятая ошибка — использовать доступность метаданных как доказательство существования токена.

Шестая ошибка — считать, что ERC-1155 определяет функцию общего предложения для каждого ID.

Седьмая ошибка — обрабатывать пакетные массивы, не проверяя соответствие их длины и элементов по позициям.

Восьмая ошибка — игнорировать внешние callback-функции получателя и риск повторного входа.

Девятая ошибка — считать, что роялти исполняются автоматически.

Десятая ошибка — принимать соответствие интерфейсу за доказательство подлинности, дефицитности или безопасности.

FAQ

Что означает ERC-1155?

ERC-1155 — это мультитокеновый стандарт Ethereum для управления множеством взаимозаменяемых, невзаимозаменяемых и полу взаимозаменяемых типов токенов в одном контракте.

Является ли ERC-1155 криптовалютой?

ERC-1155 — это технический стандарт, а реализующие его контракты могут создавать различные типы криптоактивов.

Каков ID интерфейса ERC-1155?

ID основного интерфейса ERC-1155 —

0xd9b67a26
.

Каков ID интерфейса получателя ERC-1155?

ID интерфейса получателя —

0x4e2312e0
.

Можно ли создавать взаимозаменяемые токены с помощью ERC-1155?

Да, один ID токена может представлять множество взаимозаменяемых единиц, распределенных между несколькими аккаунтами.

Можно ли создавать NFT с помощью ERC-1155?

Да, ID токена может функционировать как NFT, если предложение по нему ограничено одной единицей логикой контракта.

Что такое полу взаимозаменяемый токен ERC-1155?

Это токен, единицы которого взаимозаменяемы в одном контексте, но позднее могут приобрести особый смысл, состояние или полезную функцию.

Может ли один контракт ERC-1155 содержать несколько типов активов?

Да, один контракт может управлять множеством ID с разным предложением, метаданными и назначением.

Что возвращает balanceOf?

Функция возвращает количество токенов одного указанного ID ERC-1155 на аккаунте.

Что делает balanceOfBatch?

Функция возвращает балансы для нескольких пар «аккаунт — ID токена» за один вызов.

Что такое safeBatchTransferFrom?

Функция переводит несколько ID токенов и соответствующие количества одной транзакцией и проверяет получателя, если им является контракт.

Что делает setApprovalForAll?

Функция разрешает оператору управлять всеми ID токенов, принадлежащими вызывающей стороне в одном контракте ERC-1155.

Может ли пользователь одобрить только один ID токена?

В базовой функции разрешений такой возможности нет, но более ограниченные права могут предоставляться необязательными расширениями или пользовательскими контрактами.

Истекает ли срок действия разрешения оператора ERC-1155?

Нет, стандартное разрешение остается активным, пока его не отзовут или пользовательская логика контракта не изменит его действие.

Требует ли ERC-1155 проверки получателя при безопасном переводе?

Да, стандартные переводы на смарт-контракты должны соответствовать правилам соответствующей callback-функции получателя для одиночного или пакетного перевода.

Может ли получатель ERC-1155 отклонить токены?

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

Поддерживает ли ERC-1155 метаданные?

Да, стандарт определяет необязательное расширение URI метаданных с ID интерфейса

0x0e89341c
.

Есть ли у каждого токена ERC-1155 название и символ?

Нет, базовый стандарт не требует наличия ончейн-функций названия или символа.

Определяет ли ERC-1155 количество десятичных знаков?

Нет, если такая информация нужна, приложение должно получить ее из метаданных или логики конкретного проекта.

Включает ли ERC-1155 функцию totalSupply?

Нет, для запроса общего предложения требуется индексировать события или использовать необязательное расширение отслеживания предложения.

Могут ли изменяться метаданные ERC-1155?

Да, метаданные могут меняться, если контракт или внешняя система хранения допускают обновления.

Обеспечивает ли ERC-1155 выплату роялти?

Нет, для информации о роялти требуется отдельный стандарт, а базовый контракт токена не обеспечивает автоматическое исполнение таких выплат.

Позволяют ли пакетные переводы ERC-1155 экономить газ?

Да, перевод нескольких ID токенов одной транзакцией может сократить повторные транзакционные издержки.

Могут ли callback-функции ERC-1155 привести к повторному входу?

Да, callback-функции получателя выполняют внешний код и могут вызывать другие функции контракта до завершения исходной транзакции.

Гарантирует ли соответствие ERC-1155 безопасность токена?

Нет, совместимый контракт все еще может содержать небезопасный код, чрезмерные разрешения, изменяемые метаданные, слабые механизмы контроля предложения или мошеннические заявления.

Заключение

ERC-1155 — это стандарт Ethereum для управления множеством типов токенов с помощью одного смарт-контракта.

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

Стандарт определяет одиночные и пакетные запросы балансов, безопасные переводы, разрешения операторов на всю коллекцию, callback-функции получателя, события и обнаружение интерфейсов.

Пакетные операции могут сократить транзакционные издержки, когда требуется одновременно запросить или перевести несколько ID токенов.

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

Базовый стандарт не определяет публичный выпуск и сжигание токенов, общее предложение, количество десятичных знаков, роялти или неизменяемые метаданные.

Эти свойства зависят от необязательных расширений и реализации конкретного контракта.

Пользователям следует проверять сеть, адрес контракта, ID токена, механизмы контроля предложения, разрешения операторов, систему метаданных и полномочия администратора.

Разработчикам следует использовать поддерживаемые реализации, генерировать все обязательные события, защищать callback-функции получателя, ограничивать сложность пакетных операций и тестировать все способы авторизации.

ERC-1155 предоставляет гибкую и эффективную инфраструктуру для мультитокенов, однако техническая совместимость не гарантирует подлинность, дефицитность, финансовую ценность или безопасность смарт-контракта.
Откат или возможность?
Откат или возможность?Откат или возможность?
Почему BTC ETF привлекли 2,4 млрд $ при ликвидациях

В тренде

Трендовые криптовалюты, которые в настоящее время привлекают значительное внимание рынка

Недавно добавленные

Криптовалюты недавно внесенные в листинг и доступные для торговли