В КУРСЕ?

Разбираемся в теме

Событие NFT пришло дважды: как автоматизации не перепутать повтор с передачей

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

Идентифицируйте токен вместе с сетью и контрактом

В ERC-721 номер tokenId различает токены внутри соответствующего контракта. Один и тот же номер может встречаться в разных контрактах. Поэтому запись только о токене номер семь не определяет уникальный объект для системы, работающей с несколькими коллекциями или сетями. Для учебного учёта сохраняйте сеть, адрес контракта и номер токена отдельно. Событие Transfer сообщает об изменении владения в рамках стандарта, но его получение не следует путать с ценой, продажей или гарантированной экономической ценностью. Передача может происходить в разных обстоятельствах, а дополнительные выводы требуют других данных.

Храните сообщение и результат его обработки

Если одно и то же событие получено повторно, оно не должно создавать второй самостоятельный результат. Для различения записей полезны данные сети, блока, транзакции и позиции события в журнале. Одного хеша транзакции недостаточно, если она содержит несколько событий. Локальный журнал помогает понять, что уже обработано и на основании каких сведений изменено состояние. При этом повтор одинаковой записи и новое событие о том же токене являются разными случаями. Идентификатор токена не подходит как единственный ключ для удаления дублей: один NFT может законно передаваться много раз.

Учитывайте изменение недавней истории

При реорганизации цепочки ранее полученные журнальные записи могут относиться к блоку, который больше не входит в актуальную ветвь. В уведомлениях о логах предусмотрен признак removed. Его нельзя игнорировать или просто отбрасывать как ещё один дубликат: последствия прежней обработки требуют пересмотра. Также подписка на текущие события не заменяет восстановление пропущенной истории после разрыва соединения. Система должна знать, какой участок проверен, уметь перечитать нужный диапазон и сверить актуальное состояние. Для значимых действий отдельно учитывают окончательность блоков. Учебный наблюдатель не должен автоматически превращаться в систему необратимых финансовых операций.

Попробуйте на практике

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

  1. Создайте условный идентификатор: учебная сеть, контракт К и токен семь. Начальным владельцем назначьте участника А, явно пометив все сведения как вымышленные.
  2. Добавьте событие Е1 о передаче от А к Б и затем повтор того же Е1. Запишите, почему второе получение не является новой передачей и не создаёт дополнительного результата.
  3. Отметьте Е1 как удалённое из актуальной ветви после условной реорганизации. Пересмотрите основанное на нём состояние, вместо того чтобы игнорировать изменение статуса записи.
  4. Добавьте новое событие Е2 актуальной ветви о передаче от А к В. Проверьте итог по последовательности действующих записей и запишите, какие сведения потребовались бы для независимой сверки.

Как проверить результат. Повтор Е1 учтён один раз, его удаление пересмотрено, а итоговый учебный владелец В основан на Е2. Номер токена не использован вместо идентификатора отдельного события.

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

Каждое событие Transfer означает продажу?

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

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

Соединение может прерваться, и подписка не выдаёт автоматически всю пропущенную историю. Нужен отдельный план восстановления и сверки.

Дедупликация решает проблему реорганизации?

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

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

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

Зарегистрироваться
← К списку материалов