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

Безлимитный approve или точная сумма: какое разрешение безопаснее

Approve разрешает конкретному контракту расходовать токены. Сравниваем удобство безлимитного allowance с риском и точным лимитом.

Безлимитный approve или точная сумма: какое разрешение безопаснее

Короткий ответ: approve не отправляет токены, а записывает allowance – сколько конкретный spender может списать с вашего адреса через transferFrom. Точная сумма ограничивает последствия ошибки или взлома, но требует нового разрешения для следующей операции. Безлимитный approve удобнее при регулярной работе, однако оставляет действующее право на весь текущий и будущий баланс.

Кому именно выдаётся разрешение

В транзакции approve участвуют три стороны: владелец токенов, контракт самого токена и spender. Spender – адрес, которому разрешается инициировать списание. Это может быть маршрутизатор DEX, кредитный протокол или другой смарт-контракт.

Название сайта не является получателем разрешения. Перед подписью нужно увидеть адрес spender и проверить, относится ли он к ожидаемому протоколу и сети. Поддельная страница способна предложить approve для чужого адреса, сохранив знакомые цвета и название токена.

Allowance привязан к конкретному контракту токена. Разрешение на один актив не распространяется на остальные, но одинаковый spender может получить несколько отдельных прав. Текущие allowance читаются публично, без подключения кошелька.

Что означает точная сумма

Если вы разрешаете расход 100 токенов, spender не сможет списать через этот allowance 101 токен. После transferFrom доступный остаток обычно уменьшается. Для разового обмена или депозита такой предел связывает риск с понятной суммой.

Точная сумма может потребовать повторного approve при следующей операции. Кроме того, итоговый расход иногда немного отличается от предварительного из-за логики протокола или токена. Не увеличивайте лимит наугад: уточните, какую максимальную сумму реально использует вызов.

Сам approve требует gas и подтверждения в сети. Основное действие отправляют только после того, как разрешение вступило в силу. Если второй вызов выполняется раньше, кошелёк может сообщить, что не удаётся оценить gas.

Чем опасен безлимитный approve

Интерфейсы часто устанавливают очень большое целое значение, фактически не ограничивающее списание привычным балансом. Пока allowance действует, одобренный контракт способен использовать и токены, которые поступят позже. Новая подпись владельца для каждого transferFrom не нужна.

Если spender содержит уязвимость, обновляется небезопасным администратором или изначально принадлежит мошеннику, последствия ограничиваются не суммой одной сделки, а доступным балансом. Сам по себе известный интерфейс не исключает риск контракта.

Безлимитное разрешение не означает мгновенную потерю. Оно создаёт постоянную возможность списания в рамках кода и полномочий spender. Риск становится реальным, когда контракт или ключи управления используют это право.

Когда какой вариант разумнее

Для нового, редко используемого или экспериментального протокола выбирайте точную сумму. То же относится к крупному балансу и операции, которую вы не собираетесь повторять. Дополнительная транзакция в будущем обычно понятнее, чем длительное неограниченное право.

Безлимитный approve иногда оправдан для часто используемого проверенного контракта, если пользователь осознанно принимает риск и регулярно контролирует разрешения. Удобство состоит в меньшем числе транзакций, а не в повышенной безопасности.

Можно отделить рабочий адрес с небольшим балансом от основного хранения. Тогда даже постоянные разрешения относятся к ограниченной сумме. Но это не заменяет проверку spender и не защищает от подписи перевода самого актива.

Оценивайте не только известность протокола, но и конкретную версию контракта. После обновления интерфейс может использовать новый маршрутизатор, а старый allowance останется в сети. Если прежний spender больше не нужен, его право стоит отозвать независимо от разрешения новой версии.

Как проверить и отозвать allowance

  1. Выберите сеть и публичный адрес владельца.
  2. Найдите контракт токена и адрес spender для каждого разрешения.
  3. Сопоставьте spender с фактически используемым приложением.
  4. Для ненужного права отправьте изменение allowance до нуля через доверенный интерфейс.
  5. Дождитесь подтверждения и повторно прочитайте значение из контракта.

Отзыв требует комиссии и не возвращает уже списанные токены. Отключение сайта от кошелька также не меняет allowance в блокчейне. Разницу между подключением и разрешением объясняет материал о том, как отозвать разрешения токенов.

Approve и подпись Permit – не одно и то же

Обычный approve является транзакцией. Permit может подготовить аналогичное разрешение по подписанному сообщению, которое затем передаст в сеть другая сторона. Отсутствие комиссии в момент подписи не делает действие безопасным. Перед такими запросами прочитайте, как работают Permit и Permit2.

Любой вариант должен показывать токен, spender, сумму и область действия. Если кошелёк выводит слепую подпись или не декодирует данные, не подтверждайте её ради обещанной награды.

Если разрешение выдано мошеннику

Прекратите взаимодействие с сайтом, отзовите allowance через доверенный инструмент и проверьте другие токены и сети. Если списание уже началось, приоритет зависит от оставшегося баланса и безопасности самого ключа. Практический порядок есть в инструкции, что делать после компрометации кошелька.

Для поддержки достаточно публичного адреса, сети, токена, spender и TxID. Не передавайте seed-фразу, приватный ключ, пароль или 2FA. Эти секреты не нужны для отзыва и позволяют атакующему обойти любые ограничения allowance.

После отзыва дождитесь подтверждения и повторно прочитайте allowance. Не полагайтесь только на зелёное уведомление сайта: транзакция могла завершиться ошибкой или относиться к другой сети. Сохраните TxID изменения до окончательной сверки.

Итог

Точная сумма сокращает объём права, безлимитная – количество повторных approve. Выбирайте предел по частоте использования, размеру баланса и доверию к конкретному spender. Периодически удаляйте ненужные разрешения и всегда проверяйте адрес контракта, а не только название приложения.