Только в образовательных целях; не является инвестиционным советом или инвестиционной рекомендацией. Инвестиции могут привести к убыткам.
Краткий ответ
Nonce — это значение, смысл которого задается конкретным пространством имен протокола. Оно не обязательно является случайным числом или универсальным значением, «используемым один раз». В Ethereum nonce состояния внешне управляемой учетной записи упорядочивает и подтверждает транзакции этого отправителя. Контракт может хранить отдельные прикладные nonce для разрешений и подписанных поручений. Смарт-аккаунты ERC-4337 могут применять структурированный nonce UserOperation с параллельными каналами ключей и последовательностей. В Bitcoin Proof-of-Work nonce заголовка блока — ограниченное поле перебора кандидатов хеша.
Эти значения нельзя подменять друг другом. Nonce учетной записи Ethereum не защищает произвольную подпись типизированных данных, если приложение не проверяет собственный домен и поле защиты от повторного воспроизведения. Nonce заголовка PoW не упорядочивает транзакции учетной записи. Одинаковое числовое значение у разных отправителей, контрактов, сетей или каналов описывает разное состояние.
Как это работает
- Перед чтением числа определите пространство имен: транзакция EOA, состояние контрактной учетной записи, хранилище приложения,
UserOperationERC-4337 или заголовок конкретной PoW-сети. Зафиксируйте chain ID, форк и версию протокола, учетную запись или владельца, проверяющий контракт и домен, EntryPoint либо формат заголовка. - Читайте авторитетное состояние с явным тегом блока. Отличайте канонический nonce EOA от pending-счетчика провайдера, значения
nonces(owner)в хранилище приложения, ключа и последовательности ERC-4337 и локального счетчика перебора заголовков майнера. Совпадение независимых RPC-ответов не заменяет проверку канонических квитанции и состояния. - Формируйте полную цепочку подписания. Записывайте отправителя или владельца, сеть и домен, nonce, полезную нагрузку, срок действия, проверяющий контракт, хеш транзакции или сообщения и все замены. Для транзакций Ethereum правила домена сети, такие как EIP-155, дополняют nonce учетной записи; один nonce не дает полной защиты от межсетевого повторного воспроизведения.
- Выделяйте номер в правильном канале. Координируйте параллельных подписантов EOA, чтобы каждая каноническая последовательность назначалась один раз; сохраняйте пробелы и историю замен с тем же nonce. Для приложения или смарт-аккаунта следуйте атомарной проверке с увеличением и правилам каналов данного контракта, не предполагая единый глобальный счетчик.
- Отправляйте по надлежащим правилам допуска. Политики pending-транзакций и замен у execution-клиентов локальны; бандлеры ERC-4337 проверяют объекты
UserOperationпо правилам EntryPoint и аккаунта; подпись EIP-712 или permit может быть передана внутри чужой транзакции. Ни один локальный путь допуска не доказывает каноническое включение. - Отслеживайте полный результат. Различайте отклоненную, ожидающую, поставленную в очередь, замененную, успешно включенную, включенную с
status = 0, удаленную реорганизацией и финализированную транзакции. Включенная транзакция Ethereum увеличивает nonce отправителя даже при откате исполнения EVM; изменение прикладного nonce в хранилище внутри откатившегося вызова отменяется. - Перед повтором сверяйте состояние. Проверьте каноническую квитанцию, хеш блока, nonce отправителя, хранилище приложения, событие или квитанцию ERC-4337 и финальность. Для PoW проверяйте весь заголовок и целевое значение, а не только nonce; исчерпав конечное поле nonce, майнеры меняют другие влияющие на заголовок данные и получают новое пространство поиска.
Разобранные примеры
- Включенный откат исполнения расходует nonce EOA. Канонический nonce отправителя равен
12. Транзакция с nonce12включена сstatus = 0, использует50,000газа по30 gweiи стоит50,000 * 30 gwei = 0.0015 ETH. Изменения контракта отменяются, но канонический nonce отправителя становится13. Если реорганизация удалит блок, nonce может вернуться к12; кошелек должен заново проверить всю историю транзакции. - Прикладной nonce и nonce ретранслятора различаются. Nonce EOA владельца равен
18; токен ERC-2612 сообщаетnonces(owner) = 7; nonce EOA ретранслятора равен42. Успешный permit расходует прикладной nonce7, меняя его на8, а включение повышает nonce ретранслятора до43и оставляет nonce EOA владельца равным18. Если весь вызов откатывается, nonce ретранслятора все равно становится43, но хранилище токена возвращается к7. - Каналы ERC-4337. В учебном выражении упаковки
nonce = (key << 64) | sequenceключ5и последовательность9дают5 * 2^64 + 9 = 92,233,720,368,547,758,089, а последовательность10дает92,233,720,368,547,758,090. Независимые ключ6и последовательность0дают110,680,464,442,257,309,696. Параллельная работа все равно зависит от логики проверки смарт-аккаунта и не связана с nonce EOA-транзакции бандлера. - Поисковый nonce PoW. Nonce заголовка Bitcoin имеет размер
32 bits, поэтому содержит2^32 = 4,294,967,296числовых кандидатов. При гипотетической скорости100 TH/sперебор этого пространства занимает4,294,967,296 / 100,000,000,000,000 = 0.00004294967296 seconds = 42.94967296 microseconds. Майнеры меняют extraNonce в coinbase-транзакции, время или набор транзакций, чтобы изменить корень Merkle и получить новые заголовки; это поле не является состоянием защиты учетной записи от повторного воспроизведения.
Риски
- Смешение пространств nonce EOA, контракта, приложения, ERC-4337 и PoW.
- Чтение nonce не той сети, ветви, контракта или EntryPoint.
- Устаревший, противоречивый или вредоносный ответ RPC.
- Назначение одного nonce транзакции EOA параллельными подписантами.
- Блокировка более поздних локальных кандидатов из-за пропуска nonce.
- Принятие pending-nonce провайдера за каноническое состояние.
- Игнорирование расхода nonce EOA и газа при включенном откате.
- Не восстановленная после реорганизации история nonce и кандидатов.
- Несоответствие замены с тем же nonce политике комиссий целевого узла.
- Предположение, что замена глобально удалила старую подписанную транзакцию.
- Связывание равных числовых nonce разных отправителей или доменов.
- Отсутствие chain ID или другого обязательного разделителя домена подписи.
- Неатомарная проверка и инкремент прикладного nonce.
- Неверные владелец, срок, разделитель домена или токен ERC-2612.
- Повтор подписи приложения в другой сети, контракте или версии.
- Толкование nonce состояния контрактной учетной записи как общего счетчика вызовов.
- Неверная упаковка ключа nonce или разрядности последовательности ERC-4337.
- Смешение nonce EOA бандлера с nonce
UserOperationсмарт-аккаунта. - Изменение поведения прикладного nonce из-за обновления прокси или конфликта хранилища.
- Принятие конечного поискового nonce PoW за авторизацию, состояние защиты от повтора или самостоятельное доказательство.
Распространенные заблуждения
- Все поля nonce имеют один смысл и глобально используются единожды.
- Более высокий nonce делает транзакцию безопаснее, быстрее или финальнее.
- Откатившаяся транзакция Ethereum не расходует nonce отправителя.
- Один nonce предотвращает любой повтор между сетями, контрактами и типизированными сообщениями.
- У каждого смарт-аккаунта ERC-4337 есть один линейный счетчик, идентичный nonce транзакции EOA.
Связанные темы
Источники
- Ethereum accounts - Ethereum.org (дата обращения: 2026-08-13)
- Transactions - Ethereum.org (дата обращения: 2026-08-13)
- EIP-2681: Limit account nonce to 2^64-1 - Ethereum Improvement Proposals (дата обращения: 2026-08-13)
- EIP-155: Simple replay attack protection - Ethereum Improvement Proposals (дата обращения: 2026-08-13)
- EIP-712: Typed structured data hashing and signing - Ethereum Improvement Proposals (дата обращения: 2026-08-13)
- ERC-2612: Permit Extension for EIP-20 Signed Approvals - Ethereum Improvement Proposals (дата обращения: 2026-08-13)
- ERC-4337: Account Abstraction Using Alt Mempool - Ethereum Improvement Proposals (дата обращения: 2026-08-13)
- Block Chain - Bitcoin Developer Documentation (дата обращения: 2026-08-13)