OfferCreate

[ソース]

OfferCreateトランザクションは分散型取引所注文を作成します。

OfferCreate JSONの例

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

OfferCreate フィールド

共通フィールドに加えて、OfferCreateトランザクションは以下のフィールドを使用します。

フィールド JSONの型 内部の型 説明
Expiration 数字 UInt32 (省略可) オファーがアクティブでなくなるまでの時間(Rippleエポック以降の経過秒数)。
OfferSequence 数字 UInt32 (省略可) 最初に削除されるオファー(OfferCancelと同様に指定されます)。
TakerGets 通貨額 Amount オファーの作成者によって作成される金額および通貨の種類。
TakerPays 通貨額 Amount オファーの作成者によって要求される金額および通貨の種類。

OfferCreateフラグ

OfferCreate型のトランザクションについては、Flagsフィールドで以下の値が追加でサポートされます。

フラグ名 16進数 10進数 説明
tfPassive 0x00010000 65536 有効な場合、オファーはオファーが完全に一致するオファーを消費せず、代わりにレジャーのOfferオブジェクトになります。それはまだクロスしたオファーを消費します。
tfImmediateOrCancel 0x00020000 131072 オファーをIOC注文 として扱います。有効な場合、オファーはレジャーオブジェクトにはなりません。レジャー内の既存のオファーと一致させようとするだけです。即時にオファーがどのオファーとも一致しない場合、どの通貨とも取引せずに「正常に」実行します。この場合、トランザクションはtesSUCCESS結果コードを返しますが、レジャー内には、Offerオブジェクトを作成しません。
tfFillOrKill 0x00040000 262144 オファーをFOK注文 として扱います。レジャー内の既存のオファーのみを一致私用とします。またこれは、全TakerPaysの数量が取得できる場合に限られます。fix1578 amendmentが有効な場合でオファーを配置した時に実行できない場合、トランザクションはtecKILLED結果コードを返します。そうでない場合は、トランザクションは、どの通貨とも取り引きせずにキャンセルされた場合でもtesSUCCESSの結果コードを返します。
tfSell 0x00080000 524288 取引所でTakerPaysAmountよりも多く取得することになっても、TakerGets Amountを交換します。

エラーケース

エラーコード 説明
temINVALID_FLAG トランザクションがtfImmediateOrCanceltfFillOrKill両方を指定した場合に発生します。
tecEXPIRED トランザクションが指定したExpirationの時間が既に経過している場合に発生します。
tecKILLED トランザクションがtfFillOrKillを指定し、全額を約定できない場合に発生します。ImmediateOfferKilled amendment が有効な場合、この結果コードは、トランザクションがtfImmediateOrCancelを指定して資金が移動せずに実行された場合にも発生します(これまでは、これはtesSUCCESSを返していました)。
temBAD_EXPIRATION トランザクションのExpirationフィールドの値が無効なフォーマットの場合に発生します。
temBAD_SEQUENCE トランザクションのOfferSequenceフィールドの値が無効なフォーマットであるか、トランザクション自身のSequence番号より大きい場合に発生します。
temBAD_OFFER OfferがXRPとXRPを交換しようとした場合、またはトークンの無効な量やマイナスの量を交換しようとした場合に発生します。
temREDUNDANT トランザクションが同じトークン(同じ発行者、通貨コード)を指定した場合に発生します。
temBAD_CURRENCY トランザクションで通貨コードが"XRP"のトークンが指定された場合に発生します。
temBAD_ISSUER トランザクションが無効なissuer値を持つトークンを指定した場合に発生します。
tecNO_ISSUER トランザクションで、issuerの値が台帳の有効化されたアカウントでないトークンを指定した場合に発生します。
tecFROZEN 凍結されたトラストライン(ローカルおよびグローバルの凍結を含む)上のトークンを含むトランザクションの場合に発生します。
tecUNFUNDED_OFFER トランザクションの送信者がTakerGetsの通貨を正の値で保有していない場合に発生する。(例外: TakerGetsにトランザクションの送信者が発行するトークンを指定した場合、トランザクションは成功します)。
tecNO_LINE 発行者がAuthorized Trust Linesを使用しているトークンを含むトランザクションで、必要なトラストラインが存在しない場合に発生します。
tecNO_AUTH 発行者がAuthorized Trust Linesを使用しているトークンを含むトランザクションで、トークンを受け取るトラストラインが存在するが認証されていない場合に発生します。
tecINSUF_RESERVE_OFFER 所有者が台帳に新しいOfferオブジェクトを追加するための準備要件を満たすのに十分なXRPを持っておらず、トランザクションがどの通貨も変換しなかった場合に発生します。(トランザクションが何らかの金額のトレードに成功した場合、トランザクションは結果コードtesSUCCESSで成功しますが、残りは台帳にOfferオブジェクトを作成しません)。
tecDIR_FULL トランザクションの送信者が台帳で多くのアイテムを所有している場合、またはオーダーブックに同じ取引レートのオファーがすでに多く含まれている場合に発生します。