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

Timelock Configuration

Controls all configurations for all Frax Oracles on L1: 0x8412ebf45bAC1B340BbE8F318b928C466c4E39CA

Controls all configurations for all Frax Oracles on Arbitrum: 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


Dual Oracles / Price Sources

FrxEthEthDualOracle: 0x350a9841956D8B0212EAdF5E14a449CA85FAE1C0

SfrxEthEthDualOracle: 0x584902BCe4282003E420Cf5b7ae5063D6C1c182a

Frax Oracles

SfrxEthFraxOracle: 0x3d3D868522b5a4035ADcb67BF0846D61597A6a6F


ArbitrumBlockHashRelay: 0x784906554d44d33c2764c86e8848a2bd71c2e3a7

L2 (Arbitrum)

ArbitrumBlockHashProvider: 0x240ff0894c584d39f992de5fdb603e03fc7e8a98

StateRootOracle: 0x11afa1d35f246fdc00d789e4a06f682b206f88c9

Price Source

MerkleProofPriceSource: 0xb032b46f835fa9e3d95d1e3f46fd307429505f9a

Dual Oracles / Price Sources

FrxEthEthDualOracle: TBD

SfrxEthEthDualOracle: TBD

Frax Oracles

SfrxEthFraxOracle: TBD

Last updated