Дозвіл, який вона не прочитала

Лютий 2025. Колекціонерка з Києва натискає рекламу в X (Twitter): «BAYC сезон 2: отримайте безкоштовно». Сайт схожий на OpenSea, просить підключити гаманець і показує запит «Підтвердити участь в ейрдропі». Це не безневинний підпис, а транзакція setApprovalForAll для контракту її Bored Ape, а слідом сайт підсовує такий самий запит для кожної іншої її колекції. Вона все підтверджує.

Через чотири хвилини три Bored Ape, один Pudgy Penguin і один Doodle залишають її гаманець.

Що таке setApprovalForAll

Це один виклик контракту ERC-721 чи ERC-1155, що дає сторонній адресі право переказувати будь-який NFT цієї колекції, який належить вам зараз чи належатиме в майбутньому, — аж до відкликання. Після цього оператор може викликати transferFrom без вашої участі. У гаманці це просто ще одна кнопка «Підтвердити». Якщо не зупинитися на рядку, де сказано, що сайт хоче доступ до всіх ваших NFT цієї колекції, запит виглядає буденно.

Три сигнали на екрані підпису

  • Для ейрдропу setApprovalForAll майже ніколи не потрібен. Справжні ейрдропи роздають або через Merkle-отримання (ви надсилаєте транзакцію з викликом claim, жодного дозволу не треба), або переказом із гаманця самого проєкту (ви нічого не підписуєте). Якщо сторінка отримання просить setApprovalForAll, закривайте вкладку.
  • Адреса оператора має бути контрактом, якому ви довіряєте. Подивіться, кому надаєте дозвіл. Для OpenSea це контракт Conduit, указаний в офіційній документації OpenSea. Випадкова звичайна адреса (EOA) або неверифікований контракт, який не вдається знайти в документації маркетплейсу, — це дрейнер.
  • Не ігноруйте попереджень гаманця. MetaMask позначає багато ризикованих дозволів червоним попередженням. Не проклацуйте його — і не вважайте відсутність попередження зеленим світлом.

Якщо вже підписали

Негайно відкрийте revoke.cash або etherscan.io/tokenapprovalchecker. Підключіть уражений гаманець, знайдіть усі дозволи, видані не маркетплейсам, і відкличте їх. Кожне відкликання — окрема транзакція з комісією за газ, тож залиште в гаманці трохи ETH. Якщо дрейнер ще не встиг вивести NFT, їх можна врятувати. Часто ця гонка вирішується за лічені хвилини.

Правило на постійно

Перевіряйте дозволи на revoke.cash раз на місяць і зберігайте знімок екрана з минулим списком. Будь-який новий дозвіл, якого ви свідомо не пам'ятаєте, відкликайте одразу.