Nonce
Уникальное число, используемое один раз для предотвращения повторов и упорядочивания операций. В TON-кошельках роль nonce играет seqno — счётчик, увеличивающийся с каждой исходящей транзакцией.
Синонимы: сиквенсный номер, seqno, anti-replay
Nonce (от «number used once») — уникальное число, привязанное к операции и не повторяющееся. В блокчейнах nonce служит двум целям: предотвращать replay-attack (повторную отправку той же транзакции) и фиксировать порядок операций.
В TON: seqno
В TON роль nonce исполняет seqno — поле счётчика в data-секции wallet-контракта. Каждая исходящая транзакция:
- Подписывается с текущим значением seqno.
- Контракт проверяет, что seqno в подписи совпадает с текущим в state.
- Если совпадает — транзакция исполняется, seqno инкрементится.
- Если не совпадает — транзакция отвергается.
Это значит, что одну и ту же подписанную транзакцию нельзя отправить дважды: после первого исполнения 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 и от этого иммунен.