Onchain number — это следующий свободный слот

Для обычной транзакции sender подписывает sequence_number. После commit Aptos увеличивает sequence number аккаунта. Поэтому onchain 42 означает, что 0–41 уже разрешены состоянием аккаунта, а следующая ожидаемая обычная транзакция использует 42. Подпись связывает номер с payload, gas, expiration, chain ID и authenticator.

Сравнение signed и onchain sequence number
Signed numberТипичное состояниеЧто доказать
Меньше onchainСлишком старый или уже committed slotHash предыдущей транзакции и отсутствие нового commit
Равен onchainСледующий кандидатPending hash, expiration, gas и приём конкретным fullnode
Выше onchainПропуск в очередиНаличие всех промежуточных номеров или причина их отсутствия
u64::MAX + replay nonceВозможный orderless форматReplayProtector и feature/version, а не account queue
Сравнение signed и onchain sequence number
Signed number
Меньше onchain
Типичное состояние
Слишком старый или уже committed slot
Что доказать
Hash предыдущей транзакции и отсутствие нового commit
Signed number
Равен onchain
Типичное состояние
Следующий кандидат
Что доказать
Pending hash, expiration, gas и приём конкретным fullnode
Signed number
Выше onchain
Типичное состояние
Пропуск в очереди
Что доказать
Наличие всех промежуточных номеров или причина их отсутствия
Signed number
u64::MAX + replay nonce
Типичное состояние
Возможный orderless формат
Что доказать
ReplayProtector и feature/version, а не account queue

Это похоже на nonce Ethereum только общей идеей защиты от replay. Правила mempool, replacement и committed API различаются, поэтому Ethereum-инструкцию нельзя переносить на Aptos.

Высокий номер ждёт закрытия пропуска

Runbook для одной sender account

  1. 1
    Прочитать committed state

    Получите account sequence_number с двух синхронизированных fullnodes и зафиксируйте ledger version/time.

  2. 2
    Инвентаризировать локальные подписи

    Для каждого номера сохраните transaction hash, payload digest, gas settings, expiration, submit time и endpoint. Не подписывайте новый intent на занятом номере.

  3. 3
    Проверить hash

    Различите PendingTransaction без ledger version и committed UserTransaction с success/vm_status. 404 одного узла не доказывает глобальное отсутствие.

  4. 4
    Найти первый пропуск

    Если signed number выше onchain, проверьте каждый номер начиная с onchain. Очередь не починится повтором самого высокого номера.

  5. 5
    Проверить expiration

    Истёкшая неподтверждённая транзакция не должна считаться будущим commit; после обновления состояния пересоберите нужный слот.

  6. 6
    Сверить результат

    После commit перечитайте account number и бизнес-state. Увеличение sequence number не означает, что любой ожидаемый эффект понят без success/vm_status.

seqno TON тоже задаёт порядок внешних сообщений кошелька, а blockhash Solana ограничивает свежесть подписи, но это отдельные протоколы. Для Aptos источником решения остаются signed request, REST response и committed account state одной сети. Не смешивайте очереди разных sender accounts: sequence number принадлежит аккаунту, а не dApp или получателю.

Пересобрать можно только после классификации первого номера

Stop и recovery
СигналИнтерпретацияДействие
SEQUENCE_NUMBER_TOO_OLDSlot уже позади committed stateНайти committed tx; не повторять старую подпись
SEQUENCE_NUMBER_TOO_NEWЕсть пропуск или node state отстаётСверить fullnode и заполнить/дождаться первого номера
Hash pending до expirationТранзакция принята одним mempool, но не committedНе создавать конфликтующий intent; проверить peers/endpoints
TRANSACTION_EXPIREDПодписанный request больше невалиденОбновить sequence state, expiration и gas, подписать заново
ReplayProtector=nonceЭто orderless transactionПерейти к nonce/expiration workflow AIP-123
Stop и recovery
Сигнал
SEQUENCE_NUMBER_TOO_OLD
Интерпретация
Slot уже позади committed state
Действие
Найти committed tx; не повторять старую подпись
Сигнал
SEQUENCE_NUMBER_TOO_NEW
Интерпретация
Есть пропуск или node state отстаёт
Действие
Сверить fullnode и заполнить/дождаться первого номера
Сигнал
Hash pending до expiration
Интерпретация
Транзакция принята одним mempool, но не committed
Действие
Не создавать конфликтующий intent; проверить peers/endpoints
Сигнал
TRANSACTION_EXPIRED
Интерпретация
Подписанный request больше невалиден
Действие
Обновить sequence state, expiration и gas, подписать заново
Сигнал
ReplayProtector=nonce
Интерпретация
Это orderless transaction
Действие
Перейти к nonce/expiration workflow AIP-123

Recovery record должен включать sender, chain ID, ledger version, committed sequence number, все затронутые signed numbers/hashes, payload digests, expiration, endpoints и финальные success/vm_status. Если два разных intent подписаны на одном slot, не пытайтесь «ускорить оба»: сначала определите единственный нужный payload и наблюдайте его commit либо expiration. Новый body всегда требует новой проверки gas и expiration. Чтобы не спутать приём в mempool с исполнением, отдельно проверьте статус транзакции и целевой state.

Источники

Мы используем прямые ссылки и фиксируем дату проверки. Полный текст чужих материалов не перепечатывается.

  1. Aptos Core — REST transaction types Aptos Labs · Проверено 23 августа 2026 г. в 20:00 GMT+5
  2. Aptos Core — VM validation status Aptos Labs · Проверено 23 августа 2026 г. в 20:00 GMT+5
  3. Aptos Framework — account sequence number Aptos Labs · Проверено 23 августа 2026 г. в 20:00 GMT+5
  4. Aptos AIP-123 — orderless transactions Aptos Foundation · Проверено 23 августа 2026 г. в 20:00 GMT+5
Материал носит информационный характер и не является индивидуальной рекомендацией. Криптоактивы связаны с риском волатильности, технических сбоев, хищения и полной потери средств.