Skip to main content
Starting November 1, 2026 at 00:00 UTC, the USDY price on Ethereum, BNB Chain, Mantle and Tempo comes from the ContinuousPriceOracle contract and rises continuously instead of once a day.
Important for integrators: The new oracle does not support getPriceHistorical. The USDYOracleWrapper has never supported it, so nothing changes if you read the wrapper. If your integration calls getPriceHistorical on the previous oracle directly, you will need another way to get USDY prices from November 1, 2026 onward.

How the price is calculated

The oracle stores a price and a yearly rate (APY). Each time the price is read, the oracle calculates it: the stored price, grown continuously at that rate since it was stored. USDY therefore earns yield throughout the day, and rUSDY and mUSD balances grow at the same pace.

Rate changes

The rate stays in force until Ondo changes it, so the price continues to accrue at that rate without a daily update. Ondo can schedule a new rate to start at a future time. A routine change is limited on-chain to 10% of the current rate (for example, at 3.75% APY, about 0.375 percentage points) and to once every 8 hours. Changes larger than this, or sooner than 8 hours after the last one, can only be made through a timelock.The ContinuousPriceOracle contract was audited by Spearbit (March 2025) and Cyfrin (October 2026). See Smart Contract Audits.

What changed

Before November 1, 2026, the USDY price came from the Dynamic Rate Oracle, which added a full day of yield at 00:00 UTC and needed a new rate range every month.

For integrators

Read the USDY price from the USDYOracleWrapper for your chain, listed on Smart Contract Addresses. The wrapper always points to the current USDY oracle, so integrators reading it don’t need to do anything at the switchover or at any future oracle change. The ContinuousPriceOracle addresses are listed there for reference. If you calculate the USDY price off-chain, switch to the continuous calculation.The new oracle supports getPrice() and getPriceData(), which never revert. It does not support getPriceHistorical.The previous oracle is expected to be deprecated on December 31, 2026. After that it receives no new rate and is paused, so getPrice() and getPriceData() on it will fail instead of returning an outdated price. Integrators that read it directly should move to the USDYOracleWrapper before then.