Какой слой даёт право на списание
СлойКому дано правоЧто читать
ERC-20 approvalКонтракту Permit2allowance(owner, Permit2) в контракте токена
AllowanceTransferКонкретному spender через Permit2amount, expiration и nonce для owner-token-spender
SignatureTransferSpender, включённому в подписанный EIP-712 hashtoken/max amount, deadline, optional witness, unsigned transferDetails, nonce bitmap и receipt
Какой слой даёт право на списание
Слой
ERC-20 approval
Кому дано право
Контракту Permit2
Что читать
allowance(owner, Permit2) в контракте токена
Слой
AllowanceTransfer
Кому дано право
Конкретному spender через Permit2
Что читать
amount, expiration и nonce для owner-token-spender
Слой
SignatureTransfer
Кому дано право
Spender, включённому в подписанный EIP-712 hash
Что читать
token/max amount, deadline, optional witness, unsigned transferDetails, nonce bitmap и receipt

Одинаковое название скрывает два разных разрешения

`AllowanceTransfer` хранит многоразовое разрешение по тройке владелец, токен и spender. Подпись может обновить сумму и срок, а последовательный nonce защищает обновление. После этого spender вызывает Permit2 без новой подписи владельца, пока сумма и срок позволяют.

`SignatureTransfer` не создаёт такое хранимое разрешение. Владелец подписывает token permissions, одноразовый nonce и deadline; вариант с witness связывает подпись с дополнительными данными. Но оба режима всё равно опираются на ERC-20 approval, выданный токеном контракту Permit2.

Снимок должен связать сеть, контракт и четыре стороны

Проверка без подписи

  1. 1
    Зафиксировать идентичность

    Запишите chain ID, owner, полный адрес токена, адрес Permit2 и предполагаемый spender. Сверьте Permit2 с официальным deployment registry этой сети и убедитесь, что по адресу есть ожидаемый контрактный код. Не переносите вывод между сетями.

  2. 2
    Прочитать approval токена

    Вызовите ERC-20 allowance для owner и указанного Permit2. Ноль закрывает канал этого токена через этот Permit2; другие ERC-20 allowances не меняются. Ненулевое значение ещё не доказывает право конкретного spender.

  3. 3
    Прочитать AllowanceTransfer

    Для точной тройки сохраните amount, expiration и nonce. Сравните expiration со временем блока, а не с часами браузера.

  4. 4
    Проверить одноразовый nonce

    Разложите nonce SignatureTransfer на word position и бит, затем прочитайте nonceBitmap владельца. Установленный бит означает расход или явную инвалидацию.

  5. 5
    Сверить подпись

    Проверьте EIP-712 domain, token, maximum amount, spender, deadline и optional witness. Spender связывается с вызывающим Permit2 адресом msg.sender; to и requestedAmount обычная подпись не защищает. Не подписывайте повторно ради диагностики.

Установленный бит nonce доказывает только то, что эту подпись больше нельзя использовать. Причину определяют отдельно: событие UnorderedNonceInvalidation подтверждает явную инвалидацию, а расход — успешный внешний или внутренний вызов Permit2 с тем же nonce, совпавшими подписанными данными и transferDetails, плюс Transfer event нужного token contract и согласованный эффект баланса. Если найден только bitmap, честный вывод — «повтор невозможен», а не «токены уже списаны».

Общий отзыв ERC-20 разрешений объясняет базовый слой, а разбор typed data помогает увидеть точные поля подписи. Здесь итогом должен быть отдельный снимок Permit2.

Отзыв выбирают по оставшемуся каналу

Действие и доказательство результата
НаблюдениеДействиеПроверка
AllowanceTransfer amount больше нуля и срок ещё действуетСделать lockdown или установить нулевую сумму для точной тройкиПосле lockdown/approve(0): успешный receipt и amount=0; ожидание срока проверяют отдельно по block.timestamp > expiration
Неиспользованная SignatureTransfer подпись раскрытаИнвалидировать соответствующий бит noncenonceBitmap содержит этот бит
Нужен полный запрет Permit2 для токенаУстановить ERC-20 allowance(owner, Permit2)=0Контракт токена возвращает ноль
Транзакция расхода уже включенаНе повторять отзыв как замену расследованиюReceipt, Transfer events и новые балансы согласованы
Действие и доказательство результата
Наблюдение
AllowanceTransfer amount больше нуля и срок ещё действует
Действие
Сделать lockdown или установить нулевую сумму для точной тройки
Проверка
После lockdown/approve(0): успешный receipt и amount=0; ожидание срока проверяют отдельно по block.timestamp > expiration
Наблюдение
Неиспользованная SignatureTransfer подпись раскрыта
Действие
Инвалидировать соответствующий бит nonce
Проверка
nonceBitmap содержит этот бит
Наблюдение
Нужен полный запрет Permit2 для токена
Действие
Установить ERC-20 allowance(owner, Permit2)=0
Проверка
Контракт токена возвращает ноль
Наблюдение
Транзакция расхода уже включена
Действие
Не повторять отзыв как замену расследованию
Проверка
Receipt, Transfer events и новые балансы согласованы

После отзыва перечитайте состояние на подтверждённом блоке и сохраните хеш транзакции. Если интерфейс показывает ноль, а прямой вызов контракта — прежнюю сумму, остановитесь и проверьте сеть, адрес Permit2 и block tag.

Стоп-сигналы

  • сеть, токен, Permit2 или spender взяты из интерфейса без сверки полного адреса;
  • установленный бит nonce называют доказанным списанием без receipt и Transfer event;
  • нулевой AllowanceTransfer принимают за отзыв ERC-20 approval токена;
  • router принимает действительную Permit2-подпись без привязки к ожидаемому caller/owner или позволяет подменить to;
  • сайт просит новую подпись или подключение кошелька только ради проверки состояния.

Белый список адресов вывода и ограничения API-ключей защищают другие каналы. Они не отменяют Permit2, но помогают составить полный инвентарь машинных и контрактных прав.

Источники

Мы используем прямые ссылки и фиксируем дату проверки. Полный текст чужих материалов не перепечатывается.

  1. Uniswap Permit2 — architecture Uniswap · Проверено 30 августа 2026 г. в 15:55 GMT+5
  2. Permit2 — IAllowanceTransfer Uniswap · Проверено 30 августа 2026 г. в 15:55 GMT+5
  3. Permit2 — ISignatureTransfer Uniswap · Проверено 30 августа 2026 г. в 15:55 GMT+5
  4. Permit2 — SignatureTransfer implementation Uniswap · Проверено 30 августа 2026 г. в 15:55 GMT+5
  5. Permit2 — PermitHash Uniswap · Проверено 30 августа 2026 г. в 15:55 GMT+5
  6. Uniswap Developers — Signature Transfer Uniswap · Проверено 30 августа 2026 г. в 15:55 GMT+5
  7. Uniswap Developers — Deployments Uniswap · Проверено 30 августа 2026 г. в 15:55 GMT+5
Материал носит информационный характер и не является индивидуальной рекомендацией. Криптоактивы связаны с риском волатильности, технических сбоев, хищения и полной потери средств.