# Oracle [[Source]](https://github.com/XRPLF/rippled/blob/f64cf9187affd69650907d0d92e097eb29693945/include/xrpl/protocol/detail/ledger_entries.macro#L385-L395) An `Oracle` ledger entry holds data associated with a single [price oracle](/docs/concepts/decentralized-storage/price-oracles), which can store information on up to 10 asset pairs. You can create or modify a price oracle with an [OracleSet transaction](/docs/references/protocol/transactions/types/oracleset). PriceOracle ## Example Oracle JSON ```json { "LedgerEntryType": "Oracle", "Owner": "rNZ9m6AP9K7z3EVg6GhPMx36V4QmZKeWds", "Provider": "70726F7669646572", "AssetClass": "63757272656E6379", "PriceDataSeries": [ { "PriceData": { "BaseAsset": "XRP", "QuoteAsset": "USD", "AssetPrice": 740, "Scale": 3, } }, ], "LastUpdateTime": 1724871860, "PreviousTxnID": "C53ECF838647FA5A4C780377025FEC7999AB4182590510CA461444B207AB74A9", "PreviousTxnLgrSeq": 3675418 } ``` ## Oracle Fields | Field | JSON Type | Internal Type | Required? | Description | | --- | --- | --- | --- | --- | | `Owner` | String | AccountID | Yes | The [account](/docs/concepts/accounts) with update and delete privileges for the oracle. It's recommended to set up [multi-signing](/docs/tutorials/how-tos/manage-account-settings/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 an asset 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. (**Note:** Unlike many other time values on the XRP Ledger, this value does not use the Ripple Epoch.) | | `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 | Arbitrary string to describe the type of asset, such as *currency*, *commodity*, or *index*. Must be formatted as hexadecimal representing ASCII characters (`0x20`-`0x7E`), maximum 16 bytes. | | `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. | | `QuoteAsset` | String | Currency | Yes | The quote asset in a trading pair. The quote asset denotes the price of one unit of the base asset. | | `AssetPrice` | String | 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. Displayed in hexadecimal format. | | `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 Reserve An `Oracle` object counts as one item for purposes of the [owner reserve](/docs/concepts/accounts/reserves#base-reserve-and-owner-reserve) if it contains one to five `PriceData` objects, and counts as two items if it contains six to ten `PriceData` objects. ## Oracle ID Format The ID of an `Oracle` object is the [SHA-512Half](/docs/references/protocol/data-types/basic-data-types#hashes) of the following values, concatenated in order: 1. The `Oracle` space key (`0x52`) 2. The `Owner` Account ID. 3. The `OracleDocumentID`. ## Currency Internal Format The `Currency` field type contains 160 bits of arbitrary data representing a currency or asset code. If the data matches the XRPL's standard format for [currency codes][], the API displays it as a string such as `"USD"`; otherwise, it displays as 40 characters of hexadecimal. The following JSON example represents the `912810RR9/USD` trading pair. The `BaseAsset` is a CUSIP code `912810RR9` represented as a hexadecimal string, and the `QuoteAsset` is a standard `USD` currency code: ```json { "PriceData" : { "BaseAsset" : "3931323831305252390000000000000000000000", "QuoteAsset" : "USD", "Scale" : 1, "SymbolPrice" : 740 } } ``` ## See Also - **Transactions:** - [OracleSet transaction](/docs/references/protocol/transactions/types/oracleset) - [OracleDelete transaction](/docs/references/protocol/transactions/types/oracledelete)