Offer
The Offer
ledger entry describes an Offer to exchange currencies in the XRP Ledger's decentralized exchange. (In finance, this is more traditionally known as an order.) An OfferCreate transaction only creates an Offer
entry in the ledger when the Offer cannot be fully executed immediately by consuming other Offers already in the ledger.
An Offer can become unfunded through other activities in the network, while remaining in the ledger. When processing transactions, the network automatically removes any unfunded Offers that those transactions come across. (Otherwise, unfunded Offers remain, because only transactions can change the ledger state.)
Example Offer JSON
{ "Account": "rBqb89MRQJnMPq8wTwEbtz4kvxrEDfcYvt", "BookDirectory": "ACC27DE91DBA86FC509069EAF4BC511D73128B780F2E54BF5E07A369E2446000", "BookNode": "0000000000000000", "Flags": 131072, "LedgerEntryType": "Offer", "OwnerNode": "0000000000000000", "PreviousTxnID": "F0AB71E777B2DA54B86231E19B82554EF1F8211F92ECA473121C655BFC5329BF", "PreviousTxnLgrSeq": 14524914, "Sequence": 866, "TakerGets": { "currency": "XAG", "issuer": "r9Dr5xwkeLegBeXq6ujinjSBLQzQ1zQGjH", "value": "37" }, "TakerPays": "79550000000", "index": "96F76F27D8A327FC48753167EC04A46AA0E382E6F57F32FD12274144D00F1797" }
Offer Fields
In addition to the common fields, Offer
entries have the following fields:
Name | JSON Type | Internal Type | Required? | Description |
---|---|---|---|---|
Account | String | AccountID | Yes | The address of the account that owns this Offer. |
BookDirectory | String | Hash256 | Yes | The ID of the Offer Directory that links to this Offer. |
BookNode | String | UInt64 | Yes | A hint indicating which page of the offer directory links to this entry, in case the directory consists of multiple pages. |
Expiration | Number | UInt32 | No | Indicates the time after which this Offer is considered unfunded. See Specifying Time for details. |
LedgerEntryType | String | UInt16 | Yes | The value 0x006F , mapped to the string Offer , indicates that this is an Offer entry. |
OwnerNode | String | UInt64 | Yes | A hint indicating which page of the owner directory links to this entry, in case the directory consists of multiple pages. |
PreviousTxnID | String | Hash256 | Yes | The identifying hash of the transaction that most recently modified this entry. |
PreviousTxnLgrSeq | Number | UInt32 | Yes | The index of the ledger that contains the transaction that most recently modified this object. |
Sequence | Number | UInt32 | Yes | The Sequence value of the OfferCreate transaction that created this offer. Used in combination with the Account to identify this offer. |
TakerPays | Currency Amount | Amount | Yes | The remaining amount and type of currency requested by the Offer creator. |
TakerGets | Currency Amount | Amount | Yes | The remaining amount and type of currency being provided by the Offer creator. |
Offer Flags
Offer
entries can have the following flags combined into the Flags
field:
Flag Name | Hex Value | Decimal Value | Corresponding OfferCreate Flag | Description |
---|---|---|---|---|
lsfPassive | 0x00010000 | 65536 | tfPassive | The offer was placed as "passive". This has no effect after the offer is placed into the ledger. |
lsfSell | 0x00020000 | 131072 | tfSell | The offer was placed as a "Sell" offer. This has no effect after the offer is placed in the ledger, because tfSell only matters if you get a better rate than you asked for, which can only happen when the offer is initially placed. |
Offer Reserve
Offer
entries count as one item towards the owner reserve of the account that placed the offer, as long as the entry is in the ledger. Canceling or consuming the offer frees up the reserve. The reserve is also freed up if the offer is removed because it was found unfunded.
Offer ID Format
The ID of an Offer
entry is the SHA-512Half of the following values, concatenated in order:
The Offer space key (
0x006F
)The AccountID of the account placing the Offer
The Sequence number of the OfferCreate transaction that created the Offer.
If the OfferCreate transaction used a Ticket, use the
TicketSequence
value instead.