Skip to content
Все руководства по опционам и фьючерсам
Безопасность криптокошелька12 min read

Разрешения и лимиты токенов: как проверить и отозвать

Разберитесь, что разрешает ERC-20 approve, как работают неограниченные лимиты и подписи permit, и что меняет либо не меняет отзыв разрешения.

В этом руководствеПодключение кошелька и разрешение на токены — разные права

Краткое резюме

Вызов ERC-20 approve обычно не отправляет токены сразу. Он записывает в блокчейн лимит, в пределах которого конкретный spender позднее может запросить токены через transferFrom. Отключение кошелька от сайта не обязательно удаляет этот лимит, а установка нулевого значения не отменяет уже завершённый перевод.

Подключение кошелька и разрешение на токены — разные права

Подключение к сайту обычно позволяет приложению видеть публичный адрес и запрашивать подписи в кошельке. Само подключение не даёт приложению права перемещать любые ERC-20 токены. Лимит токена хранится отдельно, в контракте токена. MetaMask также разделяет отключение dapp и отзыв разрешений токена.

Разрешение ERC-20 связано с контрактом токена, сетью, адресом владельца и адресом spender. Разрешение использовать токен в Ethereum не означает такого же права для другого токена или этого же токена в Polygon. Если помнить только «я разрешил этому сайту», можно не заметить активный лимит для другой сети или токена.

В статье рассматриваются approve, allowance и transferFrom стандарта ERC-20 в Ethereum и совместимых сетях. Переводы нативного ETH, NFT-разрешение setApprovalForAll, другие стандарты токенов и вход в кошелёк используют иные модели доступа. Резервная копия и восстановление ключей — отдельная тема: см. руководство по seed-фразе и восстановлению кошелька.

approve задаёт лимит расходования, а не переводит токены

Владелец может вызвать в контракте токена approve(spender, amount), чтобы разрешить указанному spender использовать не больше amount токенов. Стандартная функция transferFrom позволяет spender перемещать токены от имени владельца. Поэтому транзакция approve обычно сама по себе не меняет баланс, но последующий вызов transferFrom может использовать лимит. Так устроен поток разрешений в стандарте ERC-20.

Например, если в кошельке 300 токенов, а одному router разрешено 80, обычный ERC-20 spender ограничен меньшим из двух значений: оставшимся лимитом и балансом владельца. Разрешение может использоваться в нескольких операциях, поскольку контракт может вызывать transferFrom неоднократно. Если контракт или ожидаемый путь вызова будет скомпрометирован, токены могут переместиться не так, как рассчитывал пользователь. Важны также нестандартное поведение токена и дополнительные ограничения.

approve обычно является ончейн-транзакцией к контракту токена и может требовать сетевую комиссию. Некоторые приложения отправляют разрешение и обмен двумя транзакциями; другие сочетают подпись разрешения с последующей транзакцией. Не судите о действии только по кнопке «Approve»: проверьте, что именно просит подписать кошелёк и в какой сети.

Неограниченный лимит не означает немедленное списание

Метка «Unlimited» в кошельке часто соответствует лимиту, близкому к максимальному целому числу токена. Она не создаёт токены и не переводит текущий баланс в момент одобрения. Однако spender может позднее использовать лимит для этого токена в той же сети, в том числе для токенов, которые поступят в кошелёк позже. Некоторые реализации сохраняют максимальное значение и не уменьшают его — проверьте поведение конкретного токена.

Приложение может запрашивать широкий лимит, чтобы не повторять подтверждение, но удобство следует оценивать вместе с риском. Если в контракте spender есть уязвимость или контроль над ним захвачен, старое разрешение может быть использовано позже. Руководство Ethereum.org по отзыву разрешений объясняет, почему широкий лимит может оставаться значимым даже после возврата активов в кошелёк.

Меньший лимит не устраняет все риски. Разрешение поддельному токену или неверному spender всё равно может привести к потерям; частые подтверждения также добавляют комиссии и возможности ошибиться. Учитывайте планируемую сумму, частоту использования, доверие к spender и возможность позднее проверить лимит.

Иллюстрация без текста: кошелёк, золотой токен и клапаны, обозначающие разные лимиты разрешения.
Allowance позволяет конкретному контракту использовать токены позже; перед подписью проверьте адрес и сумму.

Перед подписью проверьте сеть, токен, spender и сумму

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

Не подключайте кошелёк по ссылкам из личных сообщений, QR-кодов, чатов поддержки или непроверенной рекламы. Фишинговая страница может имитировать настоящее приложение. Открывайте сайт по сохранённому официальному адресу или через документацию проекта и не доверяйте адресу контракта только потому, что отображаемое имя знакомо. Метка «проверен» в обозревателе блоков не доказывает безопасность контракта.

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

Подпись permit меняет способ выдачи разрешения, но не само право

Некоторые ERC-20 токены поддерживают ERC-2612 permit. Вместо обычной транзакции approve владелец подписывает типизированные данные, а другая сторона может отправить эту подпись, чтобы установить лимит токена. Стандартное сообщение включает владельца, spender, сумму, nonce и deadline; домен помогает связать подпись с сетью и контрактом.

deadline в ERC-2612 — последний момент, когда permit можно отправить. Он не означает, что лимит, уже установленный успешно выполненным permit, автоматически истечёт в это время. Разрешение может оставаться до использования, изменения или отзыва. Некоторые токены используют другие варианты permit или дополнительные правила срока действия; не считайте любой запрос в кошельке с названием «permit» реализацией ERC-2612.

Подпись может позволить другому аккаунту оплатить комиссию, но это не делает любую подпись безобидной проверкой входа. Если кошелёк не показывает токен, spender, сумму и срок понятным образом или данные не совпадают с объяснением приложения, откажитесь от подписи и проверьте официальную документацию проекта. Неотправленную подпись кто-то ещё может отправить до указанного deadline.

Отключение сайта не отзывает ончейн-лимит

Выход из аккаунта или отключение кошелька меняет браузерную сессию либо разрешение на подключение. Уже сохранённый в контракте ERC-20 лимит может остаться. И наоборот, отзыв лимита не стирает публичный адрес, известный сайту, или историю операций в блокчейне. Это различие описано в руководстве MetaMask по отключению dapp.

Для отзыва обычно отправляют ончейн-транзакцию, устанавливающую лимит этого токена и spender в ноль. За неё взимается сетевая комиссия, а старое разрешение может действовать до подтверждения транзакции. После подтверждения обновите список разрешений или снова запросите данные контракта токена, чтобы убедиться, что для того же кошелька, сети, токена и spender значение равно нулю. Руководство MetaMask по разрешениям и Ethereum.org описывают проверку разрешений для отдельных сетей; проверяйте официальный домен инструмента и выбранную сеть.

Каждая сеть хранит собственное состояние. Обнуление лимита в Ethereum не меняет автоматически разрешение для того же токена в другой сети. Проверьте каждый нужный аккаунт, контракт токена, spender и сеть, а затем дождитесь результата транзакции. Инструмент отзыва не должен запрашивать seed-фразу или закрытый ключ.

Отзыв блокирует будущее использование, но не отменяет перевод

После подтверждения нулевого лимита spender не может использовать именно это разрешение для нового вызова transferFrom. Отзыв не отменяет завершённые переводы, не возвращает токены от получателя и не удаляет разрешения для других контрактов. Если токены уже ушли из-за подозрительного разрешения, установка нуля не является способом их вернуть.

Если закрытый ключ кошелька раскрыт, злоумышленник может подписывать транзакции и другими способами. Также могут сохраниться отдельные разрешения для других spender или токенов, права операторов NFT, подписи permit и специальные полномочия контрактов. Рассматривайте результат только для конкретного кошелька и сети, которые вы проверили.

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

При изменении лимита возможна гонка транзакций ERC-20

Стандарт ERC-20 рекомендует интерфейсам сначала установить ненулевой лимит в ноль, прежде чем заменять его другим ненулевым значением. Если транзакция spender попадёт между старым и новым разрешениями, spender может использовать больше, чем ожидал пользователь. Например, при изменении лимита со 100 на 25 spender может сначала использовать старые 100, а затем новые 25.

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

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

Короткий порядок проверки разрешений кошелька и токенов

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

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

Частые вопросы

Q1Удаляет ли отключение кошелька существующее разрешение токена?

Нет. Подключение сайта — это сессия кошелька, а лимит ERC-20 — состояние в контракте токена. Проверьте нужную сеть и токен, а при необходимости отдельно отзовите разрешение spender.

Q2Можно ли вернуть уже списанные токены, обнулив лимит?

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

Q3Все ли криптотокены и NFT используют лимиты ERC-20?

Нет. Здесь рассматриваются approve и transferFrom стандарта ERC-20. Разрешения операторов NFT, нативные активы, другие стандарты токенов и сетевые права работают иначе.

Источники и дополнительное чтение

Сообщить о проблеме

Мы подготовим письмо со ссылкой на эту статью. Mark получит сообщение только после отправки

Быстрая проверка

Прочитали руководство? Проверьте себя в 3 вопросах

Вопрос 1 / 3

Вопрос 01

Что в основном делает ERC-20 approve(spender, amount)?

Выберите ответ, чтобы увидеть объяснение

Словарь опционов

Руководство по восстановлению криптокошелькаSeed-фраза криптокошелька: резервная копия, восстановление и парольная фразаУзнайте, как seed-фраза связана с приватными ключами, как хранить офлайн-копию и как парольная фраза меняет восстановлениеСравнивайте реальные различияПерпетуальные контракты на CEX и DEX: хранение, ордера и выводСравните кастодиальные криптобиржи и ончейн-протоколы для перпетуальных контрактов по контролю ключей, обработке ордеров, перемещению залога и восстановлению аккаунта. CEX и DEX — не универсальные оценки безопасности.Механика опционовЧто такое назначение опциона?Разберитесь, как проданный опцион может создать обязанность передать или купить акции до даты экспирации или в неёРазрешённое количество контрактов — не то же самое, что бюджет рискаЛимиты позиции по опционам и лимиты исполнения: объяснениеУзнайте, чем лимиты позиции по биржевым опционам отличаются от лимитов исполнения, почему важны агрегация одной стороны и отчётность и почему маржа или покупательная способность не показывают, разрешено ли количествоТорговля опционамиЧто такое бид-аск спред опциона?Узнайте, что представляют бид и аск, почему важна их разница и как она может повлиять на исполнение