# Advanced Concepts

## Getting a Fresh Price

Since the Frax protocol only updates Frax Oracle prices once per day, the price may be up to 23 hours and 59 minutes old. If you need a fresher price, you can call addRoundData() on the Dual Oracle to write a fresh price, and then call latestRoundData() / getRoundData() / getPrice() on the Frax Oracle to retrieve the fresh price.

## Smart Contract Design

<figure><img src="/files/cbSf1DRCGIaBlgwlndos" alt=""><figcaption><p>L1 -> L2</p></figcaption></figure>

## Timelock Configuration

Controls all configurations for all Frax Oracles on L1: [`0x8412ebf45bAC1B340BbE8F318b928C466c4E39CA`](https://etherscan.io/address/0x8412ebf45bac1b340bbe8f318b928c466c4e39ca)

Controls all configurations for all Frax Oracles on Arbitrum: [`0xB426B13372B7c967C4a2371B5e95FC7dc37545Db`](https://arbiscan.io/address/0xb426b13372b7c967c4a2371b5e95fc7dc37545db)

## Attacks and Mitigations

Oracle manipulation attacks are handled economically. There is too much protocol owned liquidity for manipulating the Curve / Uniswap pools to be profitable.\
\
Bounding prices ensures that frxEth/sfrxEth will never be overvalued and will never be undervalued by more than 30%. frxEth is fully backed with ETH in validators, so the only risk that exists with it is time duration risk.

## Contract Addresses

### L1

#### Dual Oracles / Price Sources

FrxEthEthDualOracle: [`0x350a9841956D8B0212EAdF5E14a449CA85FAE1C0`](https://etherscan.io/address/0x350a9841956D8B0212EAdF5E14a449CA85FAE1C0)

SfrxEthEthDualOracle: [`0x584902BCe4282003E420Cf5b7ae5063D6C1c182a`](https://etherscan.io/address/0x584902bce4282003e420cf5b7ae5063d6c1c182a)

#### Frax Oracles

SfrxEthFraxOracle: [`0x3d3D868522b5a4035ADcb67BF0846D61597A6a6F`](https://etherscan.io/address//0x3d3d868522b5a4035adcb67bf0846d61597a6a6f)

#### Crosschain

ArbitrumBlockHashRelay: [`0x784906554d44d33c2764c86e8848a2bd71c2e3a7`](https://etherscan.io/address/0x784906554d44d33c2764c86e8848a2bd71c2e3a7)

### L2 (Arbitrum)

ArbitrumBlockHashProvider:  [`0x240ff0894c584d39f992de5fdb603e03fc7e8a98`](https://arbiscan.io/address/0x240ff0894c584d39f992de5fdb603e03fc7e8a98)

StateRootOracle: [`0x11afa1d35f246fdc00d789e4a06f682b206f88c9`](https://arbiscan.io/address/0x11afa1d35f246fdc00d789e4a06f682b206f88c9)

#### Price Source

MerkleProofPriceSource: [`0xb032b46f835fa9e3d95d1e3f46fd307429505f9a`](https://arbiscan.io/address/0xb032b46f835fa9e3d95d1e3f46fd307429505f9a)

**Dual Oracles / Price Sources**

FrxEthEthDualOracle: TBD

SfrxEthEthDualOracle: TBD

#### Frax Oracles

SfrxEthFraxOracle: TBD<br>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.frax.finance/frax-oracle/advanced-concepts.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
