Снимок Schedule, который нужен для решения
ПолеЧто отвечаетЧто не доказывает
schedule_idКакое расписание исследуетсяЧто тело уже исполнено
transaction_bodyКакое действие было запланированоЧто оно до сих пор желательно
signaturesКакие ключи уже представленыЧто все требования удовлетворены
executed_timestamp / deletedИсполнено ли или удалено расписаниеУспех внутреннего действия без record
expiration_time / wait_for_expiryКогда и при каком режиме сеть пытается исполнитьТочный момент исполнения
scheduled_transaction_idКак искать запись исполненияНаличие самой записи
Снимок Schedule, который нужен для решения
Поле
schedule_id
Что отвечает
Какое расписание исследуется
Что не доказывает
Что тело уже исполнено
Поле
transaction_body
Что отвечает
Какое действие было запланировано
Что не доказывает
Что оно до сих пор желательно
Поле
signatures
Что отвечает
Какие ключи уже представлены
Что не доказывает
Что все требования удовлетворены
Поле
executed_timestamp / deleted
Что отвечает
Исполнено ли или удалено расписание
Что не доказывает
Успех внутреннего действия без record
Поле
expiration_time / wait_for_expiry
Что отвечает
Когда и при каком режиме сеть пытается исполнить
Что не доказывает
Точный момент исполнения
Поле
scheduled_transaction_id
Что отвечает
Как искать запись исполнения
Что не доказывает
Наличие самой записи

Не смешивайте две схемы. Native ScheduleInfo возвращает scheduledTransactionBody, primitive signers, execution_time либо deletion_time и scheduledTransactionID. Mirror REST называет близкие поля transaction_body, signatures, executed_timestamp и deleted, но его schedule endpoint не возвращает scheduled_transaction_id. Берите этот ID из receipt ScheduleCreate или native ScheduleInfo, а затем ищите Mirror transaction с фильтром scheduled=true.

Создание Schedule и исполнение тела — разные события

ScheduleCreate записывает расписание и возвращает schedule ID. Успех этой транзакции подтверждает создание объекта, а не перевод, token operation или contract call внутри него. Для запланированного тела сеть формирует отдельный scheduled transaction ID; именно по нему затем ищут record исполнения.

Сохраните schedule ID, scheduled transaction ID и transaction_body в одном расследовании. Если интерфейс показывает только «scheduled», этого недостаточно: из decoded body проверьте получателя, сумму, токен или contract call, а payer_account_id сверяйте отдельным полем ScheduleInfo.

ScheduleSign активирует ключи для неизменяемого body

После создания нельзя заменить тело внутри существующего Schedule. ScheduleSign ссылается на schedule ID, а сеть активирует соответствующие primitive keys для связанного с ним неизменяемого scheduled body. Перед подписью декодируйте body и сравните его с согласованным действием. При наличии admin key неверный Schedule можно удалить; без него отменить объект нельзя.

Список signatories не равен готовому счётчику недостающих подписей

Native ScheduleInfo возвращает активные primitive signers, а Mirror — наблюдённые signatures. ScheduleInfo может не включить подпись, которую сеть сочла маловероятно нужной. Ни один ответ не выдаёт готовый список недостающих требований: сопоставьте body с ключами аккаунтов, токенов, контрактов и других затронутых сущностей. Threshold key допускает разные комбинации, поэтому простой подсчёт даёт ложный ответ.

Response code не заменяет чтение lifecycle
КодЧто он доказываетЧего из него не следует
201 INVALID_SCHEDULE_IDОбъект не найден, expired, deleted или executedКакой именно финал произошёл
202 SCHEDULE_IS_IMMUTABLEAdmin key не заданЧто Schedule не сможет исполниться
205 NO_NEW_VALID_SIGNATURESЭтот вызов не добавил новую валидную подпись required signerЧто все подписи уже собраны
206 / 208Required signers не разрешаются либо часть signatures невалиднаЧто повтор без исправления безопасен
212 / 213Schedule уже deleted либо executedУспех scheduled body без отдельного record
314 SCHEDULE_PENDING_EXPIRATIONExpiry пройден, но execution-if-needed и удаление ещё обрабатываютсяЧто можно создавать замену
Response code не заменяет чтение lifecycle
Код
201 INVALID_SCHEDULE_ID
Что он доказывает
Объект не найден, expired, deleted или executed
Чего из него не следует
Какой именно финал произошёл
Код
202 SCHEDULE_IS_IMMUTABLE
Что он доказывает
Admin key не задан
Чего из него не следует
Что Schedule не сможет исполниться
Код
205 NO_NEW_VALID_SIGNATURES
Что он доказывает
Этот вызов не добавил новую валидную подпись required signer
Чего из него не следует
Что все подписи уже собраны
Код
206 / 208
Что он доказывает
Required signers не разрешаются либо часть signatures невалидна
Чего из него не следует
Что повтор без исправления безопасен
Код
212 / 213
Что он доказывает
Schedule уже deleted либо executed
Чего из него не следует
Успех scheduled body без отдельного record
Код
314 SCHEDULE_PENDING_EXPIRATION
Что он доказывает
Expiry пройден, но execution-if-needed и удаление ещё обрабатываются
Чего из него не следует
Что можно создавать замену

Как проверить готовность без догадок

  1. 1
    Зафиксируйте тело

    Декодируйте неизменяемый transaction_body и перечислите затрагиваемые сущности.

  2. 2
    Соберите текущие key structures

    Читайте ключи и threshold-условия из актуального network state, а не из старой заявки.

  3. 3
    Сопоставьте signatories

    Отметьте, какие из допустимых ветвей ключей уже представлены в ScheduleInfo.

  4. 4
    Проверьте lifecycle

    Перед новой подписью снова прочитайте deleted, executed_timestamp и expiration_time.

wait_for_expiry меняет момент попытки исполнения

Как читать состояние Schedule
НаблюдениеЧто это значитСледующее действие
executed_timestamp заполненСеть выполнила scheduled transactionНайти record и проверить его result/state
deleted = trueРасписание удаленоНе собирать подписи; выяснить основание удаления
До expiry, wait_for_expiry = falseИсполнение возможно после достаточной авторизацииПроверить недостающие требования и payer
До expiry, wait_for_expiry = trueДаже достаточные подписи ждут expiryНе обещать немедленное исполнение
Expiry прошёл, executed_timestamp пустСтатус ещё не финален: возможен SCHEDULE_PENDING_EXPIRATION и lag MirrorНе создавать замену; дождаться expiry-processing и догоняющей индексации, затем проверить историю Schedule и scheduled record
Как читать состояние Schedule
Наблюдение
executed_timestamp заполнен
Что это значит
Сеть выполнила scheduled transaction
Следующее действие
Найти record и проверить его result/state
Наблюдение
deleted = true
Что это значит
Расписание удалено
Следующее действие
Не собирать подписи; выяснить основание удаления
Наблюдение
До expiry, wait_for_expiry = false
Что это значит
Исполнение возможно после достаточной авторизации
Следующее действие
Проверить недостающие требования и payer
Наблюдение
До expiry, wait_for_expiry = true
Что это значит
Даже достаточные подписи ждут expiry
Следующее действие
Не обещать немедленное исполнение
Наблюдение
Expiry прошёл, executed_timestamp пуст
Что это значит
Статус ещё не финален: возможен SCHEDULE_PENDING_EXPIRATION и lag Mirror
Следующее действие
Не создавать замену; дождаться expiry-processing и догоняющей индексации, затем проверить историю Schedule и scheduled record

При wait_for_expiry = false сеть передаёт scheduled transaction на исполнение, когда авторизация достаточна; успех самого действия всё равно определяет его record. При wait_for_expiry = true оценка откладывается до срока, а исполнение происходит в ближайшее доступное consensus time на best-effort основе. Throttling, доступность fee payer и проверки самой операции не позволяют обещать бизнес-результат в ту же секунду, когда появилась последняя подпись.

Executed timestamp открывает проверку, а не закрывает её

Найдите scheduled transaction по scheduled_transaction_id, запросив transaction endpoint с фильтром scheduled=true, и прочитайте consensus result. Требуйте result SUCCESS, затем проверьте наблюдаемый эффект тела: новый token balance, owner, allowance, contract event или другое ожидаемое состояние. Успешная ScheduleSign сообщает только о принятой подписи; она не заменяет record внутренней транзакции.

Recovery по доказанному состоянию
СостояниеБезопасное действиеДоказательство завершения
Не хватает допустимой подписиПодписать после повторной проверки bodySignatory появился, затем найден execution record
Неверное тело, есть admin keyУдалить Schedule и создать новыйdeleted = true у старого, новый ID отделён
Неверное тело, admin key нетНе добавлять свою подпись, предупредить участников и мониторить; удалить Schedule нельзяТолько отсутствие execution record после окончательной обработки expiry доказывает, что тело не исполнилось
Executed, но effect не виденПрочитать result и дочерние данные recordResult и network state объясняют исход
Deleted или expiry окончательно обработанНе отправлять подписи повторноИстория Mirror догнала consensus, а scheduled record и executed_timestamp проверены отдельно
Recovery по доказанному состоянию
Состояние
Не хватает допустимой подписи
Безопасное действие
Подписать после повторной проверки body
Доказательство завершения
Signatory появился, затем найден execution record
Состояние
Неверное тело, есть admin key
Безопасное действие
Удалить Schedule и создать новый
Доказательство завершения
deleted = true у старого, новый ID отделён
Состояние
Неверное тело, admin key нет
Безопасное действие
Не добавлять свою подпись, предупредить участников и мониторить; удалить Schedule нельзя
Доказательство завершения
Только отсутствие execution record после окончательной обработки expiry доказывает, что тело не исполнилось
Состояние
Executed, но effect не виден
Безопасное действие
Прочитать result и дочерние данные record
Доказательство завершения
Result и network state объясняют исход
Состояние
Deleted или expiry окончательно обработан
Безопасное действие
Не отправлять подписи повторно
Доказательство завершения
История Mirror догнала consensus, а scheduled record и executed_timestamp проверены отдельно

Если тело содержит token transfer, отдельно проверьте ассоциацию и требуемую подпись получателя. Общий разбор подписи помогает не подтвердить другое действие, а модель multisig полезна для организационных ролей — но Schedule остаётся отдельным on-chain объектом со своим lifecycle.

Финальную запись проверяйте тем же способом, что обычный перевод: идентификатор, consensus result и изменение состояния должны указывать на одно действие.

Источники

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

  1. Hedera Docs — Scheduled Transactions Hedera · Проверено 30 августа 2026 г. в 16:16 GMT+5
  2. Hedera Mirror Node REST API — Get Schedule by ID Hedera · Проверено 30 августа 2026 г. в 16:16 GMT+5
  3. Hedera Mirror Node REST API — Get Transaction by ID Hedera · Проверено 30 августа 2026 г. в 16:16 GMT+5
  4. Hedera protobuf — ScheduleInfo Hedera · Проверено 30 августа 2026 г. в 16:16 GMT+5
  5. Hedera Mirror Node — OpenAPI v1 Hedera · Проверено 30 августа 2026 г. в 16:16 GMT+5
  6. Hedera protobuf — ResponseCodeEnum Hedera · Проверено 30 августа 2026 г. в 16:16 GMT+5
Материал носит информационный характер и не является индивидуальной рекомендацией. Криптоактивы связаны с риском волатильности, технических сбоев, хищения и полной потери средств.