Разрешение, которое она не прочитала
Февраль 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 и сохраняйте скриншот списка, чтобы было с чем сравнить. Любое новое одобрение, которое вы не помните, отзывайте в тот же час.