Обмен может завершиться, даже если разрешение, использованное для него, останется активным. Разрешения на токены позволяют указанному адресу тратить токены из вашего кошелька в пределах предоставленных вами полномочий. Закрытие приложения не обязательно отменяет эти полномочия.
Это руководство посвящено токенам ERC-20 в Ethereum и других сетях EVM. В других стандартах токенов и блокчейнах используются иные системы разрешений. Практическая задача — до выдачи разрешения понять, кто является расходующим адресом, какова сумма и каков охват разрешения, а затем удалить разрешения, которые вам больше не нужны.
Лимит — это ограничение на траты, привязанное к расходующему адресу
В стандартном рабочем процессе ERC-20 функция approve устанавливает лимит, allowance показывает оставшуюся сумму, а transferFrom позволяет авторизованному расходующему адресу перемещать токены в соответствии с правилами контракта токена. Транзакция одобрения обычно устанавливает разрешение, а последующее действие приложения использует его.
Определите четыре вещи: сеть, адрес контракта токена, адрес владельца и адрес расходующего лица. Название сайта само по себе не является разрешением. Расходующим адресом может быть контракт приложения или другой адрес, а его код определяет, как могут использоваться эти полномочия.
Представьте гипотетический кошелёк, в котором хранится 200 токенов. Вы предоставляете расходующему адресу разрешение на 100 токенов. Баланс остаётся равным 200, пока токены действительно не перемещены. Если затем расходующий адрес переводит 40 токенов в рамках стандартного конечного лимита, ваш баланс становится равным 160, а оставшийся лимит — 60. Это два разных значения.
Расходующий адрес может использовать оставшееся разрешение без нового запроса на одобрение с учётом применимых правил контракта. Новое одобрение обычно заменяет существующий лимит указанной вами суммой, а не добавляет эту сумму к старому лимиту.
Неограниченные разрешения могут распространяться на будущие пополнения
Приложение может запрашивать очень большой лимит, чтобы вам не приходилось выдавать новое разрешение для каждой транзакции. Это может сократить количество повторяющихся действий и расходы на одобрение, но при этом увеличивает сумму, доступную в рамках полномочий расходующего адреса.
Некоторые распространённые реализации считают максимальное целое значение неограниченным лимитом и не уменьшают его при трате токенов. Не следует предполагать, что каждое использование постепенно уменьшает неограниченное разрешение.
Лимит также может сохраниться, когда баланс токенов станет нулевым. Если позднее вы получите больше таких же токенов на тот же адрес в той же сети, существующее разрешение снова может быть использовано. Пустой вид кошелька не доказывает, что старые разрешения исчезли.
Выбор меньшего лимита уменьшает сумму, доступную в рамках этого разрешения. Но это не доказывает надёжность приложения и не означает, что предлагаемая транзакция разумна.
Отзывайте именно выданное вами разрешение
Проверяйте лимиты, когда прекращаете пользоваться приложением, не можете определить расходующий адрес, обнаруживаете неоправданно большой лимит или узнаёте о соответствующем инциденте безопасности. Цель — убрать ненужный способ тратить ваши токены.
- Проверьте аккаунт и сеть. Разрешение в одной сети не связано с разрешением в другой.
- Определите токен и расходующий адрес. Используйте надёжный экран разрешений кошелька или подходящий обозреватель блокчейна. Одной знакомой метки недостаточно для проверки адреса.
- Изучите предлагаемое изменение. Для стандартного лимита ERC-20 отзыв обычно выполняется посредством ончейн-транзакции, которая устанавливает лимит этого расходующего адреса равным нулю. Подтвердите токен, расходующий адрес и новую сумму.
- Проверьте подтверждение. Отзыв в блокчейне требует оплаты газа сети, даже если сервис берёт эти расходы на себя. Убедитесь, что транзакция выполнена успешно и соответствующий лимит теперь отражает нужное изменение.
Ожидающий подтверждения отзыв ещё не изменил состояние блокчейна. Расходующий адрес может выполнить действие до его подтверждения. Завершённый отзыв ограничивает дальнейшее использование этого лимита, но не возвращает уже переведённые токены.
Отключение сайта изменяет подключение кошелька к этому сайту. Существующие ончейн-разрешения требуют отдельного изменения. Если приватные ключи или фразы восстановления стали известны посторонним, разрешения — лишь часть инцидента: отзыв не лишает другого человека возможности подписывать транзакции с помощью этих ключей.
Если вы используете личный кошелёк вместе с KTX, отделяйте разрешения кошелька от безопасности аккаунта на платформе. В руководстве KTX по кастодиальным и некастодиальным кошелькам объясняется, кто контролирует авторизацию транзакций и восстановление доступа. Ознакомьтесь с руководством KTX по резервному копированию сид-фразы, чтобы защитить материалы для восстановления, и никогда не сообщайте фразы восстановления сайту, предлагающему отозвать разрешения.
Подписанные разрешения требуют дополнительной проверки
Кошелёк может запросить подпись вместо немедленной транзакции одобрения. Подпись всё равно может предоставить существенные полномочия. Например, разрешения ERC-2612 permit позволяют другой стороне отправить вашу подписанную авторизацию и установить лимит.
Срок действия permit ограничивает период, в течение которого эта подпись может быть отправлена. Он не устанавливает автоматически срок действия получившегося обычного лимита ERC-20. Установка лимита в ноль также не обязательно делает недействительной старую неиспользованную подпись permit; её nonce и правила действительности требуют отдельного внимания.
Permit2 добавляет ещё один уровень: одобрение токена для контракта Permit2, за которым следуют разрешения для отдельных приложений. Разрешения на основе лимитов и одноразовые переводы по подписям имеют разные правила в отношении сумм, сроков действия и nonce.
Проверяйте каждый применимый уровень и все действующие подписанные разрешения. Средство проверки, которое считывает текущие ончейн-лимиты, может не показывать каждую подписанную, но ещё не отправленную подпись. Успокаивающий экран лимитов не может учесть разрешение, которое он пока не видит.
Часто задаваемые вопросы
Нужно ли разрешение ERC-20, чтобы отправить нативный ETH?
Для обычного перевода нативного ETH лимит ERC-20 не используется. Обёрнутый ETH является токеном и может использовать этот механизм. Разрешения на уровне аккаунта — отдельный вопрос.
Распространяется ли одно неограниченное разрешение на все активы в моём кошельке?
Обычное разрешение ERC-20 относится к конкретному токену и расходующему адресу. Оно автоматически не распространяется на все токены или NFT. Однако один запрос на подпись может содержать несколько разрешений, поэтому проверяйте его полный охват.
Почему кошелёк может попросить сначала установить лимит равным нулю, прежде чем изменить его?
Некоторые реализации токенов требуют этого, а замена ненулевого лимита может создавать риски, связанные с порядком выполнения транзакций. Следуйте поддерживаемому рабочему процессу; сброс не отменяет уже совершённые траты.
Остановит ли аппаратный кошелёк опасное разрешение?
Он помогает защитить ключи для подписания. Однако с помощью этих ключей вы всё равно можете авторизовать опасное разрешение. Проверяйте сведения о транзакции и расходующий адрес, а не полагайтесь только на устройство.
Работают ли разрешения NFT так же, как лимиты токенов?
ERC-721 поддерживает разрешение для отдельного NFT и разрешение оператора для всего этого контракта NFT. Они отличаются от количественного лимита ERC-20. Перед отзывом проверьте стандарт и охват разрешения.
Эта статья содержит общую образовательную информацию, а не персональные рекомендации по безопасности или инвестициям. Реализации токенов и интерфейсы кошельков различаются. Никогда не раскрывайте приватные ключи или фразы восстановления.