Вся развилка записана в одном объекте

Найдите подтверждённую `EscrowCreate`. Её отправитель записан в поле `Account`. Обычный порядковый номер `Sequence` становится `OfferSequence`. Если создание использовало объект `Ticket` вместо обычного номера, в `OfferSequence` ставят его `TicketSequence`. Эта пара нужна и для `EscrowFinish`, и для `EscrowCancel`. В завершающей транзакции поле `Owner` должно повторять исходный `Account`. Отправить её может любой аккаунт, но получатель и направление возврата уже зафиксированы.

Сохраните `Amount`, `Destination`, `FinishAfter`, `CancelAfter`, `Condition`, индекс объекта и номер подтверждённого реестра. `Amount` — удерживаемая сумма, а `Destination` — зафиксированный получатель. `FinishAfter` задаёт временную границу завершения, а `CancelAfter` — временную границу отмены. `Condition` — криптографическое условие, а `Fulfillment` — данные, которые его выполняют. Разбор ниже относится к классическому XRP Escrow.

Если `Amount` представлен объектом токена, отдельно проверьте активность TokenEscrow и правила доверительной линии. У токенов есть дополнительные условия, поэтому ветку классического XRP к ним нельзя переносить автоматически.

Как поля Escrow выбирают доступную операцию
Состояние объектаЧто можно отправитьЧто остановит операцию
Есть будущий `FinishAfter`Пока ничего`EscrowFinish` раньше времени
`FinishAfter` прошёл, `CancelAfter` ещё нет`EscrowFinish`Отсутствующий или неверный `Fulfillment`, если задан `Condition`
Есть `Condition`, но нет `FinishAfter``EscrowFinish` сразу после созданияНет совпадающего выполнения условия
`CancelAfter` прошёл`EscrowCancel`Попытка Finish после истечения
Нет `CancelAfter`Завершение по остальным условиямОтмена никогда не становится доступной
Как поля Escrow выбирают доступную операцию
Состояние объекта
Есть будущий `FinishAfter`
Что можно отправить
Пока ничего
Что остановит операцию
`EscrowFinish` раньше времени
Состояние объекта
`FinishAfter` прошёл, `CancelAfter` ещё нет
Что можно отправить
`EscrowFinish`
Что остановит операцию
Отсутствующий или неверный `Fulfillment`, если задан `Condition`
Состояние объекта
Есть `Condition`, но нет `FinishAfter`
Что можно отправить
`EscrowFinish` сразу после создания
Что остановит операцию
Нет совпадающего выполнения условия
Состояние объекта
`CancelAfter` прошёл
Что можно отправить
`EscrowCancel`
Что остановит операцию
Попытка Finish после истечения
Состояние объекта
Нет `CancelAfter`
Что можно отправить
Завершение по остальным условиям
Что остановит операцию
Отмена никогда не становится доступной

Временную границу задаёт предыдущий реестр

Поля времени считаются от эпохи Ripple. Сеть сравнивает их со временем закрытия предыдущего подтверждённого реестра. Завершение слишком раннее, пока `FinishAfter` позже этого времени. Отмена недоступна, пока `CancelAfter` позже времени предыдущего реестра. Равенство не подпадает под эти два условия отказа. Однако часы устройства не показывают, какой предыдущий реестр увидит следующая транзакция.

Получите свежий подтверждённый реестр и его `close_time`. Если значение ещё не прошло нужную границу, не повышайте комиссию и не меняйте объект: подождите новый подтверждённый реестр. Разница между включением и окончательностью разобрана отдельно.

Condition не раскрывает секрет выполнения

`Condition` — шестнадцатеричное представление криптографического условия PREIMAGE-SHA-256. Для завершения передают исходное `Condition` и соответствующий `Fulfillment`. По одному условию нельзя восстановить секрет. Если байты изменились или относятся к другому объекту, операция не пройдёт.

Не вставляйте `Fulfillment` в публичную форму до отправки: любой аккаунт вправе подать корректный `EscrowFinish`. Это не позволяет переназначить получателя, но посторонний отправитель выберет момент исполнения и заплатит свою комиссию. После `CancelAfter` правильное выполнение условия уже не возвращает ветку завершения.

Finish и Cancel закрывают объект по-разному

Для завершения укажите `Owner` исходного отправителя и его `OfferSequence`. Добавьте `Condition` и `Fulfillment` только если они есть в объекте. При успехе Escrow удаляется, а сумма поступает на неизменяемый `Destination`. Если у получателя включён DepositAuth, авторизация входящего зачисления проверяется отдельно.

Для отмены используются те же `Owner` и `OfferSequence`, но только после `CancelAfter`. Успешная операция удаляет объект и возвращает удержанную сумму исходному `Account`. Если истёкший Escrow всё ещё виден, транзакцию отмены ещё никто не отправил. Средства автоматически не возвращаются.

Карточка доказательств по одному Escrow
Поле или результатЗачем сохранитьЧто не следует из него
`Account` + `OfferSequence`Однозначно связать Finish/Cancel с созданиемНе доказывает доступность операции сейчас
предыдущий подтверждённый `close_time`Проверить временную границуНе заменяет `Condition` и `Fulfillment`
`tesSUCCESS` и метаданныеПодтвердить применение транзакцииУспешный ответ RPC до включения этого не доказывает
удаление объекта EscrowДоказать закрытие обязательстваНе показывает изменение баланса аккаунта без метаданных
изменения балансовРазличить выплату и возвратНужно учитывать комиссию отправителя Finish/Cancel
Карточка доказательств по одному Escrow
Поле или результат
`Account` + `OfferSequence`
Зачем сохранить
Однозначно связать Finish/Cancel с созданием
Что не следует из него
Не доказывает доступность операции сейчас
Поле или результат
предыдущий подтверждённый `close_time`
Зачем сохранить
Проверить временную границу
Что не следует из него
Не заменяет `Condition` и `Fulfillment`
Поле или результат
`tesSUCCESS` и метаданные
Зачем сохранить
Подтвердить применение транзакции
Что не следует из него
Успешный ответ RPC до включения этого не доказывает
Поле или результат
удаление объекта Escrow
Зачем сохранить
Доказать закрытие обязательства
Что не следует из него
Не показывает изменение баланса аккаунта без метаданных
Поле или результат
изменения балансов
Зачем сохранить
Различить выплату и возврат
Что не следует из него
Нужно учитывать комиссию отправителя Finish/Cancel

Если операция не прошла, объект не нужно создавать заново

При слишком ранней попытке перечитайте подтверждённое время. При ошибке условия сравните байты `Condition` и `Fulfillment` с исходным объектом. При неверной паре `Owner` и `OfferSequence` вернитесь к `EscrowCreate`. Если объект уже исчез, найдите закрывшую его транзакцию и проверьте фактически доставленную сумму.

Повтор имеет смысл только после сверки исходного объекта, предыдущего подтверждённого времени и результата закрывающей транзакции. Новый Escrow не разблокирует старый, а неподтверждённый ответ узла не доказывает его состояние.

Источники

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

  1. XRPL Docs — Escrow XRP Ledger · Проверено 25 августа 2026 г. в 09:22 GMT+5
  2. XRPL Protocol — Escrow ledger object XRP Ledger · Проверено 25 августа 2026 г. в 09:22 GMT+5
  3. XRPL Protocol — EscrowCreate XRP Ledger · Проверено 25 августа 2026 г. в 09:22 GMT+5
  4. XRPL Protocol — EscrowFinish XRP Ledger · Проверено 25 августа 2026 г. в 09:22 GMT+5
  5. XRPL Protocol — EscrowCancel XRP Ledger · Проверено 25 августа 2026 г. в 09:22 GMT+5
  6. XRPL Docs — Ledger Close Times XRP Ledger · Проверено 25 августа 2026 г. в 09:22 GMT+5
  7. XRPL mainnet server_info Ripple · Проверено 25 августа 2026 г. в 09:22 GMT+5
Материал носит информационный характер и не является индивидуальной рекомендацией. Криптоактивы связаны с риском волатильности, технических сбоев, хищения и полной потери средств.