OfferCreate

An OfferCreate transaction places an [Offer](offers.html) in the [decentralized exchange](decentralized-exchange.html).

[Source]

Example

{
    "TransactionType": "OfferCreate",
    "Account": "ra5nK24KXen9AHvsdFTKHSANinZseWnPcX",
    "Fee": "12",
    "Flags": 0,
    "LastLedgerSequence": 7108682,
    "Sequence": 8,
    "TakerGets": "6000000",
    "TakerPays": {
      "currency": "GKO",
      "issuer": "ruazs5h1qEsqpke88pcqnaseXdm6od2xc",
      "value": "2"
    }
}

Fields

Field
JSON Type
[Internal Type][]
Description

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.

OfferCreate Flags

Transactions of the OfferCreate type support additional values in the Flags field, as follows:

Flag Name
Hex Value
Decimal Value
Description

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

Treat the Offer as an Immediate or Cancel order. 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.

tfFillOrKill

0x00040000

262144

Treat the offer as a Fill or Kill order. 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.

tfSell

0x00080000

524288

Exchange the entire TakerGets amount, even if it means obtaining more than the TakerPays amount in exchange.

Error Cases

Error Code
Description

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.

Last updated