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 — «тонкая дверь» между вашим балансом и внешним кодом. Безопасность достигается дисциплиной: минимальные лимиты, проверка адресов на устройстве, регулярный отзыв лишних разрешений и разделение кошельков по задачам.