Skip to main content
Blockchain Oracles serve as intermediaries that connect smart contracts with external (off-chain) data. Example:
  • Price Feeds: Real-time pricing for cryptocurrencies, stocks, or commodities.
  • Event Information: Updates on real-world events like sports results or weather conditions.
  • API Access: Connections to external web services and systems.
Oracles, being external third-party services, require careful consideration of their reliability, security, and decentralization to avoid risks such as incorrect data, manipulation, or single points of failure.

Deployed Oracles on NEAR

Here is a directory of third-party oracle services deployed on the NEAR blockchain:
NameCreatorDescription
Outlayer Price OracleOutlayerTEE-Secured Price Oracle based on Outlayer
Pyth Network OraclePyth NetworkHigh-frequency, low-latency oracle for price feeds
[Your Project Here]--

Price Oracle by Outlayer

How to use / integrate

The price-oracle.near implements Pyth-compatible view methods natively (see Pyth Network Oracle below). DeFi contracts using pyth-oracle.near can migrate by changing one contract address — no code changes needed.

Pyth Network Oracle


Using Pyth Network Oracle

Pyth Network’s NEAR smart contract has two core methods to update & get price feeds of your choice.
  1. update_price_feeds (updates Pyth smart contract with the price feed you provide)
    • args: data
    • type: object
    • example: { "data": "504e41...' }
  2. get_price (fetches the most recent price stored in the contract)_
    • args: price_identifier
    • type: object
    • example: { price_identifier: 'f9c0172ba10dfa8...' }
For a complete list of endpoints to interact with, see Pyth’s receiver contract.

Getting Started

To get started with Pyth oracle you will need to gather the following information which differ between networks:
  • Price ID(s)
  • HermesAPI Endpoint
  • Smart contract address
NetworkPrice Feed IDsHermes API AddressContract Address
testnetNEAR testnet Price Feed IDshermes-beta.pyth.networkpyth-oracle.testnet
mainnetNEAR mainnet Price Feed IDshermes.pyth.networkpyth-oracle.near
When using Price Feed IDs, you will need to remove the 0x prefix.Price Feed ID Example (testnet):

update_price_feeds

Updates the Pyth Oracle contract data with the price feed you provide.
  • args: data (off-chain hex-encoded price feed)
  • type: object
  • example: { "data": "504e41...' }
Update the Pyth Oracle contract with new price feed data in two main steps:
  1. Fetch off-chain price feed
  2. Update Pyth Oracle contract with off-chain price feed

1) Fetching off-chain price feed

You can obtain an off-chain price feed using Pyth’s Hermes API. To use these endpoints, you will need to provide a Price Feed ID and ensure you are targeting the correct network. See Getting Started for more information. Here is a node.js example of fetching the latest price feed using /v2/updates/price/latest endpoint:

2) Update Pyth Oracle Contract Price Feed

After fetching an off-chain price feed, you can now perform a contract call to the Pyth Oracle to update the price feed on-chain. Call update_price_feeds on the Pyth Oracle contract with data as your arguments. example args:
{
  "data": "504e41550100000000a00100000000010070b0ee3a00d1a3c07ee440887eb34a5a35860e6f4b9230fd62f0593fe35c8a3561735a6a37d269c5f166b84ead8918f710dc1be2ee6b51db5b22340ea2c173fc01673d544b00000000001ae101faedac5851e32b9b23b5f9411a8c2bac4aae3ed4dd7b811dd1a72ea4aa7100000000061bc18c014155575600000000000ab0f04600002710f41bc8c224ed983c68dbf5dab7dd34c9129fecfa03005500ca80ba6dc32e08d06f1aa886011eed1d77c77be9eb761cc10d72b7d0a2fd57a600000047e2eb4ef0000000000692480ffffffff800000000673d544b00000000673d544b00000048200e66a00000000005e495a60bb9370c458dd50558b34699b5b179f45e56be22f0a1a0feb1db8469adc8c5efeb53988495bac07bf9efed07f5eee43818150c55055882f6872a228e8e9bc78459ed3ea7fe0b86f3048f6bf0aad34befc46063ab7d200beb8bc9fe5839844d2233546f0742bb665f1e610370fcf8ce5be83d0f47e584b685af87cf3ebcb79e714827dcb99dba579e1a03785052ab3c7c7147d3f7bba822b04dbda159670e9a8d29e7ccf68474b2ca85e00224d29bf65b06b09f95e91703313e053b697b48ac1e4d1c57605a71ab77e7ef276bfe8a369c268333b9a37461bf2b7cb7fd4c005500ecf553770d9b10965f8fb64771e93f5690a182edc32be4a3236e0caaa6e0581a0000000e2ba8cd280000000001b40517fffffff800000000673d544b00000000673d544b0000000e3ea44c6800000000016aee120b47b853f55949284cb8ba0b63824ff9b48cd1da8417f45421b79ee3195fc8d107540a0bbb95c2445b66065754f135cb842db09a7e7ab33f79c546a48db872bd7197b04e3d7b52fbb55b3b9f51707c5a55fac3707cb563dbcde4aadeecc3649c237454cecf519dc567c0da03d81808523aa4fa71815eab25ce7da61b48647bac645d403208135002aab5fde2d7ab3c7c7147d3f7bba822b04dbda159670e9a8d29e7ccf68474b2ca85e00224d29bf65b06b09f95e91703313e053b697b48ac1e4d1c57605a71ab77e7ef276bfe8a369c268333b9a37461bf2b7cb7fd4c"
}
Example of updating the Pyth Oracle contract’s price feed using near-js/client and node.js:
Although unused deposit will be refunded, you can calculate an estimate by calling the get_update_fee_estimate method against the Pyth contract.

get_price

Fetches the most recent price feed stored in the Pyth Oracle contract. Is a view method, so does not require a signature or payment.
  • args: price_identifier (unique price feed identifier)
  • type: object
  • example: { price_identifier: 'f9c0172ba10dfa8...' }
After updating the price feed, you can view the feed on-chain by calling get_price on the Pyth Oracle contract. Note that this is a view method and does not require a signature or deposit. Example: