Jupiter Perps aggregates token prices from three price oracles:
- Edge by Chaos Labs
- Chainlink
- Pyth
Edge by Chaos Labs is the primary oracle for Jupiter Perps, with Chainlink and Pyth being used to verify the Edge oracle prices and acting as backup price oracles. The following describes how the multi-oracle system works:
- If the Edge oracle is not stale and its price difference is within a set threshold of both Chainlink and Pyth prices, the Edge oracle price is used.
- If the Edge oracle is stale or its price exceeds the threshold, the system compares Chainlink and Pyth prices. If Chainlink and Pyth prices are within the threshold, the latest price between the two oracles is selected.
- If two out of three oracles fail, no price update will happen.
NOTE: Oracle price updates happen during trade execution and through regular updates by a dedicated keeper.
This multi-oracle approach ensures Jupiter Perps uses accurate token prices even during market volatility or when a price oracle fails.
Oracle Price Accounts
The oracle price data is stored the following onchain accounts:
- SOL: https://solscan.io/account/FYq2BWQ1V5P1WFBqr3qB2Kb5yHVvSv7upzKodgQE5zXh
- ETH: https://solscan.io/account/AFZnHPzy4mvVCffrVwhewHbFc93uTHvDSFrVH7GtfXF1
- BTC: https://solscan.io/account/hUqAT1KQ7eW1i6Csp9CXYtpPfSAvi835V7wKi5fRfmC
- USDC: https://solscan.io/account/6Jp2xZUTWdDD2ZyUPRzeMdc6AFQ5K3pFgZxk2EijfjnM
- USDT: https://solscan.io/account/Fgc93D641F8N2d1xLjQ4jmShuD3GE3BsCXA56KBQbF5u
Migration Guide
If you were using the old price oracle account (set in the custody account's `dovesOracle` field), you should migrate to the new price oracle accounts by using the `dovesAgOracle` field instead.
You can also fetch the latest IDL for the oracle program here.