Skip to content

Resilient Price Oracle

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.

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.

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.

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.

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.

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 of EtherfiAccountantOracle). 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 of WeETHAccountantOracle). 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.
PoolMarketMAIN oraclePIVOT oracleFALLBACK oracleNotes
CoreAAVEChainlinkAtlasRedStoneUpper bound: 1.05. Lower bound: 0.95
CoreADAChainlinkAtlasRedStoneUpper bound: 1.05. Lower bound: 0.95
CoreasBNBAsBNBOracleAtlas-Upper bound: 1.05. Lower bound: 0.95
CoreBCHChainlinkAtlasRedStoneUpper bound: 1.05. Lower bound: 0.95
CoreBETH (Paused)Chainlink--
CoreBNBChainlinkAtlasRedStoneUpper bound: 1.01. Lower bound: 0.99
CoreWBNBChainlinkAtlasRedStoneUpper bound: 1.01. Lower bound: 0.99
CoreBTCBChainlinkAtlasRedStoneUpper bound: 1.01. Lower bound: 0.99
CoreBUSD (Paused)Chainlink--Price fixed to $1
CoreCAKEChainlinkAtlasRedStoneUpper bound: 1.05. Lower bound: 0.95
CoreDAIChainlinkAtlasRedStoneUpper bound: 1.05. Lower bound: 0.95
CoreDOGEChainlinkAtlasRedStoneUpper bound: 1.05. Lower bound: 0.95
CoreDOTChainlinkAtlasRedStoneUpper bound: 1.05. Lower bound: 0.95
CoreETHChainlinkAtlasRedStoneUpper bound: 1.01. Lower bound: 0.99
CoreFDUSDChainlinkAtlasRedStoneUpper bound: 1.05. Lower bound: 0.95
CoreFILChainlinkAtlasRedStoneUpper bound: 1.05. Lower bound: 0.95
CoreLINKChainlinkAtlasRedStoneUpper bound: 1.05. Lower bound: 0.95
CorelisUSDAtlas--
CoreLTCChainlinkAtlasRedStoneUpper bound: 1.05. Lower bound: 0.95
CoreMATIC (Paused)Chainlink--Price feed from $POL
CoreSOLChainlinkAtlasRedStoneUpper bound: 1.05. Lower bound: 0.95
CoreslisBNBSlisBNBOracleAtlas-Upper bound: 1.05. Lower bound: 0.95
CoresolvBTCSolvBTCOneJumpChainlinkOracleSolvBTCOneJumpFundamentalOracle-Upper bound: 1.02. Lower bound: 0.98. MAIN reads the Chainlink SolvBTC/BTC exchange rate feed
CoresUSDesUSDeOneJumpRedstoneOraclesUSDeOneJumpChainlinkOracle-Upper bound: 1.01. Lower bound: 0.99
CoreSXP (Paused)Chainlink--Price fixed to $0.00046
CoreTHEChainlinkAtlas-Upper bound: 1.05. Lower bound: 0.95
CoreTRXChainlinkAtlasRedStoneUpper bound: 1.01. Lower bound: 0.99
CoreTUSDChainlinkAtlas-Upper bound: 1.05. Lower bound: 0.95
CoreTRXOLD (Paused)ChainlinkRedStone-Upper bound: 1.01. Lower bound: 0.99
CoreTUSDOLD (Paused)Chainlink--
CoreTWTAtlasRedStone-Upper bound: 1.05. Lower bound: 0.95
CoreUNIChainlinkAtlasRedStoneUpper bound: 1.05. Lower bound: 0.95
CoreUSDCChainlinkAtlasRedStoneUpper bound: 1.01. Lower bound: 0.99
CoreUSDeUSDTChainlinkOracleChainlinkRedStoneUpper bound: 1.06. Lower bound: 0.94
CoreUSDTChainlinkAtlasRedStoneUpper bound: 1.01. Lower bound: 0.99
CoreUSD1ChainlinkAtlasRedStone
CoreVAIAtlas--Single price source: no pivot cross-validation and no fallback. Max stale period 86,700 seconds
CoreWBETHWBETHOracleAtlas-Upper bound: 1.05. Lower bound: 0.95
CoreXRPChainlinkAtlasRedStoneUpper bound: 1.05. Lower bound: 0.95
CorexSolvBTCxSolvBTCOneJumpChainlinkOraclexSolvBTCOneJumpRedstoneOracle-Upper bound: 1.02. Lower bound: 0.98. MAIN reads the Chainlink SVR xSolvBTC/SolvBTC exchange rate feed
CoreXVSChainlinkAtlasRedStoneUpper bound: 1.05. Lower bound: 0.95
CoreUChainlinkAtlas-Upper bound: 1.01. Lower bound: 0.99
CorePT-clisBNB-25JUN2026PendleOracle-PT-clisBNB-25JUN2026--
CorePT-sUSDE-26JUN2025 (Paused)PendleOracle-PT-sUSDe-26JUN2025--
CoreTSLABAtlasAPRO-Upper bound: 1.05. Lower bound: 0.95. Oracle Dynamic Protection (16.67% deviation trigger)
CoreNVDABAtlasAPRO-Upper bound: 1.05. Lower bound: 0.95. Oracle Dynamic Protection (16.67% deviation trigger)
CoreSPCXBAtlasAPRO-Upper bound: 1.05. Lower bound: 0.95. Oracle Dynamic Protection (16.67% deviation trigger)
CoreSKHYBAtlasAPRO-Upper bound: 1.05. Lower bound: 0.95. Oracle Dynamic Protection (16.67% deviation trigger)
PoolMarketMAIN oraclePIVOT oracleFALLBACK oracleNotes
CorecrvUSDChainlink--
CoreDAIChainlink--
CoreTUSD (Paused)Chainlink--
CoreUSDCChainlink--
CoreUSDTChainlink--
CoreWBTCChainlink--
CoreWETHChainlink--
CoreFRAX (Paused)Chainlink--
CoreLBTCLBTCOneJumpRedStoneOracle--
CoreEIGEN (Paused)Chainlink--
CoresFRAX (Paused)SFraxOracle--
CoreeBTCeBTCAccountantOracle--
CoreUSDSChainlink--
CoresUSDSsUSDS-ERC4646Oracle--
CoreweETHsWeETHAccountantOracle(weETHs)--
CoreBAL (Paused)Chainlink--
CoresUSDesUSDe-ERC4626Oracle--
CoreUSDeRedStoneChainlinkChainlinkUpper bound: 1.01. Lower bound: 0.99
CoretBTCChainlink--
PoolMarketMAIN oraclePIVOT oracleFALLBACK oracleNotes
CoreWBTCSequencerChainlinkOracle--
CoreWETHSequencerChainlinkOracle--
CoreUSDCSequencerChainlinkOracle--
CoreUSDTSequencerChainlinkOracle--
CoregmWETH-USDCSequencerChainlinkOracle--
CoregmBTC-USDCSequencerChainlinkOracle--
CoreARBSequencerChainlinkOracle--
PoolMarketMAIN oraclePIVOT oracleFALLBACK oracleNotes
CoreWBTCChainlinkOracle--
CoreWETHChainlinkOracle--
CoreUSDCChainlinkOracle--
CoreUSDC_EChainlinkOracle--
CoreUSDTChainlinkOracle--
CoreZKRedStoneOracleChainlinkOracleChainlinkOracleUpper bound: 1.01. Lower bound: 0.99
CorewstETHwstETHOneJumpChainlinkOracle--
CorewUSDMwUSDM-ERC4626Oracle--
CorezkETHZkETHOracle--Assume 1:1 for WETH:rzkETH
PoolMarketMAIN oraclePIVOT oracleFALLBACK oracleNotes
CorecbBTCChainlinkOracle--
CoreWETHChainlinkOracle--
CoreUSDCChainlinkOracle--
CorewsuperOETHbwsuperOETHb-ERC4626Oracle--
CorewstETHwstETHOneJumpChainlinkOracle--

For more detailed information, refer to the following resources: