Oracle
Price Oracle functionality is part of the proposed XLS-47d extension to the XRP Ledger protocol. You can use these functions on test networks for now. Until there is an amendment in a stable release, the details documented on these pages are subject to change.
An Oracle
ledger entry holds data associated with a single price oracle object.
Note: A price oracle object can store information for up to 10 token pairs.
Example Oracle JSON
{ "LedgerEntryType": "Oracle", "Owner": "rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW", "Provider": "70726F7669646572", "AssetClass": "63757272656E6379", "PriceDataSeries": [ { "PriceData": { "BaseAsset": "XRP", "QuoteAsset": "USD", "AssetPrice": 74, "Scale": 2, } }, ], "LastUpdateTime": 743609414, "PreviousTxnID": "C53ECF838647FA5A4C780377025FEC7999AB4182590510CA461444B207AB74A9", "PreviousTxnLgrSeq": 56865244 }
Oracle Fields
Field | JSON Type | Internal Type | Required? | Description |
---|---|---|---|---|
Owner | String | AccountID | Yes | The XRPL account with update and delete privileges for the oracle. It's recommended to set up multi-signing on this account. |
Provider | String | Blob | Yes | An arbitrary value that identifies an oracle provider, such as Chainlink, Band, or DIA. This field is a string, up to 256 ASCII hex encoded characters (0x20-0x7E). |
PriceDataSeries | Array | Array | Yes | An array of up to 10 PriceData objects, each representing the price information for a token pair. More than five PriceData objects require two owner reserves. |
LastUpdateTime | Number | UInt32 | Yes | The time the data was last updated, represented in Unix time. |
URI | String | Blob | No | An optional Universal Resource Identifier to reference price data off-chain. This field is limited to 256 bytes. |
AssetClass | String | Blob | Yes | Describes the type of asset, such as "currency", "commodity", or "index". This field is a string, up to 16 ASCII hex encoded characters (0x20-0x7E). |
OwnerNode | String | UInt64 | Yes | A hint indicating which page of the oracle owner's owner directory links to this entry, in case the directory consists of multiple pages. |
PreviousTxnID | String | UInt256 | Yes | The hash of the previous transaction that modified this entry. |
PreviousTxnLgrSeq | String | UInt32 | Yes | The ledger index that this object was most recently modified or created in. |
PriceData Fields
Field | JSON Type | Internal Type | Required? | Description |
---|---|---|---|---|
BaseAsset | String | Currency | Yes | The primary asset in a trading pair. Any valid identifier, such as a stock symbol, bond CUSIP, or currency code is allowed. For example, in the BTC/USD pair, BTC is the base asset; in 912810RR9/BTC, 912810RR9 is the base asset. |
QuoteAsset | String | Currency | Yes | The quote asset in a trading pair. The quote asset denotes the price of one unit of the base asset. For example, in the BTC/USD pair, USD is the quote asset; in 912810RR9/BTC, BTC is the quote asset. |
AssetPrice | Number | UInt64 | No | The asset price after applying the Scale precision level. It's not included if the last update transaction didn't include the BaseAsset /QuoteAsset pair. |
Scale | Number | UInt8 | No | The scaling factor to apply to an asset price. For example, if Scale is 6 and original price is 0.155, then the scaled price is 155000. Valid scale ranges are 0-10. It's not included if the last update transaction didn't include the BaseAsset /QuoteAsset pair. |
Oracle ID Format
The ID of an Oracle
object is the SHA-512Half of the following values, concatenated in order:
- The
Oracle
space key (0x52
) - The
Owner
Account ID. - The
OracleDocumentID
.
Currency Internal Format
The Currency
field type represents a standard currency code, such as XRP, or an arbitrary asset as a 160-bit (40 character) hexadecimal string. This type is generally conformant to the XRPL currency codes format. Below is a JSON example with BaseAsset
representing a CUSIP code 912810RR9
as a 160-bit hexadecimal string and QuoteAsset
representing a standard USD
currency code:
{ "PriceData" : { "BaseAsset" : "3931323831305252390000000000000000000000", "QuoteAsset" : "USD", "Scale" : 1, "SymbolPrice" : 740 } }