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

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

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

Почему 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, выступая общим хабом разрешений с истекающими и ограниченными по сумме доверенностями. Это подлинные улучшения, но заметьте, что они меняют: подписи теперь делают работу, которую делали транзакции. Фишинговый сайт, заставивший вас подписать не то Permit-сообщение, добивается того же, что и вредоносный апрув, — поэтому читать, что подписываешь, важно как никогда.

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

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

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

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

Где здесь WATS

Апрувы — это подписи, а подписи — территория кошелька. WATS полностью некастодиален — ключи держите вы, WATS никогда не держит ни одного, — поэтому каждый апрув, Permit-подпись и отзыв происходят только тогда, когда подписывает ваш ключ, из браузерного расширения или мобильного приложения, в EVM, Solana и TON. Комиссии — то, чем WATS не похож ни на что: каждое действие, включая транзакции апрува и отзыва, оплачивается одним токеном, ATS, вместо нативного газа сети — через пеймастер ERC-4337 в EVM и эквивалентный fee-payer/релеер в Solana и TON, — так что чистка старых allowance никогда не застрянет из-за того, что в этой сети у вас кончился газовый токен. Собранный ATS сжигается — со 100M к полу в 30M, — а поскольку ATS является OFT LayerZero, один баланс покрывает все сети. WATS — первый и единственный кошелёк, сочетающий единый комиссионный токен ERC-4337 + OFT с этим сжиганием — подробности на странице комиссии ATS.

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

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

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

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

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

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

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