К основному содержанию
T TON Adoption
← Словарь
NODE/03 · Term

Nonce

Уникальное число, используемое один раз для предотвращения повторов и упорядочивания операций. В TON-кошельках роль nonce играет seqno — счётчик, увеличивающийся с каждой исходящей транзакцией.

Синонимы: сиквенсный номер, seqno, anti-replay

Nonce (от «number used once») — уникальное число, привязанное к операции и не повторяющееся. В блокчейнах nonce служит двум целям: предотвращать replay-attack (повторную отправку той же транзакции) и фиксировать порядок операций.

В TON: seqno

В TON роль nonce исполняет seqno — поле счётчика в data-секции wallet-контракта. Каждая исходящая транзакция:

  1. Подписывается с текущим значением seqno.
  2. Контракт проверяет, что seqno в подписи совпадает с текущим в state.
  3. Если совпадает — транзакция исполняется, seqno инкрементится.
  4. Если не совпадает — транзакция отвергается.

Это значит, что одну и ту же подписанную транзакцию нельзя отправить дважды: после первого исполнения seqno уже стал N+1, а в подписи зашит N. Replay-атака не работает.

Где увидеть

Seqno виден в Tonscan и Tonviewer на странице кошелька. Он же фигурирует в API: метод seqno() контракта возвращает текущее значение. Когда кошелёк готовит новую транзакцию, он сначала вызывает get-метод и узнаёт актуальное число.

Гонки и сбои

Если пользователь быстро отправляет несколько транзакций с одного кошелька, могут возникнуть гонки seqno: первая транзакция ещё не успела попасть в блок, но кошелёк уже считывает старый seqno и подписывает вторую с тем же значением. Сеть примет первую, отвергнет вторую. Современные кошельки (Tonkeeper, MyTonWallet) умеют ждать подтверждения seqno перед следующей подписью, но в высокочастотных сценариях (highload-кошельки для бирж) применяется другая схема — query_id вместо seqno, что позволяет отправлять параллельно.

В других сетях

В Ethereum, Bitcoin, Solana концепция та же, но реализации разные:

  • Ethereum. Account nonce — поле в state, инкрементится при каждой транзакции.
  • Bitcoin. Никакого nonce у адреса нет, но каждая транзакция тратит конкретный UTXO — повторно потратить тот же UTXO невозможно.
  • Solana. Nonce-аккаунты + recent blockhash — гибридная схема.

В контексте подписей nonce также важен в схеме ECDSA (Bitcoin/Ethereum), где утечка nonce при подписи раскрывает приватный ключ. Ed25519 в TON использует deterministic nonce и от этого иммунен.

См. также