Resilient Price Oracle
Overview
Section titled “Overview”Before Venus V4, Venus relied on a Chainlink oracle adapter for protocol prices. A single configured source can become a single point of failure: an erroneous, manipulated, or stale price can cause improper liquidations or unsafe borrowing.
Venus V4 introduced ResilientOracle, which lets governance assign main, pivot, and fallback roles per underlying asset. When multiple roles are enabled, the contract can compare sources within governance-set bounds and try another valid source when a comparison fails.
This design provides configurable validation and fallback paths; it does not guarantee that every asset has multiple independent sources. If no pivot is configured or enabled, a valid main-oracle response can be returned without cross-validation. Oracle addresses, roles, enable flags, and bounds are mutable governance configuration and must be checked on-chain.
Key Features
Section titled “Key Features”Resilient Price Feeds
Section titled “Resilient Price Feeds”The Resilient Price Feeds replace a single provider in the Comptroller with per-asset source roles. Published configurations currently include Chainlink, RedStone, Binance, Atlas, APRO, and asset-specific adapters. A provider can be used as main, pivot, or fallback depending on the asset; the provider name alone does not determine its role.
Governance Configurations
Section titled “Governance Configurations”Authorized governance actions can pause or unpause a ResilientOracle, set an asset’s source addresses and roles, enable or disable a role, and update validation bounds. Fixed-price behavior, where used, is implemented by the configured source rather than by treating this page as configuration.
Safety Measures
Section titled “Safety Measures”In implementing the Resilient Price Oracle, several safety measures have been adopted to ensure the security and continuity of the Venus Protocol:
- Price Continuity: Asset prices pre and post upgrade were validated in a simulated environment to ensure consistency.
- Testnet Deployment: The oracles have been deployed and tested in the Venus Protocol testnet environment.
- Auditing: Specific revisions have been reviewed by OpenZeppelin, Peckshield, Certik, and Hacken. Read each report’s exact scope and verify that the deployed implementation maps to the reviewed revision.

Protection Mode
Section titled “Protection Mode”For low-liquidity collateral assets, the Resilient Oracle’s spot price is wrapped by the DeviationBoundedOracle on the borrow-power path. When the spot deviates beyond a per-asset threshold from the recent rolling window, Protection Mode activates and the Comptroller switches to bounded prices — min(spot, windowMin) for collateral and max(spot, windowMax) for debt — until conditions normalize. Liquidations continue to use the Resilient Oracle’s spot price directly.
Correlated Token Oracles
Section titled “Correlated Token Oracles”For correlated tokens, such as liquid staking tokens (LSTs), an adapter can read the on-chain exchange rate between correlated assets and multiply it by the underlying asset’s USD price.
Venus uses dedicated adapters for supported correlated assets to calculate a price as follows:
- convert the LST to its underlying token using the rate exposed by the relevant protocol contract; and
- convert the resulting underlying amount to USD using the configured market-price oracle.
The current list of correlated token oracles in Venus is:
AnkrBNBOracle. It returns the USD price of the ankrBNB token, converting on-chain from ankrBNB to BNB using the exchange rate from the ankrBNB contract.BNBxOracle. It returns the USD price of the BNBx token, converting on-chain from BNBx to BNB using the exchange rate from the stake manager contract.eBTCAccountantOracle(instance ofEtherfiAccountantOracle). It returns the USD price of the eBTC token, converting on-chain from eBTC to WBTC using the exchange rate from the Accountant contract.PendleOracle. It returns the USD price of the PT Pendle token, converting on-chain from the PT token to the underlying token using a Pendle market contract.SFraxOracle. It returns the USD price of the sFRAX token, converting on-chain from sFRAX to FRAX using the exchange rate from the sFRAX contract.SlisBNBOracle. It returns the USD price of the slisBNB token, converting on-chain from slisBNB to BNB using the exchange rate from the stake manager contract.AsBNBOracle. It returns the USD price of the asBNB token, converting on-chain from asBNB to slisBNB using the exchange rate from the asBNB minter contract.StkBNBOracle. It returns the USD price of the stkBNB token, converting on-chain from stkBNB to BNB using the exchange rate from the stake pool contract.WBETHOracle. It returns the USD price of the WBETH token, converting on-chain from WBETH to BNB using the exchange rate from the WBETH contract.WeETHOracle. It returns the USD price of the weETH token, converting on-chain from weETH to eETH using the exchange rate from the liquidity pool contract and assuming 1 eETH = 1 ETH.WeETHsOracle(instance ofWeETHAccountantOracle). It returns the USD price of the weETHs token, converting on-chain from weETHs to WETH using the exchange rate from the Accountant contract.WstETHOracle. It returns the USD price of the wstETH token, converting on-chain from wstETH to stETH using the exchange rate from the stETH contract and assuming 1 stETH = 1 ETH.
Current configuration
Section titled “Current configuration”BNB chain
Section titled “BNB chain”| Pool | Market | MAIN oracle | PIVOT oracle | FALLBACK oracle | Notes |
|---|---|---|---|---|---|
| Core | AAVE | Chainlink | Atlas | RedStone | Upper bound: 1.05. Lower bound: 0.95 |
| Core | ADA | Chainlink | Atlas | RedStone | Upper bound: 1.05. Lower bound: 0.95 |
| Core | asBNB | AsBNBOracle | Atlas | - | Upper bound: 1.05. Lower bound: 0.95 |
| Core | BCH | Chainlink | Atlas | RedStone | Upper bound: 1.05. Lower bound: 0.95 |
| Core | BETH (Paused) | Chainlink | - | - | |
| Core | BNB | Chainlink | Atlas | RedStone | Upper bound: 1.01. Lower bound: 0.99 |
| Core | WBNB | Chainlink | Atlas | RedStone | Upper bound: 1.01. Lower bound: 0.99 |
| Core | BTCB | Chainlink | Atlas | RedStone | Upper bound: 1.01. Lower bound: 0.99 |
| Core | BUSD (Paused) | Chainlink | - | - | Price fixed to $1 |
| Core | CAKE | Chainlink | Atlas | RedStone | Upper bound: 1.05. Lower bound: 0.95 |
| Core | DAI | Chainlink | Atlas | RedStone | Upper bound: 1.05. Lower bound: 0.95 |
| Core | DOGE | Chainlink | Atlas | RedStone | Upper bound: 1.05. Lower bound: 0.95 |
| Core | DOT | Chainlink | Atlas | RedStone | Upper bound: 1.05. Lower bound: 0.95 |
| Core | ETH | Chainlink | Atlas | RedStone | Upper bound: 1.01. Lower bound: 0.99 |
| Core | FDUSD | Chainlink | Atlas | RedStone | Upper bound: 1.05. Lower bound: 0.95 |
| Core | FIL | Chainlink | Atlas | RedStone | Upper bound: 1.05. Lower bound: 0.95 |
| Core | LINK | Chainlink | Atlas | RedStone | Upper bound: 1.05. Lower bound: 0.95 |
| Core | lisUSD | Atlas | - | - | |
| Core | LTC | Chainlink | Atlas | RedStone | Upper bound: 1.05. Lower bound: 0.95 |
| Core | MATIC (Paused) | Chainlink | - | - | Price feed from $POL |
| Core | SOL | Chainlink | Atlas | RedStone | Upper bound: 1.05. Lower bound: 0.95 |
| Core | slisBNB | SlisBNBOracle | Atlas | - | Upper bound: 1.05. Lower bound: 0.95 |
| Core | solvBTC | SolvBTCOneJumpChainlinkOracle | SolvBTCOneJumpFundamentalOracle | - | Upper bound: 1.02. Lower bound: 0.98. MAIN reads the Chainlink SolvBTC/BTC exchange rate feed |
| Core | sUSDe | sUSDeOneJumpRedstoneOracle | sUSDeOneJumpChainlinkOracle | - | Upper bound: 1.01. Lower bound: 0.99 |
| Core | SXP (Paused) | Chainlink | - | - | Price fixed to $0.00046 |
| Core | THE | Chainlink | Atlas | - | Upper bound: 1.05. Lower bound: 0.95 |
| Core | TRX | Chainlink | Atlas | RedStone | Upper bound: 1.01. Lower bound: 0.99 |
| Core | TUSD | Chainlink | Atlas | - | Upper bound: 1.05. Lower bound: 0.95 |
| Core | TRXOLD (Paused) | Chainlink | RedStone | - | Upper bound: 1.01. Lower bound: 0.99 |
| Core | TUSDOLD (Paused) | Chainlink | - | - | |
| Core | TWT | Atlas | RedStone | - | Upper bound: 1.05. Lower bound: 0.95 |
| Core | UNI | Chainlink | Atlas | RedStone | Upper bound: 1.05. Lower bound: 0.95 |
| Core | USDC | Chainlink | Atlas | RedStone | Upper bound: 1.01. Lower bound: 0.99 |
| Core | USDe | USDTChainlinkOracle | Chainlink | RedStone | Upper bound: 1.06. Lower bound: 0.94 |
| Core | USDT | Chainlink | Atlas | RedStone | Upper bound: 1.01. Lower bound: 0.99 |
| Core | USD1 | Chainlink | Atlas | RedStone | |
| Core | VAI | Atlas | - | - | Single price source: no pivot cross-validation and no fallback. Max stale period 86,700 seconds |
| Core | WBETH | WBETHOracle | Atlas | - | Upper bound: 1.05. Lower bound: 0.95 |
| Core | XRP | Chainlink | Atlas | RedStone | Upper bound: 1.05. Lower bound: 0.95 |
| Core | xSolvBTC | xSolvBTCOneJumpChainlinkOracle | xSolvBTCOneJumpRedstoneOracle | - | Upper bound: 1.02. Lower bound: 0.98. MAIN reads the Chainlink SVR xSolvBTC/SolvBTC exchange rate feed |
| Core | XVS | Chainlink | Atlas | RedStone | Upper bound: 1.05. Lower bound: 0.95 |
| Core | U | Chainlink | Atlas | - | Upper bound: 1.01. Lower bound: 0.99 |
| Core | PT-clisBNB-25JUN2026 | PendleOracle-PT-clisBNB-25JUN2026 | - | - | |
| Core | PT-sUSDE-26JUN2025 (Paused) | PendleOracle-PT-sUSDe-26JUN2025 | - | - | |
| Core | TSLAB | Atlas | APRO | - | Upper bound: 1.05. Lower bound: 0.95. Oracle Dynamic Protection (16.67% deviation trigger) |
| Core | NVDAB | Atlas | APRO | - | Upper bound: 1.05. Lower bound: 0.95. Oracle Dynamic Protection (16.67% deviation trigger) |
| Core | SPCXB | Atlas | APRO | - | Upper bound: 1.05. Lower bound: 0.95. Oracle Dynamic Protection (16.67% deviation trigger) |
| Core | SKHYB | Atlas | APRO | - | Upper bound: 1.05. Lower bound: 0.95. Oracle Dynamic Protection (16.67% deviation trigger) |
Ethereum
Section titled “Ethereum”| Pool | Market | MAIN oracle | PIVOT oracle | FALLBACK oracle | Notes |
|---|---|---|---|---|---|
| Core | crvUSD | Chainlink | - | - | |
| Core | DAI | Chainlink | - | - | |
| Core | TUSD (Paused) | Chainlink | - | - | |
| Core | USDC | Chainlink | - | - | |
| Core | USDT | Chainlink | - | - | |
| Core | WBTC | Chainlink | - | - | |
| Core | WETH | Chainlink | - | - | |
| Core | FRAX (Paused) | Chainlink | - | - | |
| Core | LBTC | LBTCOneJumpRedStoneOracle | - | - | |
| Core | EIGEN (Paused) | Chainlink | - | - | |
| Core | sFRAX (Paused) | SFraxOracle | - | - | |
| Core | eBTC | eBTCAccountantOracle | - | - | |
| Core | USDS | Chainlink | - | - | |
| Core | sUSDS | sUSDS-ERC4646Oracle | - | - | |
| Core | weETHs | WeETHAccountantOracle(weETHs) | - | - | |
| Core | BAL (Paused) | Chainlink | - | - | |
| Core | sUSDe | sUSDe-ERC4626Oracle | - | - | |
| Core | USDe | RedStone | Chainlink | Chainlink | Upper bound: 1.01. Lower bound: 0.99 |
| Core | tBTC | Chainlink | - | - |
Arbitrum One
Section titled “Arbitrum One”| Pool | Market | MAIN oracle | PIVOT oracle | FALLBACK oracle | Notes |
|---|---|---|---|---|---|
| Core | WBTC | SequencerChainlinkOracle | - | - | |
| Core | WETH | SequencerChainlinkOracle | - | - | |
| Core | USDC | SequencerChainlinkOracle | - | - | |
| Core | USDT | SequencerChainlinkOracle | - | - | |
| Core | gmWETH-USDC | SequencerChainlinkOracle | - | - | |
| Core | gmBTC-USDC | SequencerChainlinkOracle | - | - | |
| Core | ARB | SequencerChainlinkOracle | - | - |
ZKsync Mainnet
Section titled “ZKsync Mainnet”| Pool | Market | MAIN oracle | PIVOT oracle | FALLBACK oracle | Notes |
|---|---|---|---|---|---|
| Core | WBTC | ChainlinkOracle | - | - | |
| Core | WETH | ChainlinkOracle | - | - | |
| Core | USDC | ChainlinkOracle | - | - | |
| Core | USDC_E | ChainlinkOracle | - | - | |
| Core | USDT | ChainlinkOracle | - | - | |
| Core | ZK | RedStoneOracle | ChainlinkOracle | ChainlinkOracle | Upper bound: 1.01. Lower bound: 0.99 |
| Core | wstETH | wstETHOneJumpChainlinkOracle | - | - | |
| Core | wUSDM | wUSDM-ERC4626Oracle | - | - | |
| Core | zkETH | ZkETHOracle | - | - | Assume 1:1 for WETH:rzkETH |
Base Mainnet
Section titled “Base Mainnet”| Pool | Market | MAIN oracle | PIVOT oracle | FALLBACK oracle | Notes |
|---|---|---|---|---|---|
| Core | cbBTC | ChainlinkOracle | - | - | |
| Core | WETH | ChainlinkOracle | - | - | |
| Core | USDC | ChainlinkOracle | - | - | |
| Core | wsuperOETHb | wsuperOETHb-ERC4626Oracle | - | - | |
| Core | wstETH | wstETHOneJumpChainlinkOracle | - | - |
Further Reading
Section titled “Further Reading”For more detailed information, refer to the following resources: