Материал проверен 25 октября 2026?
БК

ГЛАВНАЯ / ИНСТРУКЦИИ / PERMIT2 NONCE BITMAP: КАК ОДНОРАЗОВАЯ ПОДПИСЬ ЗАЩИЩАЕТСЯ ОТ ПОВТОРА

Permit2 nonce bitmap: как одноразовая подпись защищается от повтора

В Permit2 SignatureTransfer одноразовость разрешения отслеживается по nonce в битовой карте владельца. Здесь не действует простое правило «следующий номер на единицу больше». Разбор этой модели помогает отличить уже использованную подпись от ещё действующей и не спутать её с разрешениями другого модуля Permit2.

Разные счётчики

Nonce подписи не равен nonce Ethereum-транзакции

У аккаунта есть счётчик исходящих транзакций, но Permit2 ведёт собственное состояние разрешений. В SignatureTransfer используется nonceBitmap для конкретного owner. Значение из подписанного сообщения нужно проверять в этой системе, а не по номеру последней отправки ETH.

Также не смешивайте SignatureTransfer с AllowanceTransfer. Первый использует одноразовые подписи переводов и unordered nonce, второй хранит разрешения с лимитом, сроком и своей моделью nonce. Одинаковое слово permit на экране не делает структуры взаимозаменяемыми.

МодельГде состояниеЧто не следует подставлять
Ethereum-транзакцияNonce аккаунта в сетиNonce из подписанного permit
ERC-2612nonces(owner) токен-контрактаBitmap Permit2
Permit2 SignatureTransfernonceBitmap(owner, wordPos)Последовательный nonce другого модуля
Permit2 AllowanceTransferРазрешение owner/token/spenderБитовую карту SignatureTransfer
Битовая карта

Один nonce выбирает слово и позицию бита

В реализации Uniswap старшие 248 бит nonce определяют wordPos, а младшие 8 бит – позицию в 256-битном слове. Значение 1 в соответствующей позиции означает, что nonce уже использован или инвалидирован. Состояние относится к owner в выбранном контракте и сети.

Для учебного nonce = 257 получаются wordPos = 1 и bitPos = 1: проверяется маска 2. Это пример разложения числа, а не готовые параметры для чужого кошелька. Из разрешений с номерами 10 и 11 можно сначала исполнить 11, если остальные условия соблюдены; исполнение 11 само по себе не погашает 10.

Unordered означает отсутствие обязательной последовательности. Оно не разрешает повторно использовать один и тот же nonce одного owner в этой битовой карте.
Исполнение

Успешный перевод расходует разрешение, но не оставляет его остаток

При успешном выполнении SignatureTransfer nonce помечается использованным. Подписанная сумма ограничивает допустимый перевод, однако исполнение на меньшую сумму не создаёт остаток той же одноразовой подписи для следующего вызова. Для повторного расходования требуется другое действительное разрешение.

Если вся транзакция откатилась, её изменения состояния также откатываются. Ошибка вызова не доказывает, что nonce стал недоступен. Проверяйте receipt и bitmap на актуальном блоке. Базовое ERC-20 разрешение токена на Permit2 при этом является отдельным слоем и может оставаться действующим.

  • сверьте успешность всей транзакции;
  • проверьте нужного owner и конкретный nonce;
  • не рассчитывайте на повторное использование неистраченной части;
  • учтите другие подписанные разрешения.
Отмена

Инвалидирование nonce и отзыв approve меняют разные состояния

SignatureTransfer предоставляет invalidateUnorderedNonces(wordPos, mask). Вызов помечает выбранные биты карты отправителя; ошибочная маска может затронуть другие разрешения. Пользовательскому интерфейсу нужно показывать, какие подписи отменяются. Не копируйте параметры учебного примера в реальную транзакцию.

Отзыв ERC-20 approve на Permit2 блокирует использование соответствующего базового доступа, но сам по себе не помечает nonce подписи использованным. Если доступ позже выдан снова, ещё действительная и неинвалидированная подпись может снова стать применимой. После отмены проверьте новое состояние, а также deadline и другие разрешения: одна операция не отзывает всё сразу.

  • инструмент и адрес Permit2 проверены по официальной реализации;
  • понятно, какой owner инициирует отмену;
  • маска соответствует целевым nonce;
  • подтверждён результат транзакции;
  • базовый approve и AllowanceTransfer проверены отдельно.
FAQ

Частые вопросы

Nonce должен расти по порядку?

В SignatureTransfer нет требования последовательного использования разных nonce.

Один и тот же nonce можно применить повторно?

После успешного расходования или инвалидирования в этой карте owner – нельзя.

Неуспешный вызов сжигает nonce?

Если транзакция полностью reverted, изменения bitmap откатываются; проверяйте актуальное состояние.

Отзыв approve отменяет подпись навсегда?

Нет. Он меняет базовый allowance, а не bitmap; учитывайте возможное повторное разрешение и deadline.

Bitmap относится ко всем кошелькам?

Нет. Состояние привязано к owner, конкретному Permit2 и сети.

Итоговая проверка

Чек-лист: permit2 nonce bitmap: как одноразовая подпись защищается от повтора

  • модуль определён как SignatureTransfer;
  • сеть, контракт и owner проверены;
  • nonce прочитан из сообщения;
  • позиция бита рассчитана точно;
  • исполнение или отмена подтверждены состоянием;
  • отдельные approve и AllowanceTransfer не забыты.

Материал подготовлен редакцией сайта и проверен 25 октября 2026 года. Условия бирж, кошельков и блокчейн-сетей могут меняться. Перед операцией сверяйте данные в интерфейсе выбранного сервиса.