Коротка відповідь
Більшість ERC-20 і ERC-721 approval не закінчуються автоматично. Раз надані, persist до явного відкликання. Винятки: підписи Permit (EIP-2612) включають параметр deadline — цей підпис закінчується у вказаний час. Підписи Permit2 також мають deadline. Але класичний setApprovalForAll і ERC-20 approve calls не мають закінчення; approval з 2021 року все ще валідний сьогодні.
Три типи approval
ERC-20 approve. Стандартний "approve unlimited", використовуваний більшістю DEX-інтеграцій до 2023 року. Без закінчення. Approval persist через роки. Відкликається лише через явну revoke-транзакцію.
ERC-721 setApprovalForAll. Використовується NFT-маркетплейсами. Boolean — true grants, false revokes. Без закінчення.
EIP-2612 Permit / Permit2. Off-chain підпис із вбудованим deadline. Підписаний у 2024 з deadline 1 година → закінчується через 1 годину.
Чому це має значення
Approval, виданий у 2021 році DEX, який ви більше не використовуєте, все ще активний. Якщо контракт цього DEX пізніше скомпрометований (Multichain 2023, Curve 2023 тощо), атакуючий може використати ваш старий approval, щоб злити цей токен з вашого гаманця — через три роки після того, як ви забули, що видали його.
Це центральна причина для квартальної звички revoke.cash.
Що безпечно auto-expires
Сучасні реалізації Permit і Permit2 зазвичай встановлюють короткі deadline (1 година до 30 днів). Frontend Uniswap V3 prompts Permit2 підпис з deadline 30 днів за замовчуванням.
Пастка хибної думки
Багато користувачів вірять, що approval "закінчуються, коли я відключаю гаманець" або "закінчуються, коли я закриваю dApp". Жодне не вірно. Стан з'єднання живе в UI вашого гаманця; approval живуть on-chain.
Єдине безпечне припущення
Ставтесь до кожного approval як до постійного, поки не відкличете. Запускайте revoke.cash щоквартально. Відкличте approval до контрактів, які більше не використовуєте. Особливо відкличте "unlimited" approval — це найвищa-ризикова категорія.
Подальше читання: revoke.cash, EIP-2612 Permit.