# Improving Oracle Robustness: Introducing Tenor's Oracle with Validation

By [Tenor](https://blog.tenor.finance) · 2026-07-01

---

Tenor is open-sourcing a new Morpho-compatible oracle: the [Oracle with Validation](https://github.com/tenor-labs/tenor-contracts/tree/main/src/oracles), a simple oracle contract that can be used to improve the robustness of collateral pricing by validating a primary oracle against an independent second source before letting a price through.

Price oracles are a critical point of failure in onchain lending markets. The Oracle with Validation contract gives market creators another way to build oracles that don't depend on a single source of truth. When a market relies on just one feed, any single failure — manipulation, a stale price, an upstream compromise — can lead to the realization of bad debt or improper liquidations.

The Oracle with Validation contract, contributes to an expanding number of oracles in the Morpho ecosystem (e.g., Steakhouse Meta Oracle Deviation, Ojo oracles). No oracle design eliminates risk entirely, but additional validations raise the cost of manipulation and mitigate single points of failure.

How the oracle with validation works
------------------------------------

Tenor’s Oracle with Validation wraps two independent oracles:

*   **A primary oracle**: The main price source, the value that's ingested by the Morpho market.
    
*   **A validation oracle**: A second, independent source used purely as a validation check. Its price is never returned and never read by the market; it only determines whether the primary price is allowed through or not.
    

![](https://storage.googleapis.com/papyrus_images/af87ed7480953d249e3dda165e440da02c27076c914494acca8b729b7da44f7b.png)

ETH/USD Oracle with Validation details from [app.tenor.finance](http://app.tenor.finance)

On every `price()` call, the contract reads the primary oracle, then reads the validation oracle and measures the deviation between them. If the two prices are within a configured threshold, the primary price is returned and the market behaves exactly as it would have otherwise. If they diverge beyond the threshold, the call reverts.

When a feed is manipulated or compromised, the deviation check trips and the price function reverts effectively temporarily halting borrows, collateral withdrawals, and liquidations until the discrepancy resolves.

For example, if the Chainlink price and Redstone price for ETH/USD diverge by more than 12%, it's unclear which one is wrong, but assuming both feeds are trusted, the market should be paused while that deviation exists. The validation check can also be useful for pegged assets to check a NAV feed against a reliable market price feed and pause temporarily if the market price is out of sync with the reported NAV (e.g., due to a security incident, or large mint).

There's a deliberate trade-off here, while the feeds disagree, liquidations are blocked too. A threshold set too tight increases the risk of not being able to liquidate unhealthy borrowers. The deviation threshold should be set wide enough such that normal price drift dont trip the check. Integrators should be careful when using more easily manipulable validation oracles (e.g., TWAP oracles), to avoid pausing a market by mistake. To handle the case where a validation feed itself becomes unreliable — or to deliberately accept deviations beyond the set threshold — an owner can be set with the ability to remove the validation check, falling back solely on the primary price.

Composable with existing Morpho Oracles
---------------------------------------

The Oracle with Validation can be composed with:

*   **Oracles from multiple providers**: pair independent providers, e.g. Chainlink vs Redstone or Chronicle. Both have to fail in the same direction at the same time to push a bad price through.
    
*   **Onchain TWAP**: validate against an onchain TWAP (typically a short TWAP to minimize drift vs spot). The TWAP must be resistant against multi-block manipulation.
    
*   **Steakhouse** [**Meta Oracle Deviation Timelock**](https://github.com/Steakhouse-Financial/steakhouse-oracles/blob/main/src/MetaOracleDeviationTimelock.sol): itself wraps two feeds and uses a timelock-gated challenge mechanism to switch from a primary feed to a backup when they diverge. Can be combined with the validation oracle to pause on a large deviations, while allowing to switch oracles from primary to backup using the Steakhouse mechanism.
    

Compatible with Morpho Blue and Midnight markets
------------------------------------------------

The Oracle with Validation can be used for Morpho Blue markets, and for upcoming Morpho Midnight markets. Find the Oracle with Validation [here](https://github.com/tenor-labs/tenor-contracts/tree/main/src/oracles), and learn more in [Tenor's technical documentation](https://www.docs.tenor.finance/technical-docs/oracle-with-validation).

---

*Originally published on [Tenor](https://blog.tenor.finance/validation-oracles)*
