An OfferCreate transaction places an [Offer](offers.html) in the [decentralized exchange](decentralized-exchange.html).
[Source]
Expiration
Number
UInt32
(Optional) Time after which the Offer is no longer active, in [seconds since the Ripple Epoch][].
OfferSequence
Number
UInt32
(Optional) An Offer to delete first, specified in the same way as [OfferCancel][].
OfferID
String
Hash256
(Optional) The ID of the Offer ledger object to cancel, as a 64-character hexadecimal string.
TakerGets
Amount
The amount and type of currency being sold.
TakerPays
Amount
The amount and type of currency being bought.
Transactions of the OfferCreate type support additional values in the Flags
field, as follows:
tfPassive
0x00010000
65536
If enabled, the Offer does not consume Offers that exactly match it, and instead becomes an Offer object in the ledger. It still consumes Offers that cross it.
tfImmediateOrCancel
0x00020000
131072
tfFillOrKill
0x00040000
262144
tfSell
0x00080000
524288
Exchange the entire TakerGets
amount, even if it means obtaining more than the TakerPays
amount in exchange.
temINVALID_FLAG
Occurs if the transaction specifies both tfImmediateOrCancel
and tfFillOrKill
.
tecEXPIRED
Occurs if the transaction specifies an Expiration
time that has already passed.
tecKILLED
Occurs if the transaction specifies tfFillOrKill
, and the full amount cannot be filled. If the [ImmediateOfferKilled amendment][] is enabled, this result code also occurs when the transaction specifies tfImmediateOrCancel
and executes without moving funds (previously, this would return tesSUCCESS
).
temBAD_EXPIRATION
Occurs if the transaction contains an Expiration
field that is not validly formatted.
temBAD_SEQUENCE
Occurs if the transaction contains an OfferSequence
that is not validly formatted, or is higher than the transaction's own Sequence
number.
temBAD_OFFER
Occurs if the Offer tries to trade XAH for XAH, or tries to trade an invalid or negative amount of a token.
temREDUNDANT
Occurs if the transaction specifies a token for the same token (same issuer and currency code).
temBAD_CURRENCY
Occurs if the transaction specifies a token with the currency code "XAH".
temBAD_ISSUER
Occurs if the transaction specifies a token with an invalid issuer
value.
tecNO_ISSUER
Occurs if the transaction specifies a token whose issuer
value is not a funded account in the ledger.
tecFROZEN
Occurs if the transaction involves a token on a frozen trust line (including local and global freezes).
tecUNFUNDED_OFFER
Occurs if the owner does not hold a positive amount of the TakerGets
currency. (Exception: if TakerGets
specifies a token that the owner issues, the transaction can succeed.)
tecNO_LINE
Occurs if the transaction involves a token whose issuer uses Authorized Trust Lines and the necessary trust line does not exist.
tecNO_AUTH
Occurs if the transaction involves a token whose issuer uses Authorized Trust Lines and the the trust line that would receive the tokens exists but has not been authorized.
tecINSUF_RESERVE_OFFER
Occurs if the owner does not have enough XAH to meet the reserve requirement of adding a new Offer object to the ledger, and the transaction did not convert any currency. (If the transaction successfully traded any amount, the transaction succeeds with the result code tesSUCCESS
, but does not create an Offer object in the ledger for the rest.)
tecDIR_FULL
Occurs if the owner owns too many items in the ledger, or the order book contains too many Offers at the same exchange rate already.
Treat the Offer as an . The Offer never creates an [Offer object][] in the ledger: it only trades as much as it can by consuming existing Offers at the time the transaction is processed. If no Offers match, it executes "successfully" without trading anything. In this case, the transaction still uses the result code tesSUCCESS
.
Treat the offer as a . The Offer never creates an [Offer object][] in the ledger, and is canceled if it cannot be fully filled at the time of execution. By default, this means that the owner must receive the full TakerPays
amount; if the tfSell
flag is enabled, the owner must be able to spend the entire TakerGets
amount instead.