﻿---
title: "Пространства nonce в криптосистемах"
description: "Практическое руководство по nonce учетных записей Ethereum, прикладным nonce для защиты от повторного воспроизведения, параллельным каналам ключа и последовательности ERC-4337 и поисковым nonce заголовков блоков Proof-of-Work."
image: "https://wiki.fcontext.com/og.png"
---

> Documentation Index
> Fetch the complete documentation index at: https://wiki.fcontext.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Пространства nonce в криптосистемах

> Только в образовательных целях; не является инвестиционным советом или инвестиционной рекомендацией. Инвестиции могут привести к убыткам.

<a id="answer"></a>

## Краткий ответ

Nonce — это значение, смысл которого задается конкретным пространством имен протокола. Оно не обязательно является случайным числом или универсальным значением, «используемым один раз». В Ethereum nonce состояния внешне управляемой учетной записи упорядочивает и подтверждает транзакции этого отправителя. Контракт может хранить отдельные прикладные nonce для разрешений и подписанных поручений. Смарт-аккаунты ERC-4337 могут применять структурированный nonce `UserOperation` с параллельными каналами ключей и последовательностей. В Bitcoin Proof-of-Work nonce заголовка блока — ограниченное поле перебора кандидатов хеша.

Эти значения нельзя подменять друг другом. Nonce учетной записи Ethereum не защищает произвольную подпись типизированных данных, если приложение не проверяет собственный домен и поле защиты от повторного воспроизведения. Nonce заголовка PoW не упорядочивает транзакции учетной записи. Одинаковое числовое значение у разных отправителей, контрактов, сетей или каналов описывает разное состояние.

<a id="mechanism"></a>

## Как это работает

1. Перед чтением числа определите пространство имен: транзакция EOA, состояние контрактной учетной записи, хранилище приложения, `UserOperation` ERC-4337 или заголовок конкретной PoW-сети. Зафиксируйте chain ID, форк и версию протокола, учетную запись или владельца, проверяющий контракт и домен, EntryPoint либо формат заголовка.
2. Читайте авторитетное состояние с явным тегом блока. Отличайте канонический nonce EOA от pending-счетчика провайдера, значения `nonces(owner)` в хранилище приложения, ключа и последовательности ERC-4337 и локального счетчика перебора заголовков майнера. Совпадение независимых RPC-ответов не заменяет проверку канонических квитанции и состояния.
3. Формируйте полную цепочку подписания. Записывайте отправителя или владельца, сеть и домен, nonce, полезную нагрузку, срок действия, проверяющий контракт, хеш транзакции или сообщения и все замены. Для транзакций Ethereum правила домена сети, такие как EIP-155, дополняют nonce учетной записи; один nonce не дает полной защиты от межсетевого повторного воспроизведения.
4. Выделяйте номер в правильном канале. Координируйте параллельных подписантов EOA, чтобы каждая каноническая последовательность назначалась один раз; сохраняйте пробелы и историю замен с тем же nonce. Для приложения или смарт-аккаунта следуйте атомарной проверке с увеличением и правилам каналов данного контракта, не предполагая единый глобальный счетчик.
5. Отправляйте по надлежащим правилам допуска. Политики pending-транзакций и замен у execution-клиентов локальны; бандлеры ERC-4337 проверяют объекты `UserOperation` по правилам EntryPoint и аккаунта; подпись EIP-712 или permit может быть передана внутри чужой транзакции. Ни один локальный путь допуска не доказывает каноническое включение.
6. Отслеживайте полный результат. Различайте отклоненную, ожидающую, поставленную в очередь, замененную, успешно включенную, включенную с `status = 0`, удаленную реорганизацией и финализированную транзакции. Включенная транзакция Ethereum увеличивает nonce отправителя даже при откате исполнения EVM; изменение прикладного nonce в хранилище внутри откатившегося вызова отменяется.
7. Перед повтором сверяйте состояние. Проверьте каноническую квитанцию, хеш блока, nonce отправителя, хранилище приложения, событие или квитанцию ERC-4337 и финальность. Для PoW проверяйте весь заголовок и целевое значение, а не только nonce; исчерпав конечное поле nonce, майнеры меняют другие влияющие на заголовок данные и получают новое пространство поиска.

<a id="example"></a>

## Разобранные примеры

- **Включенный откат исполнения расходует nonce EOA.** Канонический nonce отправителя равен `12`. Транзакция с nonce `12` включена с `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 расходует прикладной nonce `7`, меняя его на `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 и получить новые заголовки; это поле не является состоянием защиты учетной записи от повторного воспроизведения.

<a id="risks"></a>

## Риски

- Смешение пространств 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 за авторизацию, состояние защиты от повтора или самостоятельное доказательство.

<a id="misconceptions"></a>

## Распространенные заблуждения

- Все поля nonce имеют один смысл и глобально используются единожды.
- Более высокий nonce делает транзакцию безопаснее, быстрее или финальнее.
- Откатившаяся транзакция Ethereum не расходует nonce отправителя.
- Один nonce предотвращает любой повтор между сетями, контрактами и типизированными сообщениями.
- У каждого смарт-аккаунта ERC-4337 есть один линейный счетчик, идентичный nonce транзакции EOA.

<a id="related"></a>

## Связанные темы

- [Модель на основе учетных записей](/ru/crypto/account-based-model/)
- [Замена транзакций в мемпуле](/ru/crypto/mempool-replacement/)
- [Абстракция учетных записей](/ru/crypto/account-abstraction/)

<a id="sources"></a>

## Источники

- [Ethereum accounts](https://ethereum.org/developers/docs/accounts/) - Ethereum.org (дата обращения: 2026-08-13)
- [Transactions](https://ethereum.org/developers/docs/transactions/) - Ethereum.org (дата обращения: 2026-08-13)
- [EIP-2681: Limit account nonce to 2^64-1](https://eips.ethereum.org/EIPS/eip-2681) - Ethereum Improvement Proposals (дата обращения: 2026-08-13)
- [EIP-155: Simple replay attack protection](https://eips.ethereum.org/EIPS/eip-155) - Ethereum Improvement Proposals (дата обращения: 2026-08-13)
- [EIP-712: Typed structured data hashing and signing](https://eips.ethereum.org/EIPS/eip-712) - Ethereum Improvement Proposals (дата обращения: 2026-08-13)
- [ERC-2612: Permit Extension for EIP-20 Signed Approvals](https://eips.ethereum.org/EIPS/eip-2612) - Ethereum Improvement Proposals (дата обращения: 2026-08-13)
- [ERC-4337: Account Abstraction Using Alt Mempool](https://eips.ethereum.org/EIPS/eip-4337) - Ethereum Improvement Proposals (дата обращения: 2026-08-13)
- [Block Chain](https://developer.bitcoin.org/reference/block_chain.html) - Bitcoin Developer Documentation (дата обращения: 2026-08-13)

Source: https://wiki.fcontext.com/ru/crypto/nonce-crypto/index.mdx
