---
title: Escrow
---
[\[Source\]](https://github.com/ripple/rippled/blob/c6b6d82a754fe449cc533e18659df483c10a5c98/src/ripple/protocol/impl/LedgerFormats.cpp#L90-L101)

_(Added by the \[Escrow amendment]\[].)_

The `Escrow` object type represents a held payment of XAH or IOU waiting to be executed or canceled. An \[EscrowCreate transaction]\[] creates an `Escrow` object in the ledger. A successful \[EscrowFinish]\[] or \[EscrowCancel]\[] transaction deletes the object.&#x20;

If the `Escrow` object has a [_crypto-condition_](https://tools.ietf.org/html/draft-thomas-crypto-conditions-02), the payment can only succeed if an EscrowFinish transaction provides the corresponding _fulfillment_ that satisfies the condition. (The only supported crypto-condition type is [PREIMAGE-SHA-256](https://tools.ietf.org/html/draft-thomas-crypto-conditions-02#section-8.1).) If the `Escrow` object has a `FinishAfter` time, the held payment can only execute after that time.

An `Escrow` object is associated with two addresses:

* The owner, who provides the XAH or IOU when creating the `Escrow` object. If the held payment is canceled, the XAH or IOU returns to the owner.
* The destination, where the XAH or IOU is paid when the held payment succeeds. The destination can be the same as the owner.

### Example JSON

```json
{
    "Account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
    "Amount": "10000",
    "CancelAfter": 545440232,
    "Condition": "A0258020A82A88B2DF843A54F58772E4A3861866ECDB4157645DD9AE528C1D3AEEDABAB6810120",
    "Destination": "ra5nK24KXen9AHvsdFTKHSANinZseWnPcX",
    "DestinationTag": 23480,
    "FinishAfter": 545354132,
    "Flags": 0,
    "LedgerEntryType": "Escrow",
    "OwnerNode": "0000000000000000",
    "DestinationNode": "0000000000000000",
    "PreviousTxnID": "C44F2EB84196B9AD820313DBEBA6316A15C9A2D35787579ED172B87A30131DA7",
    "PreviousTxnLgrSeq": 28991004,
    "SourceTag": 11747,
    "index": "DC5F3851D8A1AB622F957761E5963BC5BD439D5C24AC6AD7AC4523F0640244AC"
}
```

### Fields

An `Escrow` object has the following fields:

| Name                | JSON Type        | \[Internal Type]\[] | Required? | Description                                                                                                                                                                                                                                                                     |
| ------------------- | ---------------- | ------------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `Account`           | String           | AccountID           | Yes       | The address of the owner (sender) of this held payment. This is the account that provided the amount, and gets it back if the held payment is canceled.                                                                                                                         |
| `Amount`            | String or Object | Amount              | Yes       | The amount to be delivered by the held payment.                                                                                                                                                                                                                                 |
| `CancelAfter`       | Number           | UInt32              | No        | The held payment can be canceled if and only if this field is present _and_ the time it specifies has passed. Specifically, this is specified as \[seconds since the Ripple Epoch]\[] and it "has passed" if it's earlier than the close time of the previous validated ledger. |
| `Condition`         | String           | Blob                | No        | A [PREIMAGE-SHA-256 crypto-condition](https://tools.ietf.org/html/draft-thomas-crypto-conditions-02#section-8.1), as hexadecimal. If present, the \[EscrowFinish transaction]\[] must contain a fulfillment that satisfies this condition.                                      |
| `Destination`       | String           | AccountID           | Yes       | The destination address where the amount is paid if the held payment is successful.                                                                                                                                                                                             |
| `DestinationNode`   | String           | UInt64              | No        | A hint indicating which page of the destination's owner directory links to this object, in case the directory consists of multiple pages. Omitted on escrows created before enabling the \[fix1523 amendment]\[].                                                               |
| `DestinationTag`    | Number           | UInt32              | No        | An arbitrary tag to further specify the destination for this held payment, such as a hosted recipient at the destination address.                                                                                                                                               |
| `FinishAfter`       | Number           | UInt32              | No        | The time, in \[seconds since the Ripple Epoch]\[], after which this held payment can be finished. Any \[EscrowFinish transaction]\[] before this time fails. (Specifically, this is compared with the close time of the previous validated ledger.)                             |
| `Flags`             | Number           | UInt32              | Yes       | A bit-map of boolean flags enabled for this object. Currently, the protocol defines no flags for `Escrow` objects. The value is always `0`.                                                                                                                                     |
| `LedgerEntryType`   | String           | UInt16              | Yes       | The value `0x0075`, mapped to the string `Escrow`, indicates that this object is an `Escrow` object.                                                                                                                                                                            |
| `OwnerNode`         | String           | UInt64              | Yes       | A hint indicating which page of the owner directory links to this object, in case the directory consists of multiple pages. **Note:** The object does not contain a direct link to the owner directory containing it, since that value can be derived from the `Account`.       |
| `PreviousTxnID`     | String           | Hash256             | Yes       | The identifying hash of the transaction that most recently modified this object.                                                                                                                                                                                                |
| `PreviousTxnLgrSeq` | Number           | UInt32              | Yes       | The \[index of the ledger]\[Ledger Index] that contains the transaction that most recently modified this object.                                                                                                                                                                |
| `SourceTag`         | Number           | UInt32              | No        | An arbitrary tag to further specify the source for this held payment, such as a hosted recipient at the owner's address.                                                                                                                                                        |
| `TransferRate`      | Number           | UInt32              | No        |                                                                                                                                                                                                                                                                                 |

### Escrow ID Format

The ID of an `Escrow` object is the \[SHA-512Half]\[] of the following values, concatenated in order:

* The Escrow space key (`0x0075`)
* The AccountID of the sender of the \[EscrowCreate transaction]\[] that created the `Escrow` object
* The Sequence number of the \[EscrowCreate transaction]\[] that created the `Escrow` object If the EscrowCreate transaction used a Ticket, use the `TicketSequence` value instead.
