Owned input — это полный object ref, а не один адрес

В Sui устойчивым именем объекта служит ObjectID, но конкретный input подписывается как снимок ID + version + digest. Digest связывает ссылку с содержимым этой версии. Для address-owned object также важен текущий owner: правильный ID не даёт sender права использовать объект, который уже передан другому адресу или вложен в другой object.

Что сопоставить между signed input и текущим state
ПолеВ подписанных байтахВ текущем object stateВывод при расхождении
Object IDИдентификатор gas/owned inputТот же объектДругой ID — вообще другой input
VersionВерсия на момент сборкиПоследняя доступная версияСтарая версия, вероятно, уже consumed
DigestCommitment к содержимому версииDigest текущей версииДаже при том же ID байты state уже другие
OwnerSender ожидал право использованияAddress/Object/Shared/Immutable ownerНужно заново доказать authority и тип input
Что сопоставить между signed input и текущим state
Поле
Object ID
В подписанных байтах
Идентификатор gas/owned input
В текущем object state
Тот же объект
Вывод при расхождении
Другой ID — вообще другой input
Поле
Version
В подписанных байтах
Версия на момент сборки
В текущем object state
Последняя доступная версия
Вывод при расхождении
Старая версия, вероятно, уже consumed
Поле
Digest
В подписанных байтах
Commitment к содержимому версии
В текущем object state
Digest текущей версии
Вывод при расхождении
Даже при том же ID байты state уже другие
Поле
Owner
В подписанных байтах
Sender ожидал право использования
В текущем object state
Address/Object/Shared/Immutable owner
Вывод при расхождении
Нужно заново доказать authority и тип input

Gas coin подчиняется той же модели owned object. Он не является вечным балансом по адресу: транзакция использует конкретный Coin<SUI> ref, списывает gas и в effects указывает актуальный gas object. Поэтому старый wallet cache после любой исполненной транзакции может содержать уже недействительные version и digest. Общую проверку статуса не заменяет сообщение кошелька.

Effects отвечают, был ли input уже использован

Диагностика одного подписанного intent

  1. 1
    Зафиксировать сеть и signed bytes

    Сохраните chain, sender, transaction digest, payload, gas budget и каждый input ref. Не собирайте третью версию операции во время проверки.

  2. 2
    Найти transaction effects

    Запросите digest через два актуальных fullnode/explorer источника. Сохраните checkpoint или иной финальный контекст, status, gas object и списки object changes.

  3. 3
    Если effects есть — проверить бизнес-state

    Даже failure status расходует gas и выдаёт новую ссылку gas object. При success отдельно подтвердите получателя, созданные/изменённые objects и события.

  4. 4
    Если effects нет — прочитать каждый object ID

    На одном свежем state snapshot сравните version, digest, owner и previous transaction. Первый расходящийся owned ref объясняет stale input точнее общего текста ошибки.

  5. 5
    Классифицировать lock

    Если два разных digest были подписаны с одним owned ref, ищите certificate/effects каждого. Не пытайтесь победить lock новыми конкурентными подписями.

  6. 6
    Только затем пересобрать

    Получите свежие refs, выберите доступный gas coin, повторно проверьте payload и подпишите новый intent один раз.

Stale, locked и shared — разные ветки
НаблюдениеЧто оно означаетСледующее действие
Текущая version выше signed versionЭта версия object уже смениласьНайти previous transaction и её effects
Version та же, digest другойSigned ref не аутентифицирует текущие данныеОстановиться и перепроверить источник/байты
Owner уже другойSender больше не владеет этим input в прежнем видеНе подписывать; установить новый owner path
Два intent используют один owned refВозможен конкурентный lock/equivocationИскать certificate; ждать финала или epoch recovery
Shared input содержит старое числоЭто может быть initial_shared_versionНе заменять его current version механически
Stale, locked и shared — разные ветки
Наблюдение
Текущая version выше signed version
Что оно означает
Эта версия object уже сменилась
Следующее действие
Найти previous transaction и её effects
Наблюдение
Version та же, digest другой
Что оно означает
Signed ref не аутентифицирует текущие данные
Следующее действие
Остановиться и перепроверить источник/байты
Наблюдение
Owner уже другой
Что оно означает
Sender больше не владеет этим input в прежнем виде
Следующее действие
Не подписывать; установить новый owner path
Наблюдение
Два intent используют один owned ref
Что оно означает
Возможен конкурентный lock/equivocation
Следующее действие
Искать certificate; ждать финала или epoch recovery
Наблюдение
Shared input содержит старое число
Что оно означает
Это может быть initial_shared_version
Следующее действие
Не заменять его current version механически

Recovery заканчивается новым object inventory, а не исчезнувшей ошибкой

Итоговый журнал должен связать old transaction digest с effects или доказанным отсутствием effects, перечислить старые и текущие refs, previous transaction каждого изменившегося object, owner и выбранный новый gas coin. После новой отправки снова проверьте effects и целевой state. Похожая внешне очередь sequence number в Aptos и blockhash в Solana имеет другие правила: переносить их recovery-команды в Sui нельзя.

Стоп-сигналы

  • сервис просит seed или private key, чтобы «разблокировать» object;
  • wallet предлагает бесконечно повторять старые signed bytes без проверки digest;
  • источники показывают разные owner/version, но один из них объявляют правильным без checkpoint/state context;
  • Move failure принимают за отсутствие effects и повторяют перевод;
  • shared initial version заменяют последней версией owned-object способом.

Если старый intent не находится, а current ref уже другой, не угадывайте результат по балансу одного gas coin. Проверьте все затронутые object changes и контекст перевода. Базовая памятка о подтверждении перевода помогает отделить сетевой факт от уведомления приложения.

Источники

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

  1. Sui source — transaction inputs and ObjectArg Mysten Labs · Проверено 24 августа 2026 г. в 11:17 GMT+5
  2. Sui source — ObjectRef base types Mysten Labs · Проверено 24 августа 2026 г. в 11:17 GMT+5
  3. Sui source — transaction effects Mysten Labs · Проверено 24 августа 2026 г. в 11:17 GMT+5
  4. Sui Lutris paper — owned locks, effects and reconfiguration Mysten Labs · Проверено 24 августа 2026 г. в 09:25 GMT+5
Материал носит информационный характер и не является индивидуальной рекомендацией. Криптоактивы связаны с риском волатильности, технических сбоев, хищения и полной потери средств.