Материал проверен 12 ноября 2026?
БК

ГЛАВНАЯ / ИНСТРУКЦИИ / ERC-1155 BATCH TRANSFER: КАК ЧИТАТЬ ПЕРЕВОДЫ НЕСКОЛЬКИХ TOKEN ID

ERC-1155 batch transfer: как читать переводы нескольких token ID

ERC-1155 позволяет одному контракту учитывать разные token ID и количества, а safeBatchTransferFrom – передавать несколько пар за один вызов. В массиве ids перечислены типы токенов, а соответствующее значение для каждой позиции находится в values с тем же индексом. TransferBatch показывает оператора, отправителя, получателя и эти массивы. Проверяйте пары по порядку, а не складывайте значения в один общий баланс: ID могут обозначать разные активы.

Модель ERC-1155

Один контракт может вести много типов и количеств токенов

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

safeBatchTransferFrom передаёт arrays ids и values. Для каждой позиции i сумма values[i] относится к типу ids[i]. Длины должны совпадать. Стандарт требует применять изменения и отражать их в event logs в том порядке, в каком пары переданы. Не сортируйте список при чтении и не переставляйте его элементы независимо друг от друга.

  • длины ids и values совпадают
  • пары сопоставлены по индексу
  • from и to проверены
TransferBatch

Событие читается как список пар внутри одного перехода

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КоличествоИнтерпретация
0ids[0]values[0]Первая пара
1ids[1]values[1]Вторая пара
iids[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 у разных контрактов.

FAQ

Частые вопросы

Что означают 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 года. Условия бирж, кошельков и блокчейн-сетей могут меняться. Перед операцией сверяйте данные в интерфейсе выбранного сервиса.