ГЛАВНАЯ / ИНСТРУКЦИИ / ERC-2612 PERMIT: NONCE, DEADLINE И СРОК ДЕЙСТВИЯ ALLOWANCE
ERC-2612 permit: nonce, deadline и срок действия allowance
ERC-2612 разрешает изменить allowance токена с помощью подписи владельца. У такого сообщения есть nonce и deadline, но их назначение отличается от срока жизни уже установленного права. Самая важная граница проходит между ещё не предъявленной подписью и разрешением, которое контракт уже принял.
Подпись связывает владельца, spender, сумму и контекст
В структуру Permit ERC-2612 входят owner, spender, value, nonce и deadline. Домен EIP-712 отделяет подпись для конкретного контракта и сети от других контекстов. Видимое название токена не заменяет проверку verifyingContract и chainId, а разные реализации могут иметь несовместимые форматы permit.
Например, исторический вариант DAI отличается от ERC-2612 параметрами. Не определяйте стандарт только по имени функции. До подписи установите, какой контракт примет сообщение, кто получит право, сколько базовых единиц токена разрешено расходовать и соответствует ли это действию, которое вы собирались выполнить.
| Поле | Значение | Проверка |
|---|---|---|
| owner | Владелец токенов | Ваш выбранный адрес |
| spender | Получатель права | Ожидаемый адрес расходования |
| value | Новый allowance | Сумма с учётом decimals |
| nonce | Защита от повтора | Текущее nonces(owner) токена |
| deadline | Предел предъявления | Допустимое время вызова permit |
| Домен | Контекст EIP-712 | Контракт, сеть и параметры реализации |
До предъявления существует подпись, после него – allowance
Создание подписи само по себе обычно не меняет состояние токена. Другая сторона может отправить её в контракт отдельной транзакцией. При корректном permit токен устанавливает allowance для owner/spender в value и увеличивает nonces(owner). Подписант и отправитель этой транзакции не обязаны совпадать.
Permit устанавливает право расходования, а не выполняет перевод автоматически. Приложение может объединять предъявление разрешения с последующим действием в одной транзакции, но это дополнительная логика. После подтверждения проверяйте фактический allowance, а не только то, удалось ли подписать сообщение без gas.
- подпись получена, но может быть ещё не использована;
- вызов permit подтверждён в блокчейне;
- allowance и nonce прочитаны заново;
- перевод проверен отдельно, если он ожидался.
Deadline не отменяет уже принятое разрешение
В стандартном ERC-2612 deadline ограничивает время успешного предъявления подписи. В нём нет отдельного expiration для allowance. Если permit принят до deadline, само наступление этого времени не обнуляет созданное разрешение. Его дальнейший расход и изменение зависят от токена и последующих вызовов.
Учебный пример: сообщение допускает предъявление до 18:00, а контракт принял его в 17:50. В 18:01 нужно проверять оставшийся allowance; утверждение «подпись истекла, значит расходование запрещено» неверно. Это отличается от отдельного expiration в Permit2 AllowanceTransfer.
Approve(0) не обязан менять nonces(owner)
У ERC-2612 последовательно меняется nonce владельца внутри токен-контракта. Две подписи с одинаковым текущим nonce конкурируют: после успешного принятия одной вторая не пройдёт с тем же состоянием. Это отдельный счётчик, не nonce исходящих Ethereum-транзакций.
Обычный approve(spender, 0) меняет allowance, но в базовой модели не обязан увеличивать permit nonce. Поэтому неиспользованная подпись с прежним допустимым nonce может оставаться предъявимой до deadline. Универсальную кнопку отмены всех permit стандарт не устанавливает. Для конкретного токена выясните поддерживаемое инвалидирование и проверьте оба состояния: разрешение и ещё действительные подписи.
- не приравнивайте disconnect к отзыву;
- не считайте approve(0) универсальной отменой подписей;
- используйте процедуру конкретной реализации;
- учтите, что отправка отмены тоже может требовать подтверждения.
Частые вопросы
Permit сразу отправляет токены?
Стандартный permit меняет allowance. Перевод является отдельным вызовом, хотя приложение может объединять действия.
Кто платит gas при предъявлении?
Отправитель onchain-транзакции. Это не обязательно владелец подписи.
Allowance исчезает по deadline?
Нет. Этот срок относится к предъявлению permit, а не к автоматическому окончанию принятого allowance.
Approve(0) уничтожает любую старую подпись?
Нет. Если permit nonce не изменился и deadline не истёк, подпись может оставаться действительной.
Любой permit совместим с ERC-2612?
Нет. Проверяйте точный формат, домен и реализацию токена.
Чек-лист: erc-2612 permit: nonce, deadline и срок действия allowance
- реализация ERC-2612 подтверждена;
- домен, owner и spender проверены;
- value рассчитан по decimals;
- nonce получен у токена;
- deadline понятен;
- после вызова allowance проверен;
- отзыв права отделён от инвалидирования подписи.
Материал подготовлен редакцией сайта и проверен 25 октября 2026 года. Условия бирж, кошельков и блокчейн-сетей могут меняться. Перед операцией сверяйте данные в интерфейсе выбранного сервиса.