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

Разбираем, почему разрешение NFT-маркетплейсу сохраняется после закрытия и как отозвать setApprovalForAll для защиты криптокошелька.

Короткий ответ: закрытие маркетплейса не отменяет доступ к NFT

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

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

Собственность на NFT и право им перемещать — разные вещи

В ERC-721 владелец и оператор — не одно и то же. Владельцем NFT остается адрес, указанный в смарт-контракте коллекции. Разрешение маркетплейсу не передает ему токен автоматически, не делает площадку собственником и само по себе не меняет запись о владельце.

Однако одобренный оператор получает техническое право инициировать перевод NFT в пределах выданных полномочий. Для этого контракт оператора может вызвать функции transferFrom или safeTransferFrom. Именно такой механизм позволяет площадке исполнять сделку без отдельного подтверждения владельца в момент продажи.

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

approve и setApprovalForAll: два типа одобрений ERC-721

В ERC-721 предусмотрены два основных режима доступа. Функция approve назначает оператора для конкретного NFT, определяемого по tokenId. Такое разрешение ограничено одним токеном: оно не распространяется автоматически на другие NFT той же коллекции.

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

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

Почему удаление сервиса не выключает смарт-контракт

Разрешение на управление NFT появляется после отдельной транзакции пользователя. Она изменяет состояние ERC-721-контракта в блокчейне: в нем фиксируется, какой адрес оператора получил полномочия. Эта запись существует независимо от сайта и приложения маркетплейса.

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

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

Пример: листинг NFT пережил саму площадку

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

  1. Через два года маркетплейс прекращает работу, его сайт и приложение становятся недоступны.
  2. Закрытие площадки не меняет состояние контракта коллекции: адрес прежнего оператора по-прежнему указан как одобренный.
  3. Если в коде оператора обнаружится уязвимость, его ключи будут скомпрометированы или контроль над контрактом перейдет к посторонним, сохраненное разрешение может позволить перевести NFT.
  4. Новая подпись владельца для такого перевода может не понадобиться: необходимые полномочия были выданы при создании листинга.

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

Актуальный контекст: что показывает случай Payment Processor V2

Случай Payment Processor V2 иллюстрирует системный риск: практическую силу могут сохранять ранее выданные устаревшие одобрения NFT, даже если пользователи не подписывали новых транзакций. В публикациях об эпизоде сообщалось о whitehat-перемещении 23 155 NFT оценочной стоимостью более $5,7 млн.

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

Как проверить активные разрешения на управление NFT

Начните с определения сети, в которой находится NFT: разрешения в Ethereum и других сетях учитываются раздельно. Затем откройте официальный обозреватель нужной сети или проверенный сервис аудита approvals и вставьте публичный адрес кошелька. Для просмотра данных seed-фраза, приватный ключ и пароль от кошелька не нужны.

  1. Найдите в списке разрешений интересующую коллекцию.
  2. Сверьте адрес NFT-контракта: он обозначает саму коллекцию, а не маркетплейс.
  3. Проверьте адрес оператора — контракта или аккаунта, которому разрешено перемещать токены.
  4. Откройте исходную транзакцию и изучите дату, сеть и выданные полномочия.

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

Перед проверкой: как не попасть на фишинговый сервис

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

  • Никогда не вводите seed-фразу или приватный ключ: для аудита NFT approvals они не нужны.
  • Не подписывайте непонятные сообщения и транзакции.
  • По возможности просматривайте данные по публичному адресу без подключения кошелька.

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

Как отозвать разрешение через сервис approvals

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

  1. Найдите нужную коллекцию и сопоставьте адрес ее контракта с данными обозревателя блокчейна.
  2. Выберите конкретного оператора, доступ которого требуется закрыть.
  3. Нажмите Revoke и внимательно изучите запрос кошелька.
  4. Убедитесь, что сервис отменяет setApprovalForAll для выбранного оператора либо сбрасывает approve только для указанного tokenId.
  5. Подтвердите транзакцию и после ее включения в блок повторно проверьте статус разрешения.

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

Как отменить approve или setApprovalForAll через обозреватель блокчейна

Более технический способ — обратиться к верифицированному контракту NFT-коллекции через обозреватель нужной сети. Найдите официальный адрес коллекции, откройте раздел записи в контракт (обычно Write Contract) и подключите кошелек. Адрес следует брать из официальной документации проекта, а не из случайного сообщения или поисковой рекламы.

  • Для отдельного NFT: вызовите approve, указав нулевой адрес 0x0000000000000000000000000000000000000000 и соответствующий tokenId. Так сбрасывается оператор, ранее назначенный для этого токена.
  • Для всей коллекции: вызовите setApprovalForAll, передав адрес прежнего оператора и значение false. Это отключит его полномочия для NFT владельца только в рамках данного контракта коллекции.

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

Почему за отзыв нужна комиссия и что проверить перед подписью

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

Перед подписью проверьте:

  • правильно ли выбрана сеть;
  • совпадает ли адрес контракта NFT-коллекции;
  • верно ли указан адрес оператора;
  • установлен ли параметр false для setApprovalForAll либо нулевой адрес для approve;
  • приемлем ли размер комиссии.

Не стоит массово отзывать NFT approvals без проверки: можно отключить нужные листинги и интеграции, а затем заплатить еще раз за повторную выдачу доступа.

Какие последствия будут после отзыва

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

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

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

Когда одного отзыва недостаточно: действия при компрометации

Отзыв разрешения закрывает только конкретный доступ оператора к NFT. Если злоумышленник получил seed-фразу или приватный ключ, он может действовать от имени самого владельца: подписывать транзакции, переводить токены и выдавать новые approvals. В таком случае revoke не устраняет основную угрозу.

При подозрении на компрометацию приоритет действий следующий:

  1. Создать новый кошелек на безопасном устройстве и сохранить новую seed-фразу офлайн.
  2. Как можно быстрее перевести на него оставшиеся NFT и другие активы, учитывая комиссию сети.
  3. Прекратить подключать и использовать старый адрес для хранения средств.
  4. После защиты активов проверить историю транзакций и активные разрешения старого кошелька.

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

Регулярный аудит разрешений: практический минимум

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

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

setApprovalForAll само по себе не указывает на мошенничество: это стандартный и удобный механизм ERC-721. Однако он дает широкие права в пределах конкретной коллекции, поэтому требует регулярного и осознанного контроля.

Источники

  • Ethereum Improvement Proposals — ERC-721: Non-Fungible Token Standard (2018-01-24)
  • OpenZeppelin — ERC721 — Contracts 5.x API
  • Ethereum.org — Scam help & reporting
  • Ethereum Improvement Proposals — ERC-6464: Multi-operator, per-token ERC-721 approvals (2022-09-16)
  • The Crypto Times — Limit Break NFT Exploit: Yuga Labs' Quit Rescues 23,155 NFTs, Says 660 WETH Lost (2026-09-25)