For the complete documentation index, see llms.txt. This page is also available as Markdown.

Resilient Price Oracle

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

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

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

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

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

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.

Current configuration

BNB chain

Pool
Market
MAIN oracle
PIVOT oracle
FALLBACK oracle
Notes

Core

AAVE

Upper bound: 1.05. Lower bound: 0.95

Core

ADA

Upper bound: 1.05. Lower bound: 0.95

Core

asBNB

-

Upper bound: 1.05. Lower bound: 0.95

Core

BCH

Upper bound: 1.05. Lower bound: 0.95

Core

BETH (Paused)

-

-

Core

BNB

Upper bound: 1.01. Lower bound: 0.99

Core

WBNB

Upper bound: 1.01. Lower bound: 0.99

Core

BTCB

Upper bound: 1.01. Lower bound: 0.99

Core

BUSD (Paused)

-

-

Core

CAKE

Upper bound: 1.05. Lower bound: 0.95

Core

DAI

Upper bound: 1.05. Lower bound: 0.95

Core

DOGE

Upper bound: 1.05. Lower bound: 0.95

Core

DOT

Upper bound: 1.05. Lower bound: 0.95

Core

ETH

Upper bound: 1.01. Lower bound: 0.99

Core

FDUSD

Upper bound: 1.05. Lower bound: 0.95

Core

FIL

Upper bound: 1.05. Lower bound: 0.95

Core

LINK

Upper bound: 1.05. Lower bound: 0.95

Core

lisUSD

-

-

Core

LTC

Upper bound: 1.05. Lower bound: 0.95

Core

MATIC (Paused)

-

-

Price feed from $POL

Core

SOL

Upper bound: 1.05. Lower bound: 0.95

Core

slisBNB

-

Upper bound: 1.05. Lower bound: 0.95

Core

solvBTC

-

Upper bound: 1.02. Lower bound: 0.98. MAIN reads the Chainlink SolvBTC/BTC exchange rate feed

Core

sUSDe

-

Upper bound: 1.01. Lower bound: 0.99

Core

THE

Upper bound: 1.05. Lower bound: 0.95

Core

TRX

Upper bound: 1.01. Lower bound: 0.99

Core

TUSD

-

Upper bound: 1.05. Lower bound: 0.95

Core

TRXOLD (Paused)

-

Upper bound: 1.01. Lower bound: 0.99

Core

TUSDOLD (Paused)

-

-

Core

TWT

-

Upper bound: 1.05. Lower bound: 0.95

Core

UNI

Upper bound: 1.05. Lower bound: 0.95

Core

USDC

Upper bound: 1.01. Lower bound: 0.99

Core

USDe

Upper bound: 1.06. Lower bound: 0.94

Core

USDT

Upper bound: 1.01. Lower bound: 0.99

Core

VAI

-

-

Single price source: no pivot cross-validation and no fallback. Max stale period 86,700 seconds

Core

WBETH

-

Upper bound: 1.05. Lower bound: 0.95

Core

XRP

Upper bound: 1.05. Lower bound: 0.95

Core

xSolvBTC

-

Upper bound: 1.02. Lower bound: 0.98. MAIN reads the Chainlink SVR xSolvBTC/SolvBTC exchange rate feed

Core

XVS

Upper bound: 1.05. Lower bound: 0.95

Core

U

-

Upper bound: 1.01. Lower bound: 0.99

Core

PT-clisBNB-25JUN2026

-

-

Core

PT-sUSDE-26JUN2025 (Paused)

-

-

Core

TSLAB

-

Upper bound: 1.05. Lower bound: 0.95. Oracle Dynamic Protection (16.67% deviation trigger)

Core

NVDAB

-

Upper bound: 1.05. Lower bound: 0.95. Oracle Dynamic Protection (16.67% deviation trigger)

Core

SPCXB

-

Upper bound: 1.05. Lower bound: 0.95. Oracle Dynamic Protection (16.67% deviation trigger)

Core

SKHYB

-

Upper bound: 1.05. Lower bound: 0.95. Oracle Dynamic Protection (16.67% deviation trigger)

Ethereum

Pool
Market
MAIN oracle
PIVOT oracle
FALLBACK oracle
Notes

Core

crvUSD

-

-

Core

DAI

-

-

Core

TUSD (Paused)

-

-

Core

USDC

-

-

Core

USDT

-

-

Core

WBTC

-

-

Core

WETH

-

-

Core

FRAX (Paused)

-

-

Core

EIGEN (Paused)

-

-

Core

sFRAX (Paused)

-

-

Core

USDS

-

-

Core

BAL (Paused)

-

-

Core

USDe

Upper bound: 1.01. Lower bound: 0.99

Core

tBTC

-

-

Arbitrum One

Pool
Market
MAIN oracle
PIVOT oracle
FALLBACK oracle
Notes

ZKsync Mainnet

Pool
Market
MAIN oracle
PIVOT oracle
FALLBACK oracle
Notes

Core

WBTC

-

-

Core

WETH

-

-

Core

USDC

-

-

Core

USDC_E

-

-

Core

USDT

-

-

Core

ZK

Upper bound: 1.01. Lower bound: 0.99

Core

zkETH

-

-

Assume 1:1 for WETH:rzkETH

Base Mainnet

Pool
Market
MAIN oracle
PIVOT oracle
FALLBACK oracle
Notes

Further Reading

For more detailed information, refer to the following resources:

Audit reports

References

Last updated