Approvals в кошельках — безопасная работа с разрешениями

Approvals — это разрешения на списание или управление вашими токенами, которые вы выдаёте смарт-контрактам (биржевым роутерам, стейкинг-пулу, NFT-маркетплейсу и т. п.). Правильно настроенные разрешения упрощают работу с DeFi/NFT, но ошибка в approval способна дать злоумышленнику доступ к активам. Ниже — базовая модель, типовые риски и практические правила.

Базовые моменты

ERC-20 approve → allowance. Вы разрешаете конкретному «spender» (адресу контракта) списывать ваши определённые токены до лимита. Часто просят «бесконечный» лимит для удобства.

ERC-721/1155 setApprovalForAll. Для NFT это глобальное разрешение «на всё» коллекции: выбранный оператор может перемещать/листить все токены коллекции.

Подпись ≠ передача. Подключение кошелька к сайту не даёт права списания; его даёт именно транзакция approve/setApprovalForAll или подпись специального сообщения (см. ниже).

permit (off-chain подпись). Некоторые токены принимают разрешение через подпись сообщения без ончейн-транзакции; контракт-spender затем «использует» эту подпись ончейн. Удобно, но требует внимание к домену/сроку/chain id.

Отзыв разрешения. Allowance можно обнулить (ERC-20 — approve(spender, 0)), для NFT — снять флажок ApprovalForAll. Это стандартная практика гигиены.

Как это работает (по шагам)

Выбор действия. На DEX нажимаете «Swap» впервые для конкретного токена — интерфейс предложит «Разрешить токен».

Проверка деталей. Кошелёк показывает адрес spender (роутер/контракт), токен и лимит (часто — «неограниченно»).

Подтверждение. Вы подписываете и отправляете транзакцию approve (или сообщение permit).

Исполнение. Позже DEX выполняет transferFrom() в пределах лимита, когда вы делаете своп/депозит.

Отзыв/ограничение. После завершения сценария лимит можно снизить до «нужного на один раз» или обнулить.

Тип разрешения Что именно разрешает Что проверять перед подтверждением
ERC-20 approve Списание указанного количества токенов этим контрактом Адрес spender, точный лимит (избегайте «∞», где возможно)
ERC-20 permit То же, но через подпись off-chain Домен/chain id, дедлайн подписи, адрес токена и spender
ERC-721/1155 setApprovalForAll Полный доступ оператору к NFT коллекции Оператор (маркетплейс) — именно официальный адрес? Нужна ли глобальная галка?

Риски и векторы атак

Риск Где проявляется Как снижать
Бесконечный allowance DEX/роутеры, стейкинг-пулы Выдавайте ограниченный лимит под конкретную операцию; после — обнуляйте
Злой интерфейс/фишинг Поддельные сайты/расширения Открывайте dApp из надёжных источников; проверяйте адрес spender в кошельке
Подмена токена Контракт-клон с похожим именем Проверяйте адрес токена и spender, а не название
ApprovalForAll у NFT Маркетплейсы/бриджи NFT Давайте доступ только на время листинга; снимайте после сделки
Злоупотребление permit Подписали вне кошелька/без экрана устройства Подписывайте на аппаратном устройстве; проверяйте домен, дедлайн, chain id
Апгрейдируемые прокси Контракт-spender сменил логику Изучайте права админа, timelock/мультисиг у проекта; держите лимиты малыми
Кросс-чейн сценарии Мосты/обёртки требуют approvals Используйте надёжные мосты, лимитируйте суммы, см. безопасность мостов

Практика / чек-лист

Понимайте «кто такой spender». Это не сайт, а адрес смарт-контракта (роутер DEX, стейкинг-пул, маркетплейс).

Меньше — лучше. Ставьте «ровно под операцию» вместо «∞». Где UI не даёт — после операции обнуляйте allowance.

Подписывайте на устройстве. Проверяйте адреса токена/spender и лимит на экране аппаратного кошелька.

Разделяйте кошельки. Отдельный кошелёк для активных dApp и отдельный — для долгосрока/резервов (self-custody).

Регулярный аудит разрешений. Периодически просматривайте и отзывайте лишние approvals; особенно после «фарминга»/тестов новых dApp.

Осторожно с NFT-галкой. ApprovalForAll — это полный доступ к коллекции. Снимайте флаг сразу после продажи/листинга.

Сроки для permit. Старайтесь подписывать permit со внятным дедлайном, а не «без срока».

Мосты и L2. На L2/бриджах approvals отдельные — лимитируйте суммы и время, см. Layer 2 и мосты.

Частые вопросы (FAQ)

Подключение кошелька к сайту опасно? Само подключение — нет. Опасность в выдаче approve/ApprovalForAll или подписи permit «вслепую».

Почему DEX просит «неограниченный» лимит? Для удобства многократных свопов без повторных транзакций. Безопаснее — разовый лимит и последующий отзыв.

Можно ли отозвать permit? Саму подпись «откатить» нельзя, но можно повысить nonce/обнулить allowance ончейн — фактически лишить spender права списания.

Как понять, что spender — официальный? Сверяйте адреса токена и контракта-spender в кошельке; избегайте ссылок из поисковой рекламы/поддельных доменов.

Нужно ли KYC для отзывов? Нет. Это ончейн-операции в вашем кошельке; для биржевых переводов/фиата см. KYC.

Вывод

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

См. также

Смарт-контракт

Аппаратный кошелёк

Self-custody

Мультиподпись

Self-custody vs биржа

Безопасность мостов

Layer 2

Ethereum

Task Runner