ГЛАВНАЯ / ИНСТРУКЦИИ / ERC-1155 BATCH TRANSFER: КАК ЧИТАТЬ ПЕРЕВОДЫ НЕСКОЛЬКИХ TOKEN ID
ERC-1155 batch transfer: как читать переводы нескольких token ID
ERC-1155 позволяет одному контракту учитывать разные token ID и количества, а safeBatchTransferFrom – передавать несколько пар за один вызов. В массиве ids перечислены типы токенов, а соответствующее значение для каждой позиции находится в values с тем же индексом. TransferBatch показывает оператора, отправителя, получателя и эти массивы. Проверяйте пары по порядку, а не складывайте значения в один общий баланс: ID могут обозначать разные активы.
Один контракт может вести много типов и количеств токенов
В ERC-1155 адрес контракта вместе с token ID определяет тип токена. Один ID может представлять взаимозаменяемое количество, а конкретная схема невзаимозаменяемости зависит от логики проекта. Не определяйте тип актива только по названию, URI или количеству знаков после запятой.
safeBatchTransferFrom передаёт arrays ids и values. Для каждой позиции i сумма values[i] относится к типу ids[i]. Длины должны совпадать. Стандарт требует применять изменения и отражать их в event logs в том порядке, в каком пары переданы. Не сортируйте список при чтении и не переставляйте его элементы независимо друг от друга.
- длины ids и values совпадают
- пары сопоставлены по индексу
- from и to проверены
Событие читается как список пар внутри одного перехода
TransferBatch содержит operator, from, to, ids и values. Operator – адрес, который инициировал вызов и имеет право перемещать эти балансы; from – адрес, чей баланс уменьшается; to – получатель увеличения. Для обычного перевода from и to не равны нулевому адресу. Mint может быть виден как перевод из нулевого адреса, а burn – в нулевой адрес.
Сопоставьте каждую пару массива и сверяйте receipt и декодированное событие с ожидаемым действием. Одна транзакция может содержать несколько событий TransferSingle и TransferBatch, в том числе callbacks, которые запускают дополнительные переводы. Изменения баланса отражаются в порядке событий, но один event не является полным описанием рыночной сделки или цены.
- TransferBatch topic и data декодированы
- порядок пар сохранён
- mint и burn распознаны по нулевому адресу
| Индекс | token ID | Количество | Интерпретация |
|---|---|---|---|
| 0 | ids[0] | values[0] | Первая пара |
| 1 | ids[1] | values[1] | Вторая пара |
| i | ids[i] | values[i] | Пара на той же позиции |
Batch transfer требует подтверждения onERC1155BatchReceived
Если safeBatchTransferFrom направляет актив на контракт, ERC-1155 вызывает onERC1155BatchReceived и передаёт ему operator, from, массивы IDs/values и исходные data. Получатель должен вернуть свой magic value или транзакция откатывается. Он может также явно revert, отказавшись принять токены.
Проверка callback похожа на ERC-721 по цели, но использует отдельный интерфейс и сразу принимает массивы. Не отправляйте NFT receiver selector 0x150b7a02 вместо ERC-1155 batch selector. Обработчик получателя может сам совершить другие операции; в разработке проверяйте изменение состояния до вызова и целостность учёта при повторном входе.
- receiver callback подтверждён
- balanceOfBatch сверяет итог
- пакет не принят за одну рыночную сделку
История событий нужна для восстановления нескольких балансов
ERC-1155 рекомендует строить индекс балансов по событиям TransferSingle, TransferBatch и URI от блока развёртывания контракта. Поэтому проверяйте, что обозреватель показывает все события, сеть и адрес контракта совпадают, а начальный блок индекса не обрезан. Для подтверждения текущего значения можно сравнить историю с balanceOf или balanceOfBatch.
Если интерфейс показывает только итоговую сумму, выгрузите event log и декодируйте массивы из ABI нужной версии. Учитывайте mint и burn, изменения URI и возможные связанные вызовы в той же транзакции. Не считайте одинаковый ticker доказательством совпадения token ID у разных контрактов.
Частые вопросы
Что означают ids и values?
Каждый token ID в ids связан с количеством values на той же позиции.
Массивы могут быть разной длины?
Нет. Перевод должен откатиться, если длины ids и values не совпадают.
TransferBatch всегда означает одну продажу?
Нет. Это событие отражает несколько изменений баланса; цена и причина перевода могут находиться в другом контрактном событии или вне сети.
Как проходит перевод на контракт?
Контракт-получатель вызывается через onERC1155BatchReceived и должен вернуть ожидаемый magic value, иначе safe-перевод откатывается.
Как получить баланс по нескольким ID?
Стандарт предоставляет balanceOfBatch, но результаты также нужно сопоставлять по порядку адресов и token IDs.
Чек-лист: erc-1155 batch transfer: как читать переводы нескольких token id
- сеть и адрес ERC-1155 контракта сверены;
- operator, from и to поняты;
- длины ids и values совпадают;
- каждая пара сопоставлена по индексу;
- порядок событий сохранён;
- mint и burn выделены по нулевой стороне;
- для contract recipient подтверждён batch callback;
- итог сверен с receipt и текущими балансами.
Материал подготовлен редакцией сайта и проверен 12 ноября 2026 года. Условия бирж, кошельков и блокчейн-сетей могут меняться. Перед операцией сверяйте данные в интерфейсе выбранного сервиса.