Сначала убедитесь, что проверяете именно ту запись

TTL — число реестров, в течение которых запись остаётся доступной. Для проверки нужен не читаемый фрагмент, а полный `LedgerKey`: сеть, идентификатор контракта (`contract ID`), класс хранения (`durability`: `Temporary` или `Persistent`) и точное значение ключа в формате `ScVal`. `Instance` хранится в записи экземпляра контракта и делит с ним TTL. Одно имя может существовать в разных классах хранения и означать разные данные.

Запросите этот ключ через `getLedgerEntries` и сохраните `latestLedger`, `lastModifiedLedgerSeq`, значение и `liveUntilLedgerSeq`. RPC показывает только доступное сейчас состояние, а не всю историю. Если источники расходятся, сначала сравните сеть, номер последнего реестра и полноту данных. Устройство RPC объясняет, почему ответ одного провайдера нельзя выдавать за состояние всей сети.

Решение по типу и состоянию записи
НаблюдениеСостояниеДопустимое действиеПроверка результата
Текущий номер реестра не больше `liveUntilLedger`Запись живаПродлить TTL заранее, если срок слишком близокТот же `LedgerKey` возвращает прежнее значение и не меньший целевой TTL
TTL закончился, тип `Persistent`Запись в архивеСимулировать исходный вызов для списка восстановления; отдельное ручное восстановление нужно лишь в редких случаяхЗапись снова читается, затем успешно выполняется исходный вызов
TTL закончился у `Instance` или кода контрактаЭкземпляр или код в архивеПодготовить восстановление связанных записей через симуляциюЗаписи экземпляра и кода читаются, а вызов завершён в реестре
TTL закончился, тип `Temporary`Запись удаленаВосстановления нет; только заново получить данные из доверенного источника, если логика это разрешаетПоявилась новая запись, а источник нового значения зафиксирован
Ключ не найден, тип неизвестенВывод ещё не определёнПроверить идентификатор контракта, кодирование `ScVal`, класс хранения, сеть и RPCТип и состояние записи установлены
Решение по типу и состоянию записи
Наблюдение
Текущий номер реестра не больше `liveUntilLedger`
Состояние
Запись жива
Допустимое действие
Продлить TTL заранее, если срок слишком близок
Проверка результата
Тот же `LedgerKey` возвращает прежнее значение и не меньший целевой TTL
Наблюдение
TTL закончился, тип `Persistent`
Состояние
Запись в архиве
Допустимое действие
Симулировать исходный вызов для списка восстановления; отдельное ручное восстановление нужно лишь в редких случаях
Проверка результата
Запись снова читается, затем успешно выполняется исходный вызов
Наблюдение
TTL закончился у `Instance` или кода контракта
Состояние
Экземпляр или код в архиве
Допустимое действие
Подготовить восстановление связанных записей через симуляцию
Проверка результата
Записи экземпляра и кода читаются, а вызов завершён в реестре
Наблюдение
TTL закончился, тип `Temporary`
Состояние
Запись удалена
Допустимое действие
Восстановления нет; только заново получить данные из доверенного источника, если логика это разрешает
Проверка результата
Появилась новая запись, а источник нового значения зафиксирован
Наблюдение
Ключ не найден, тип неизвестен
Состояние
Вывод ещё не определён
Допустимое действие
Проверить идентификатор контракта, кодирование `ScVal`, класс хранения, сеть и RPC
Проверка результата
Тип и состояние записи установлены

Продлевайте живую запись до истечения TTL

`ExtendFootprintTTLOp` использует часть набора ресурсов только для чтения (`readOnly`) и должен быть единственной операцией в транзакции. Значение `extendTo` задаёт нижнюю границу оставшегося TTL. Если запись уже живёт дольше, сеть не сокращает срок и может ничего не менять. Максимальный TTL задаёт сеть; не переносите число из примера в рабочую конфигурацию.

Данные для операции продления

  • точные `LedgerKey` и их типы, без смешения Temporary, Persistent и Instance;
  • текущий номер реестра и `liveUntilLedger` каждого объекта;
  • набор ресурсов только для чтения (`readOnly`) без тех же записей в наборе чтения и записи (`readWrite`);
  • целевой остаток TTL внутри текущего максимума сети;
  • результат подготовки или симуляции с рассчитанными ресурсами и комиссией.

Protocol 23 обычно восстанавливает запись вместе с вызовом

Для архивного `Persistent` или `Instance` соберите исходный `InvokeHostFunction` и запустите симуляцию на свежем состоянии. Если симуляция обнаружит обращение к архивной записи, она добавит её в список восстановления. Подготовленная транзакция сначала вернёт перечисленные записи, затем выполнит функцию. Арендная плата и комиссия за ресурсы при этом сохраняются.

Транзакция, собранная без симуляции и полного списка восстановления, остановится до доступа к архивным данным. `RestoreFootprintOp` после Protocol 23 нужен редко: например, когда автоматическое восстановление делает вызов слишком большим или разработчик хочет оплатить восстановление отдельно. Архивные ключи помещают в набор чтения и записи (`readWrite`), а набор только для чтения (`readOnly`) оставляют пустым.

Успешная симуляция ещё не доказывает включение. Между реестром, на котором она выполнена, и будущим блоком состояние и стоимость ресурсов могут измениться. Дождитесь записи транзакции в реестре и только затем сравнивайте состояние. Граница между ожиданием и подтверждением описана в гайде о финальности.

Удалённую Temporary можно только создать заново

После окончания TTL `Temporary` удалён. Если контракт допускает новую запись, её значение надо получить предусмотренным способом: из нового обновления оракула, повторяемого вычисления или подписанного прикладного сообщения. Снимок неизвестного RPC, скриншот интерфейса и слова пользователя не восстанавливают происхождение, подтверждённое сетью.

Выбор типа хранилища относится к архитектуре контракта. Балансы и другие незаменимые данные не должны зависеть от ветки, которая после TTL исчезает навсегда. Перед изменением контракта полезно вернуться к базовой модели смарт-контракта: код выполняет заданные переходы, но не угадывает утраченное состояние.

После операции снова прочитайте ту же запись

  • получите окончательный статус транзакции и номер реестра для продления, восстановления или исходного вызова контракта;
  • повторите `getLedgerEntries` для тех же `LedgerKey` и сохраните новый `liveUntilLedgerSeq`;
  • сравните значение с ожидаемым, а не только наличие записи;
  • проверьте прикладной результат исходной функции: баланс, счётчик, владельца или другую конкретную величину;
  • зафиксируйте версии протокола и RPC, номер реестра симуляции, хеш транзакции и параметры сети без секретов.

Если транзакция успешна, но нужное значение не изменилось, восстановление могло пройти без требуемого прикладного действия. Другая причина — проверен неверный `LedgerKey`. Сопоставьте хеш и статус со снимком состояния так же, как при независимом подтверждении перевода.

Источники

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

  1. Stellar Docs — Smart contract state archival Stellar Development Foundation · Проверено 25 августа 2026 г. в 09:18 GMT+5
  2. Stellar Docs — Manual restoration footprint Stellar Development Foundation · Проверено 25 августа 2026 г. в 09:18 GMT+5
  3. Stellar Docs — Extend a persistent entry Stellar Development Foundation · Проверено 25 августа 2026 г. в 09:18 GMT+5
  4. Stellar RPC — getLedgerEntries Stellar Development Foundation · Проверено 25 августа 2026 г. в 09:18 GMT+5
  5. Stellar RPC — simulateTransaction Stellar Development Foundation · Проверено 25 августа 2026 г. в 09:18 GMT+5
Материал носит информационный характер и не является индивидуальной рекомендацией. Криптоактивы связаны с риском волатильности, технических сбоев, хищения и полной потери средств.