Безлимитный approve позволяет spender-контракту переводить указанный токен до чрезвычайно высокого лимита без нового запроса каждый раз. Если spender вредоносен или скомпрометирован, под угрозой остаётся текущий и будущий баланс токена до отзыва разрешения.
Порядок действий#
- Проверяйте spender-адрес, а не только название приложения. Сверяйте контракт, сеть и версию с официальной документацией, открытой независимо. Знакомый логотип или метка в интерфейсе не доказывают подлинность адреса.
- Разрешайте точную сумму, если интерфейс позволяет. Выдавайте только количество, необходимое для планируемой операции, и подтвердите итоговый allowance в обозревателе. Не выбирайте максимальное значение только ради экономии будущего газа.
- Используйте транзакционный кошелёк с ограниченным балансом. Отделите сбережения и ценные NFT от DeFi-активности. Тогда ошибочное разрешение не затронет активы, которые не нужны протоколу.
- После разового действия просматривайте allowances. Проверьте токен, spender, лимит и сеть через надёжный обозреватель или официальный инструмент. Удаляйте ненужные разрешения после завершения задачи.
- Отзывайте старые разрешения во всех активных сетях. Каждая сеть хранит состояние отдельно, а отзыв является ончейн-транзакцией и требует газа. Убедитесь в подтверждении по блокчейну, а не только по интерфейсу сайта.
Главная идея#
Удобство сохраняется дольше одного swap. Пользователь забывает allowance, а приложение обновляется, теряет административный ключ или переживает взлом фронтенда.
Разрешение относится к конкретной комбинации владельца, токена и spender в определённой сети. Нулевой баланс не удаляет его: токены, поступившие позднее, снова могут стать доступными контракту в пределах старого лимита.
Опасность возникает не только у заведомо вредоносного проекта. Легитимный роутер может быть обновлён, его ключи — скомпрометированы, а пользовательский интерфейс — подменён, пока прежний approve продолжает действовать.
Когда изменить подход#
Сравните удобство с максимальной потерей. Повторные ограниченные approve стоят дополнительного газа, но ограничивают ущерб и создают момент повторной проверки.
Если интерфейс не позволяет задать разумный лимит или адрес spender невозможно подтвердить, не продолжайте с основного кошелька. Выберите другой сервис либо используйте отдельный кошелёк только с нужной суммой.
Учитывайте стоимость отзыва, но не позволяйте комиссии скрыть размер потенциальной потери. Для небольшого остатка разумным решением иногда будет перенести активы на чистый адрес и больше не пополнять старый, однако allowance на старом адресе от этого не исчезает. При пакетной проверке сначала убедитесь, что инструмент показывает правильную сеть и реальные spender-адреса, а каждая подписываемая операция действительно уменьшает разрешение.
После обновления протокола заново сопоставьте документацию и адрес роутера: прежнее доверие к названию приложения не подтверждает новый контракт. Если разрешение выдаётся через Permit с отдельным сроком, запишите дату истечения и всё равно проверьте фактическое состояние перед новым пополнением кошелька.
Опасные ошибки#
- Считать, что нулевой баланс удаляет approve. Будущее пополнение снова окажется доступно spender, пока allowance не отозван или не истёк по правилам конкретного разрешения.
- Отключать сайт вместо отзыва в блокчейне. Локальный сеанс не меняет allowance, записанный в токен-контракте.
- Выдавать максимальный лимит непроверенному роутеру. Знакомая метка может скрывать другой контракт, а подтверждённая транзакция необратимо создаст разрешение.
- Пакетно подписывать отзывы в фальшивом сервисе. Инструмент может запрашивать новые approve, Permit или переводы под видом очистки старых прав.
Доказательства#
Не ориентируйтесь только на сообщение «разрешение отозвано». Проверьте значение allowance непосредственно в блокчейне после подтверждения транзакции и повторите проверку для каждой используемой сети.
| Контрольная точка | Доказательство | Условие остановки |
|---|---|---|
| Проверить spender | Адрес совпадает с документацией | Считают, что пустой баланс удаляет approve |
| Разрешить точную сумму | Хеш и allowance в обозревателе | Сайт только отключают локально |
| Ограничить баланс кошелька | Запланированный лимит | Роутер не проверен |
Сохраняйте хеши, адреса токена и spender, сеть и датированные результаты проверки, но исключайте сид-фразы, приватные ключи, пароли и коды аутентификации.
Часто задаваемые вопросы#
Может ли безлимитный approve списать другие токены?
Обычно он относится к конкретному токену и spender, но для других активов могут существовать отдельные права.
Истекает ли approve автоматически?
Стандартные ERC-20 allowances обычно не истекают, если токен или Permit-система не реализует срок.
Permit2 всегда безлимитен?
Нет. Permit-системы поддерживают суммы и сроки, но пользователь должен прочитать конкретную подпись.
Связанные руководства#
Источники#
- Ethereum.org: безопасность смарт-контрактов
- OWASP: десять главных рисков смарт-контрактов
- Поддержка Uniswap: разрешения на токены
Предупреждение о риске: Криптовалютные операции могут быть необратимыми. Никому не сообщайте сид-фразу, приватный ключ, пароль или код аутентификации; независимо проверяйте spender, сеть и каждый запрос кошелька.
Редакционный стандарт
Материал носит образовательный характер и основан на источниках. Меры безопасности, правила бирж и правовые требования могут меняться — проверяйте важные шаги по официальным данным.