Разрешение, которое она не прочитала

Февраль 2025. Жительница Риги кликает на рекламу в Twitter — «BAYC сезон 2: бесплатный клейм». Сайт похож на OpenSea, просит подключить кошелёк и выводит запрос «Подтвердить участие в дропе». Это не безобидная подпись, а транзакция setApprovalForAll на контракт её Bored Apes, и следом сайт выдаёт такой же запрос по каждой из остальных её коллекций. Она подтверждает все.

Через четыре минуты три Bored Apes, один Pudgy Penguin и один Doodle уходят из кошелька.

Что такое setApprovalForAll

Это один вызов на ERC-721 или ERC-1155 контракте, который даёт третьему адресу право переводить любой NFT этой коллекции, которым вы владеете сейчас или будете владеть в будущем — до отзыва. После одобрения оператор может вызвать transferFrom без вашего участия. В кошельке это просто ещё одна кнопка «Подтвердить». Если не задержаться на строке о том, что сайт получает доступ ко всем вашим NFT этой коллекции, запрос выглядит рутинным.

Три сигнала на экране подписи

  • setApprovalForAll почти никогда не нужен для дропа. Реальные дропы используют функцию claim (без одобрения) или прямой transferFrom от проекта (без подписи). Если страница клейма просит setApprovalForAll — закрывайте вкладку.
  • Адрес оператора должен быть тем контрактом, которому вы доверяете. Посмотрите, кому даёте одобрение. Для OpenSea это Conduit-контракт, указанный в официальной документации OpenSea. Обычный кошелёк (EOA) или непроверенный контракт, который не находится в документации маркетплейса, — это дрейнер.
  • Не игнорируйте предупреждение кошелька. MetaMask помечает многие рискованные одобрения красным предупреждением безопасности. Не прокликивайте его — но и отсутствие предупреждения не считайте зелёным светом.

Если уже подписали

Срочно на revoke.cash или etherscan.io/tokenapprovalchecker. Подключите пострадавший кошелёк, найдите все одобрения не-маркетплейсам и отзовите. Каждый отзыв — это транзакция с оплатой газа, так что оставьте на кошельке немного ETH. Если дрейнер ещё не успел вывести NFT — их можно спасти. Счёт обычно идёт на минуты.

Постоянное правило

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