coinomico

Простой и безопасный старт в криптовалюте.

Колонку ведёт Демид Красильников

Отозвал апрувы в MetaMask после покупки NFT: личный урок

Покупка NFT — это не «раз — и картинка в кошельке». Каждый раз, когда вы подписываете сделку на маркетплейсе, вы параллельно выдаёте смарт-контракту площадки разрешение SetApprovalForAll.

Демид Красильников, Обозреватель и гид по криптограмотности·Обновлено: 28 июня 2026 г.·9 мин

Отозвал апрувы в MetaMask после покупки NFT: личный урок

Контракт получает право распоряжаться вашими токенами стандарта ERC-721 или ERC-1155: продать, передать на любой адрес, в некоторых реализациях — заблокировать. Это не теория из учебника, это конкретный приказ вашему кошельку, который действует до тех пор, пока вы его не отзовёте.

Я проверял эту механику на своих деньгах. После одной тестовой сделки на небольшом маркетплейсе я не отозвал апрув — побоялся платить лишний газ, подумал «это же маленький контракт, кому он нужен». Через четыре недели этот контракт подвергся компрометации, и я увидел входящую транзакцию, которая пыталась перевести все мои NFT на сторонний адрес. Спасло то, что я не хранил там крупные суммы. Везение — скверный метод риск-менеджмента, но тогда отделался лёгким испугом.

Дальше — разбор по базе: что такое SetApprovalForAll, почему покупка NFT автоматически выдаёт доверенность, как увидеть выданные разрешения и отозвать их правильно.

SetApprovalForAll: как работает механизм делегирования прав

В сети Ethereum у каждого NFT есть два ключевых стандарта: ERC-721 (один токен = один уникальный актив) и ERC-1155 (полу-взаимозаменяемый, часто используется в играх и крупных коллекциях). В обоих стандартах есть функция setApprovalForAll — это метод, которым вы говорите контракту: «Эй, вот этот оператор может делать с моими токенами этого контракта всё что угодно от моего имени».

Представьте, что вы сдали ключ от банковской ячейки управляющей компании с формулировкой «можете забирать содержимое, когда сочтёте нужным». Доступ бессрочный, отзывается только отдельным заявлением. ERC-20 использует похожий, но более гибкий механизм через функцию approve — там вы указываете сумму, на которую разрешаете тратить. ERC-721 работает грубее: либо всё, либо ничего. true означает полный доступ, false — отзыв.

Важный нюанс, который путает новичков: апрув выдаётся не конкретному человеку, а конкретному смарт-контракту. Маркетплейс OpenSea — это набор контрактов с разными адресами (Seaport, Wyvern, старые версии). Каждый из них получает свой апрув. Если разработчики проекта обновляют контракт через прокси-механизм (а это распространённая практика в NFT), адрес остаётся прежним, но логика меняется. Ваш старый апрув продолжает действовать.

Апрув — это не подтверждение покупки. Это постоянное разрешение, которое действует до явного отзыва. Забыли отозвать — и любой, кто получит контроль над контрактом-оператором, получит контроль над вашими токенами.

Почему покупка NFT — это не только транзакция, но и выдача доверенности

Когда вы покупаете NFT через OpenSea, Blur, Magic Eden или любой другой крупный маркетплейс, под капотом происходит следующее: смарт-контракт маркетплейса вызывает setApprovalForAll от вашего имени. Это заложено в логику протокола — без этого механизма продавец не сможет автоматически снять ваш NFT при получении оплаты. Казалось бы, оправданно. Проблема в том, что вы подписываете эту транзакцию глазами, не понимая её смысла. В MetaMask всплывает окно с суммой, газом и кнопкой «Подтвердить». Визуально оно не отличается от обычной оплаты.

Что именно получает маркетплейс после вашего «Подтвердить»:

  • Право передачи любого вашего NFT на любой адрес. Контракт-оператор может инициировать транзакцию transferFrom от вашего имени. Без вашего участия. Без дополнительных подписей.
  • Право продажи через собственный протокол. Маркетплейс может выставить ваш NFT на вторичку, продать его, и вы получите деньги на свой же кошелёк. Вроде ничего криминального, но это происходит без уведомления.
  • Доступ остаётся навсегда. Если вы купили NFT в 2022 году на Wyvern v1, а потом этот контракт признали устаревшим — апрув всё ещё висит. И если кто-то найдёт уязвимость в этом контракте, ваш токен уязвим.

Хуже того, фишинговые сайты маскируются под маркетплейсы и просят подписать тот же апрув, но на адрес мошенника. Открыли ссылку из Telegram, нажали «Mint» — и выдали доверенность не маркетплейсу, а скамеру. Дальше — стандартный сценарий: ночью ваш дорогой NFT уходит в никуда, и транзакция необратима.

Инструментарий для аудита: как увидеть все активные разрешения

Прежде чем что-то отзывать, нужно увидеть, что именно у вас «висит». Долгое время у MetaMask не было штатного инструмента для этого — приходилось лезть в сторонние сервисы. В 2023 году MetaMask добавил встроенный раздел, но работает он пока ограниченно. Поэтому практики используют связку из нескольких сервисов.

MetaMask Portfolio → Permissions (встроенный). Заходите в расширение, открываете Portfolio, переходите во вкладку «Permissions» или «Approvals». Показывает базовые апрувы для активов в вашем кошельке. Удобно для новичков, но неполно — отображает только часть сетей и не все типы разрешений.

Revoke.cash. Классика. Сайт показывает все апрувы с разбивкой по сетям: Ethereum, BNB Chain, Polygon, Arbitrum и другим. Подключаете кошелёк, видите таблицу с колонками «Контракт», «Тип разрешения», «Сумма или All», «Сеть». Для каждой строки — кнопка «Revoke». Самый понятный интерфейс для новичка, есть подсказки и предупреждения. Газ за отзыв платите сами — это обычная транзакция.

Etherscan → Token Approval (для Ethereum). Заходите на etherscan.io, вставляете свой адрес кошелька, переходите в раздел «Token Approvals» (прямая ссылка появляется автоматически). Видите те же апрувы, что и в Revoke, но с большей детализацией: дата выдачи, последняя транзакция по этому разрешению. Подходит тем, кто хочет копнуть глубже.

Beefy Allowance (allowance.beefy.finance). Альтернатива от команды Beefy Finance, тоже показывает апрувы в нескольких сетях. Интерфейс аскетичный, но функционально не уступает.

СервисСетиСтоимость проверкиДополнительная аналитикаУдобство для новичка
MetaMask (Portfolio)Ethereum, BSC и другие (постепенно расширяют)Бесплатно, газ только за отзывМинимальнаяВысокое
Revoke.cashБолее 20 сетейГаз только за отзывХорошая, с историейВысокое
Etherscan Token ApprovalEthereum mainnetГаз только за отзывМаксимальнаяСреднее
Beefy AllowanceНесколько сетейГаз только за отзывБазоваяСреднее

Я проверяю себя раз в две-три недели по двум сервисам: Revoke.cash для общей картины, Etherscan для аудита самых крупных активов. Перекрёстная проверка ловит глюки и несовпадения.

Пошаговый алгоритм отзыва: от Revoke.cash до Etherscan

Сам по себе отзыв — это та же транзакция в сети, только с нулевым или минимальным переводом. Платите только газ. Алгоритм выглядит так:

1. Подготовка кошелька. Убедитесь, что у вас есть немного ETH (или нативного токена сети) на оплату газа. Отзыв одного апрува стоит обычно от $0.5 до $3 в Ethereum mainnet в спокойное время, в часы пик бывает $10–$20. Если собрались чистить 20 разрешений подряд — закладывайте $30–$50.

2. Открываем Revoke.cash и подключаем кошелёк. Перейдите на revoke.cash, нажмите «Connect Wallet» (только прямой сайт, не через WalletConnect с рандомного домена). Выберите MetaMask. Подтвердите подключение в окне расширения.

3. Изучаем список. Сервис запросит разрешение только на чтение — подписи транзакций на этом этапе не нужны. Видите список всех контрактов, которым вы когда-либо выдавали доступ. Красным обычно подсвечиваются апрувы без лимита (Unlimited или MaxUint256) — это самые опасные, отзывайте в первую очередь.

4. Отзываем по одному. Нажимаете «Revoke» рядом с нужной строкой. Откроется окно MetaMask с параметрами транзакции: адрес контракта, функция, газ. Проверяйте, что функция действительно setApprovalForAll или approve со значением 0 (или false). Жмёте «Подтвердить».

5. Проверяем результат. После подтверждения транзакция уходит в сеть. Через 30 секунд — 5 минут (зависит от нагрузки сети) апрув должен исчезнуть из списка или его allowance (значение доступного лимита) станет равно нулю. Проверяете визуально на странице Revoke, дублируете через Etherscan, если нужно подтверждение.

6. Не забываем про чек-лист:

  • Все «безлимитные» апрувы отозваны в первую очередь.
  • После крупных сделок (покупка дорогого NFT, выход из пула, обмен через DEX) — чистка в тот же день.
  • Апрувы на суммы, которые вы уже потратили и больше не нужны, — отзываются все.
  • Оставлены только те разрешения, которые вы планируете использовать в ближайшие дни (например, апрув на DEX, через который торгуете каждый день).
Я отзываю апрувы не потому, что параноик. Я отзываю их потому, что цена ошибки в крипте — это весь мой счёт в этой строке. А отзыв стоит меньше чашки кофе.

Границы защиты: почему отзыв апрувов не спасает при утечке сид-фразы

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

Если сид-фраза (12 или 24 слова, которые генерируются при создании кошелька) утекла — отзыв апрувов бесполезен. Злоумышленник с доступом к фразе может сам вызвать setApprovalForAll с любого оператора за несколько секунд. Он просто оформит новый апрув, выведет активы и уйдёт. Ваш отзыв погоды не сделает, потому что в его руках полный контроль.

Отзыв апрувов спасает в трёх сценариях:

  • Вы подписали что-то подозрительное и хотите откатить «доверие». Подписали setApprovalForAll на фишинговом сайте, поняли через минуту — отзывайте сразу.
  • Контракт маркетплейса, которым вы пользовались раньше, был скомпрометирован. Уязвимость на стороне проекта — ваш отзыв закрывает ваш конкретный кошелёк от атаки.
  • Маркетплейс закрылся или вы им больше не пользуетесь. Зачем оставлять разрешение контракту, который больше не работает?

Отзыв апрувов не спасает:

  • При утечке сид-фразы или приватного ключа. Контроль над кошельком = контроль над всеми будущими транзакциями, в том числе новыми апрувами.
  • При компрометации самого устройства. Если на компьютере сидит кейлоггер или вредоносное расширение в браузере — оно может подписать что угодно уже после вашего отзыва.
  • При подписании мошеннической транзакции, не связанной с апрувами. Например, transferFrom напрямую или подпись транзакции, которая выглядит как отзыв, но на деле — перевод активов.

Поэтому отзыв — это гигиена, а не серебряная пуля. Он снижает поверхность атаки, но не отменяет необходимость хранить сид-фразу в аппаратном кошельке (Ledger, Trezor), не вводить её на сайтах и не светить на скриншотах.

Как встроить отзыв в риск-менеджмент на постоянку

Я выработал для себя простое правило: после любой значимой сделки — чистка. Значимая — это покупка NFT стоимостью от $100, обмен через DEX крупной суммы, выход из пула ликвидности, покупка токена через новый для меня протокол. Не «вспомнил через полгода», а в тот же вечер или на следующий день. Занимает 10–15 минут, стоит копейки, снимает 90% нервных реакций вида «ой, а это нормально, что контракт X требует подписи?»

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

Если вы только начинаете осваивать крипту и у вас пока нет системного понимания, как устроены эти процессы, имеет смысл подойти к вопросу через структурированное обучение — базовые курсы длятся несколько недель и сразу закрывают дыры в понимании типа апрувов, газа, ликвидности и риск-менеджмента. Например, на Ursday Education собирают подборки образовательных программ для тех, кто хочет разобраться в крипте с нуля, а не по верхам из Telegram-каналов. Собственно, у меня и был личный урок — как проверить, что после первой крупной сделки в кошельке не осталось открытых дверей для старых контрактов. Этот навык входит в базу любого, кто планирует держать в крипте больше символической суммы.

Главный принцип простой: чем меньше «открытых дверей» в вашем кошельке, тем меньше сценариев, при которых вы теряете деньги. Отзыв апрувов — это закрытие дверей, которые вы сами открыли в моменте и забыли про них. Регулярная гигиена дешевле одного крупного слива — проверено на собственных нервах.

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

Что такое SetApprovalForAll в MetaMask?
Это метод смарт-контракта, который дает оператору право распоряжаться вашими токенами стандарта ERC-721 или ERC-1155 от вашего имени.
Почему после покупки NFT нужно отзывать разрешения?
Апрув — это постоянное разрешение, которое действует до явного отзыва. Если контракт маркетплейса будет взломан, злоумышленники смогут получить доступ к вашим токенам.
Как проверить, какие разрешения выданы моему кошельку?
Для аудита можно использовать встроенный раздел Permissions в MetaMask Portfolio, сервис Revoke.cash или раздел Token Approvals на Etherscan.
Сколько стоит отзыв апрува?
Отзыв — это обычная транзакция в сети, за которую вы платите газ. В сети Ethereum стоимость операции обычно варьируется от $0.5 до $20 в зависимости от нагрузки на сеть.
Поможет ли отзыв апрувов, если мою сид-фразу украли?
Нет, отзыв бесполезен при утечке сид-фразы, так как злоумышленник с полным контролем над кошельком может в любой момент выпустить новые разрешения.