# 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="https://1160856619-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MJQZW1mSg2O5N7HXHo0-1972196547%2Fuploads%2FOupo5gALMP6sjibVPBZ2%2FL2%20-%20frxEth_ETH%20and%20sfrxEth_Eth%20Frax%20Oracles%20(5).png?alt=media&#x26;token=662d22f7-8061-469c-8fed-abba2e1dc09a" 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>
