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

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

Что происходит с сегментом сейчас

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

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

Вторая часть картины — подписи сообщений. Они не стоят платы сети, не попадают в историю операций адреса и потому не воспринимаются как действие. Между тем именно такая подпись чаще всего и есть то «лишнее», о котором идёт речь в теме.

Стандарт ERC-721 описывает два механизма выдачи прав: функцию approve для одного номера и функцию setApprovalForAll для всей коллекции, которая порождает событие ApprovalForAll. Документ создан 24 января 2018 года, статус Final; сверено 16 октября 2026 года по тексту на eips.ethereum.org. Там же оговорено, что контракт обязан допускать нескольких операторов у одного владельца — отмена одного не отменяет остальных.

Как вывести внутриигровые активы за пределы игры и не подписать лишнее

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

Тип запроса Что меняет Нужен ли для вывода
Перенос номера Владельца одного предмета, сразу и необратимо Да, это и есть вывод
Разрешение на один номер Право другого адреса распорядиться одним предметом Иногда, если вывод идёт через посредника
Разрешение на коллекцию Право распорядиться всеми предметами коллекции, бессрочно Нет
Подпись сообщения Ничего в сети; создаёт документ, который предъявят позже Нет

Первая строка отличима по виду окна: в нём есть плата сети и один номер предмета. Третья строка платы тоже требует, но номера в ней нет — право выдаётся на всё сразу. Четвёртая строка платы не требует вовсе, и это главный опознавательный признак: если кошелёк не просит денег за операцию, перед вами не транзакция, а подпись документа, который предъявят контракту позже.

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

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

Как устроена операция технически

Разрешение на коллекцию живёт в контракте как пара «владелец — оператор» со значением «истина». Проверяется оно функцией isApprovedForAll, а разрешение на один номер — функцией getApproved. Обе доступны любому желающему: выданные права публичны и читаются без вашего участия.

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

Подпись сообщения устроена иначе. Стандарт EIP-712 от 12 сентября 2017 года описывает подпись типизированных данных и вводит домен подписи из полей: имя, версия, номер сети, адрес проверяющего контракта и дополнительная соль. В документе сказано, что программа-агент должна отказаться подписывать, если номер сети в домене не совпадает с активной сетью, а подписи разных версий домена между собой несовместимы.

  1. Прочитайте в окне, есть ли в запросе плата сети. Нет платы — это подпись документа, и отклонить её безопасно: вывод от этого не сорвётся.
  2. Найдите в запросе номер предмета. Перенос и одиночное разрешение всегда называют конкретный номер, разрешение на коллекцию номера не содержит.
  3. Сверьте адрес, которому выдаётся право, с адресом контракта коллекции и с доменом игры. Незнакомый адрес оператора — достаточная причина отклонить запрос.
  4. Подпишите только перенос нужного номера. Если игра настаивает на разрешении, запросите у поддержки объяснение, зачем ей право на остальные предметы.
  5. После вывода проверьте выданные разрешения по своему адресу и отзовите ненужные. Отзыв — такая же операция с платой сети, как и выдача.

Издержки: комиссии, роялти, газ

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

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

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

Риски и мошеннические схемы сегмента

Схемы здесь не взламывают кошелёк. Они получают согласие.

Первая: «подтвердите владение для входа». Человеку предлагают подписать сообщение, чтобы доказать, что адрес его. Такая подпись бывает законной частью входа, но под её видом подсовывают документ, который разрешает распорядиться предметами. Отличить помогает чтение содержимого запроса: в окне видны поля типизированных данных, включая адрес проверяющего контракта и номер сети, и несовпадение любого из них — повод остановиться.

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

Третья схема рассчитана на усталость. Игровой сайт просит подпись при каждом действии, человек привыкает нажимать «подтвердить» и пропускает единственный запрос другого типа. Защита механическая: читать тип запроса, а не доверять ритму. Чаще всего лишние запросы попадаются тем, кто решил участвовать в бесплатной раздаче предметов на незнакомом сайте. Сопоставимая логика работает и там, где токен даёт права на участие, — об этом в разборе про фан-токены клубов и модель участия болельщиков.

Итог

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

Механика прав описана в первоисточниках коротко и ясно. Функции выдачи и проверки разрешений изложены в спецификации ERC-721 на eips.ethereum.org, а устройство подписи типизированных данных с доменом и номером сети — в стандарте EIP-712 о подписи структурированных данных.

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

Как понять, что у меня просят разрешение на всю коллекцию?

В запросе нет номера предмета, зато есть плата сети и адрес, которому выдаётся право. Название метода в подробностях окна содержит упоминание разрешения для всех. Если номер предмета не назван, а операция платная, перед вами запрос на коллекцию целиком. Отклоните и уточните у поддержки.

Я подписал сообщение. Можно ли отозвать такую подпись?

Саму подпись отменить нельзя: она уже существует у получателя. Отменяется её действие. Для этого снимают разрешение оператору, без которого документ неисполним, или пользуются механизмом отмены ордера в самом контракте. Проверьте выданные разрешения по своему адресу в первую очередь.

Сколько разрешений может быть у одного адреса?

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

Разрешение истекает само через какое-то время?

Разрешение на коллекцию не истекает. Оно держится до встречной операции с вашей подписью. Одиночное разрешение на номер сбрасывается при любом переносе этого предмета — так описано в стандарте. На бессрочное право оператора это правило не распространяется.

Вердикт

Разница между выводом предмета и выдачей права на коллекцию — одна строка в окне подтверждения, и цена этой строки несопоставима. Из редакционной практики: почти все потери предметов, о которых пишут читатели, оформлены их собственной подписью под запросом, который они не прочитали и не собирались читать. Чтение занимает секунды, отзыв — отдельную операцию с платой, а восстановление не предусмотрено вовсе.

Разборы запросов на подпись и наблюдения редакции — в нашем Telegram-канале.