# Oracle Registry

Facets quote prices, yields, or reference rates. To keep those look‑ups transparent, every oracle contract or data feed used by a MORE Vault must first be listed in the Oracle Registry. Like the Vault Registry, the Oracle Registry tells the ecosystem where a data point comes from and whether the DAO considers it reliable.

Each registry entry stores:

* **`oracleAddress`** – the contract read by facets.
* **`asset`** – the quote asset, an ERC‑20 or symbol that the feed returns (ETH, USDC, etc.).
* **`stalenessThreshold`** – the maximum time since `updatedAt`, standardized using Chainlink's interface.

{% hint style="info" %}
Any non-Chainlink oracle provided by another publisher must be wrapped in an adapter in order to standardize its format with the Chainlink interface.
{% endhint %}

## DAO approval criteria

Before adding an oracle, the DAO checklist includes:

1. **Implementation audit** – Verified that the contract cannot be paused or manipulated by a single key.
2. **Data source review** – Confirm the upstream source (e.g. Chainlink aggregator, TWAP window) and fallback rules.
3. **Liveness test** – Feed must have updated within the last `stalenessThreshold` seconds at proposal time.

If passed, the DAO calls `setOracleInfos(assets[], oracleInfo[])` where `oracleInfo` is struct:

```
struct OracleInfo {
        IAggregatorV2V3Interface aggregator;
        uint96 stalenessThreshold;
    }
```

## How facets use the registry

* To get an oracle for a particular asset, you can use the function, `getOracleInfo(asset)`.
* `getAssetPrice(asset)` gets the price data from the oracle and checks its staleness.
