Підпис, який не можна скасувати
Лютий 2025. Київська колекціонерка клацає на рекламу в Twitter — «BAYC сезон 2: безкоштовний клейм». Сайт схожий на OpenSea, просить підключити гаманець і підписати повідомлення «Підтвердити участь у дропі». Це setApprovalForAll на її ERC-721 контракт. Вона підписує.
Через чотири хвилини три Bored Apes, один Pudgy Penguin і один Doodle уходять. Втрата за флором: 137 000 USD.
Що таке setApprovalForAll
Це один виклик на ERC-721 або ERC-1155 контракті, що дає третій адресі право переказувати будь-який NFT цієї колекції, яким ви володієте зараз чи будете володіти в майбутньому — до відкликання. Після схвалення оператор може викликати transferFrom без вашої участі. Підпис у MetaMask не виглядає підозріло — просто адреса контракту і слово «approve».
Три сигнали на екрані підпису
- setApprovalForAll майже ніколи не потрібен для дропу. Реальні дропи використовують функцію
claim(без схвалення) або прямийtransferFromвід проєкту (без підпису). Якщо сторінка клейму просить setApprovalForAll — закривайте вкладку. - Адреса оператора має бути тим контрактом, якому ви довіряєте. Подивіться, кому даєте схвалення. Якщо це випадковий EOA, а не верифікований маркетплейс — це адреса дрейнера.
- MetaMask з версії 11 показує попередження. Червоний банер для high-risk-схвалень. Не натискайте «все одно підписати».
Якщо вже підписали
Терміново на revoke.cash або etherscan.io/tokenapprovalchecker. Підключіть постраждалий гаманець, знайдіть усі схвалення не-маркетплейсам і відкличте. Кожне відкликання коштує 5–15 USD газу. Якщо дрейнер ще не встиг вивести NFT — можна врятувати. Гонка зазвичай 5 хвилин, мобільний застосунок швидший за десктоп.
Постійне правило
Я перевіряю схвалення на revoke.cash раз на місяць. Скриншот минулого списку зберігаю. Будь-яке нове схвалення, якого я свідомо не пам'ятаю — відкликається в той же час.