最終更新:
編集

OracleSet

(PriceOracle Amendment)

[ソース]

Oracle Document ID を使用して、新しいOracleレジャーエントリを作成するか、既存のフィールドを更新します。

OracleSetのJSONの例

{
  "TransactionType": "OracleSet",
  "Account": "rNZ9m6AP9K7z3EVg6GhPMx36V4QmZKeWds",
  "OracleDocumentID": 34,
  "Provider": "70726F7669646572",
  "LastUpdateTime": 1724871860,
  "AssetClass": "63757272656E6379",
  "PriceDataSeries": [
    {
      "PriceData": {
        "BaseAsset": "XRP",
        "QuoteAsset": "USD",
        "AssetPrice": 740,
        "Scale": 3
      }
    }
  ]
}

OracleSetのフィールド

フィールドJSONの型内部の型必須?説明
Account文字列AccountIDはいこのアカウントは、OracleオブジェクトのOwnerフィールドのアカウントと一致する必要があります。
OracleDocumentIDNumberUInt32はいAccountの価格オラクルのユニークな識別子。
Provider文字列Blob可変Oracleプロバイダを識別する任意の値、例えばChainlink、Band、またはDIAなど。このフィールドは文字列で、ASCII 16進コード化文字(0x20~0x7E)を最大256文字まで使用できます。このフィールドは、新しいOracleレジャーエントリを作成する際に必須ですが、更新の場合は任意です。
URI文字列Blobいいえ任意で指定可能なユニバーサルリソース識別子で、チェーン外の価格データを参照します。このフィールドは256バイトに制限されています。
LastUpdateTimeNumberUInt32はいデータが最後に更新された時刻を、[リップルエポックからの秒数]で表します。
AssetClass文字列Blob可変「通貨」、「商品」、「指数」などの資産の種類を指定します。このフィールドは、最大16文字のASCII 16進コード文字(0x20~0x7E)の文字列です。このフィールドは、新しいOracleレジャーエントリを新規作成する際に必須ですが、更新の場合は任意です。
PriceDataSeriesArrayArrayはいトークンペアの価格情報を表す、最大10個のPriceDataオブジェクトの配列。PriceDataが5個を超える場合は、2つの所有者準備金が必要です。

PriceDataのフィールド

フィールドJSONの型内部の型必須?説明
BaseAsset文字列Currencyはい取引ペアにおける基軸資産。 株式シンボル、債券CUSIP、通貨コードなど、有効な識別子であれば何でも使用できます。 例えば、BTC/USDペアではBTCが基軸資産であり、912810RR9/BTCでは912810RR9が基軸資産です。
QuoteAsset文字列Currencyはい取引ペアにおける見積資産。見積資産は、ベース資産の1単位の価格を示します。例えば、BTC/USDペアでは、USDが見積資産です。912810RR9/BTCでは、BTCが見積資産です。
AssetPrice数値UInt64いいえScaleレベルを適用した後の資産価格。含まれていない場合、対応するPriceDataは削除されます。
Scale数値UInt8いいえ資産価格に適用するスケーリング値。例えば、Scaleが6で元の価格が 0.155 の場合、スケーリング後の価格は155000となります。有効なスケール範囲は0~10です。デフォルト値は0です。

PriceDataは、以下のルールに従って作成または更新されます。

  • トランザクション内の新しいトークンペアがオブジェクトに追加されます。
  • トランザクション内のトークンペアが、オブジェクト内の対応するトークンペアを上書きします。
  • AssetPrice フィールドが存在しないトランザクションのトークンペアは、オブジェクト内の対応するトークンペアを削除します。
  • オブジェクトのみに存在するトークンペアは、価格が古くなっていることを示すために、AssetPriceScaleが削除されます。
注記

トランザクション内のトークンペアの順序は重要ではありません。なぜなら、各トークンペアはPriceDataSeries内のPriceDataオブジェクトの場所を一意に識別するからです。

エラーケース

すべてのトランザクションで発生しうるエラーの他に、OracleSetトランザクションでは以下のトランザクション結果コードが発生する可能性があります。

エラーコード説明
temARRAY_EMPTYPriceDataSeriesPriceDataオブジェクトがありません。
tecARRAY_TOO_LARGEPriceDataSeriesが10個のPriceDataオブジェクトの制限を超えています。
tecINVALID_UPDATE_TIMEOracleオブジェクトに有効なLastUpdateTime値がありません。
tecTOKEN_PAIR_NOT_FOUND削除しようとしているトークンペアがOracleオブジェクトに存在しません。
tecARRAY_EMPTYPriceDataSeriesPriceDataオブジェクトがありません。
temARRAY_TOO_LARGEPriceDataSeriesが10個のPriceDataオブジェクトの制限を超えています。