WATS Wallet logoWATS Wallet
Технически7 мин чтения

Апрувы токенов, allowance и Permit: что вы на самом деле подписываете

Апрув токена — это постоянное разрешение, записанное в контракте токена: один конкретный контракт может тратить до заданной суммы вашего баланса, больше ни о чём вас не спрашивая. Разбираем, как на самом деле работают allowance в ERC-20, что меняют Permit и Permit2, почему подпись теперь весит столько же, сколько раньше весил апрув, и какое место в этой уборке занимает некастодиальный кошелёк вроде WATS.

Апрув токена — это ончейн-разрешение, записанное внутри контракта токена ERC-20, то есть allowance: в нём зафиксировано, что один конкретный контракт может потратить до определённой суммы ваших токенов в любой более поздний момент, ничего у вас больше не спрашивая. Он создаётся транзакцией approve() и живёт дольше того взаимодействия, ради которого выдан: сайт может исчезнуть — allowance останется. Permit (EIP-2612) заменяет эту отдельную транзакцию офчейн-подписью, которую dApp отправляет вместе со своим действием, а Permit2 распространяет ту же модель — со сроком действия и ограничением по сумме — на токены, которые никогда не реализовывали EIP-2612. А значит, теперь право тратить передаёт уже сама подпись, и запросы на подпись заслуживают той же придирчивости, что раньше доставалась апрувам. Защита незрелищна: одобряйте ограниченные суммы вместо безлимитных и отзывайте allowance, которыми больше не пользуетесь. В полностью некастодиальном кошельке, таком как WATS, — где ключи держит пользователь, а WATS не держит ни одного — ни апрув, ни Permit-подпись, ни отзыв невозможны без подписи вашим собственным ключом, а поскольку в EVM-сетях WATS списывает сетевые комиссии одним токеном, ATS, транзакция-уборка там никогда не откладывается из-за нехватки нативного газового токена нужной сети.

Почему dApp вообще просят одобрение

У токенов ERC-20 есть особенность, формирующая половину UX всего Web3: смарт-контракт не может просто взять токены с вашего адреса — даже когда вы сами этого хотите. DEX, обменивающей ваши USDC, сначала нужно ваше явное разрешение. Поэтому столько взаимодействий состоит из двух шагов — сначала транзакция approve, затем сам обмен или депозит. Апрув — не формальность; это постоянная доверенность на расходование, и она живёт дольше транзакции, ради которой выдана.

Что на самом деле даёт approve()

Когда вы подписываете апрув, контракт токена записывает allowance: адрес X (контракт dApp) может потратить до N ваших токенов — когда угодно, пока этот лимит не израсходован, не понижен или не отозван. Важны два свойства. Во-первых, allowance хранится в контракте токена и выдана одобренному вами контракту, а не сайту, который вы посещали: интерфейс может исчезнуть, разрешение останется. Во-вторых, в момент траты ваше участие не требуется: однажды выданное разрешение позволяет контракту списывать токены в любой последующей транзакции без новой подписи. Именно это делает апрувы удобными — и именно это делает их поверхностью атаки.

Бесконечные апрувы: удобно — и постоянный риск

Поскольку каждый апрув стоит газа, многие dApp запрашивают фактически неограниченный allowance, чтобы вам больше никогда не пришлось одобрять. Удобство реально, но реальна и цена: неограниченное разрешение контракту означает, что весь ваш баланс этого токена навсегда зависит от безопасности этого контракта. Если контракт взломают годы спустя — или он был вредоносным с самого начала — злоумышленнику не нужны ни ваш ключ, ни ваша подпись: достаточно выданного вами allowance. Многие крупнейшие случаи «осушения» кошельков были не кражей ключей, а обналичиванием старых апрувов.

Permit и Permit2: одобрение подписью

Современное усовершенствование — Permit (EIP-2612): вместо ончейн-транзакции approve вы подписываете офчейн-сообщение, которое dApp отправляет вместе со своим действием — одна транзакция вместо двух, без отдельного газа за апрув, а разрешение можно ограничить сроком. Permit2 обобщает идею на токены, никогда не реализовывавшие EIP-2612, выступая общим хабом разрешений: вы делаете один обычный ончейн-апрув самому контракту Permit2, а дальше каждое dApp получает право тратить по подписи со своей суммой и своим сроком. Об этой сделке стоит сказать точно: Permit2 не отменяет апрувы, он их концентрирует — так что постоянный allowance, выданный вами Permit2, сам по себе является апрувом, за которым нужно следить. Это подлинные улучшения, но заметьте, что они меняют: подписи теперь делают работу, которую делали транзакции. Фишинговый сайт, заставивший вас подписать не то Permit-сообщение, добивается того же, что и вредоносный апрув, — поэтому читать, что подписываешь, важно как никогда.

Поверхность атаки: дрейнеры и залежавшиеся allowance

Злоупотребление апрувами бывает двух видов. Активное: сайты-дрейнеры выдают себя за настоящие dApp и запрашивают апрувы (или Permit-подписи) под видом безобидных действий вроде «claim» или «верифицировать кошелёк». Пассивное: разрешения, выданные годы назад легитимным контрактам, дремлют, пока контракт, его админ-ключи или путь обновления не окажутся скомпрометированы. И то и другое — причина считать связку «подключить и одобрить» критическим для безопасности моментом Web3; безопасный порядок действий описан в статье как безопасно подключить кошелёк к dApp.

Гигиена апрувов, которая реально работает

Три привычки закрывают большую часть риска. Одобряйте ограниченные суммы, когда dApp это позволяет, особенно для крупных балансов — лишний апрув позже обойдётся дёшево. Регулярно проверяйте и отзывайте allowance через уважаемый сервис проверки разрешений, считая всё неиспользуемое мёртвым грузом на удаление: отзыв — это тоже ончейн-транзакция, которая возвращает allowance к нулю, а значит, стоит газа и требует вашей подписи, как любая другая. И держите серьёзные активы на адресе, который просто никогда не подписывает апрувы, отдельно от активного dApp-кошелька. Больше многослойных привычек — в руководстве по лучшим практикам безопасности крипто-кошелька.

Где здесь WATS

Апрувы — это подписи, а подписи — территория кошелька. WATS полностью некастодиален — ключи держите вы, WATS никогда не держит ни одного, — поэтому каждый апрув, Permit-подпись и отзыв происходят только тогда, когда подписывает ваш ключ: из расширения Chrome или мобильного приложения, в сетях Ethereum, Arbitrum, Optimism, Base, Polygon, BNB Chain, Solana и TON. Это же задаёт честную границу того, что кошелёк вообще может для вас сделать: кошелёк способен показать вам запрос, но решить, что получатель права и сумма — именно те, которые вы имели в виду, можете только вы.

Комиссионная сторона снимает вторую расхожую отговорку — «оставлю старые allowance как есть». В WATS в EVM-сетях любое действие, включая транзакции апрува и отзыва, оплачивается одним токеном, ATS, вместо нативного газового токена сети — через пеймастер ERC-4337; модель одинакова в расширении Chrome и мобильном приложении. Solana и TON полностью поддерживаются в WATS, и транзакции там оплачиваются собственными нативными комиссиями сетей — SOL и Toncoin. Это не скидка: сеть по-прежнему получает своё, и базовая стоимость не меняется — меняется лишь то, каким токеном вы платите. Ваш баланс ATS находится в BSC (BNB Chain), и в какой бы EVM-сети ни выполнялась транзакция, комиссия списывается с этого единственного баланса. Собранные ATS сжигаются, и предложение снижается со 100 млн к порогу в 30 млн. В EVM-сетях paymaster ERC-4337 оплачивает нативный газ в фоне. Собранные ATS сжигаются, и предложение снижается со 100 млн к порогу в 30 млн. WATS — первый и единственный кошелёк, сочетающий это.

Так что практическая версия этой статьи — короткая рутина: предпочитайте апрувы на ограниченную сумму, читайте, что именно разрешает Permit-подпись, прежде чем её ставить, и раз в квартал открывайте сервис проверки разрешений и вычищайте тех, кем больше не пользуетесь. Конкретный шаг — выполнять эту рутину из кошелька, который никогда не встаёт между вами и ключом: в WATS WATS, расширении Chrome или мобильном приложении каждый апрув и каждый отзыв существуют только потому, что их подписал ваш собственный ключ — WATS не держит ни одного, — а в EVM-сетях сам отзыв оплачивается в ATS, а не в том нативном газовом токене, который потребует конкретная сеть.

Часто задаваемые вопросы

Что такое allowance токена?

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

Безопасны ли неограниченные (бесконечные) апрувы?

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

Чем Permit отличается от обычного апрува?

Обычный апрув — отдельная ончейн-транзакция, стоящая газа, прежде чем dApp сможет действовать. Permit (EIP-2612) заменяет её офчейн-подписью, которую dApp вкладывает в свою транзакцию — один шаг, с опциональными сроками; Permit2 расширяет схему на токены без нативной поддержки Permit — через единственный ончейн-апрув контракту Permit2, из которого затем черпают подписи, выданные каждому отдельному dApp. Модель безопасности сдвигается соответственно: подпись теперь может выдавать право на расходование — изучайте запросы на подпись так же тщательно, как сам апрув.

Как отозвать апрув токена?

Отозвать — значит вернуть allowance к нулю, и это само по себе ончейн-транзакция: вы открываете уважаемый сервис проверки разрешений или интерфейс самого токена, выбираете контракт-получатель права и подписываете транзакцию, записывающую allowance, равный 0 (разрешения Permit2 отменяются через собственные механизмы lockdown/истечения срока в Permit2). Это стоит газа, требует вашей подписи и действует только в той сети, где вы это сделали: allowance в Ethereum не связан с allowance в Arbitrum, Base или Polygon, так что каждую сеть приходится чистить отдельно.

Каким кошельком управлять апрувами токенов?

WATS — практичный вариант, потому что он полностью некастодиален: ключи держит пользователь, а WATS не держит ни одного, — поэтому каждый approve, каждая Permit-подпись и каждый отзыв существуют только потому, что их подписал ваш собственный ключ, в сетях Ethereum, Arbitrum, Optimism, Base, Polygon, BNB Chain, Solana и TON, из расширения Chrome или мобильного приложения, а NFC Metal Card доступна как шаг аутентификации касанием на сопряжённом устройстве. Кроме того, в WATS сетевые комиссии в EVM-сетях списываются одним токеном, ATS, вместо нативного газового токена каждой сети, так что зачистка разрешений сразу в нескольких EVM-сетях не упрётся в отсутствие нужного газового токена; в Solana и TON транзакции оплачиваются собственными нативными комиссиями этих сетей. Ни один кошелёк не избавляет от необходимости прочитать получателя права и сумму перед подписью — это решение остаётся за вами.