USDY & mUSD
USDY
USDY (US Dollar Yield Token): USDY is a tokenized note secured by short-term US Treasuries and bank demand deposits. USDY holders receive yield generated from the underlying assets in the form of increasing redemption value (accumulating token). USDY contract is an upgradeable (Transparent Upgradeable Proxy) ERC-20 token. To hold, send, and receive USDY, users should not be on the blocklist.mUSD
mUSD is the rebasing version of USDY, maintaining a consistent peg to $1. Interest is distributed via new token units. Users can swap freely between USDY and mUSD. A swapper UI will be available in October on ondo.finance. mUSD is heavily based on other rebasing tokens such asstETH. Users can acquire mUSD tokens by calling the wrap(uint256) function on the contract. While the price of a single USDY token increases over time, the price of a single mUSD token is fixed at a price of 1 Dollar, with yield being accrued in the form of additional mUSD tokens. Similarly when a user wishes to convert their mUSD to USDY they can call the unwrap(uint256) function, and receive their corresponding amount of USDY.
In order to determine the USD value of the USDY locked in the contract, mUSD reads the current price from the USDY oracle wrapper, which always points to the current USDY price oracle.
Because mUSD is the rebasing variant of USDY the same transfer restrictions for USDY are also applied to the mUSD token in the beforeTransfer(address,address,uint256) hook.
mUSD rebases continuously: balances are calculated from the current USDY price whenever they are read.
USDY Oracle (ContinuousPriceOracle)
TheContinuousPriceOracle contract publishes the USDY price on chain. It stores a price and a yearly rate (APY), and calculates the current price every time it is read: the stored price, grown continuously at that rate since it was stored. The price therefore rises continuously instead of once a day.
The current rate continues to apply until it is changed, so the price continues to accrue at that rate without a daily update. Rate changes can be scheduled in advance to start at a future time.
Integrating USDY into Your Web3 Application
As users may hold USDY or mUSD, a good practice is to support both. Let’s assume a user holds mUSD and wants to supply to your USDY pool.Option 1: Native integration
The user can directly use his mUSD to interact with your contracts. This means that your contracts will add an extra call to swap from mUSD to USDY before depositing the USDY in the pool. Example of a native integration: Compound pool on curve.fi

Option 2: Informative integration
When trying to supply mUSD, your app informs the user they need to swap to USDY before depositing to the pool: “To supply USDY, you must first swap your mUSD for USDY at ondo.finance” Example of an informative integration: wstETH on Balancer
SmartContracts details
- rUSDY.sol - This contract serves as the backbone for an interest-bearing token where users can
wrap and unwraptheirUSDYtokens to earn interest. It also includes features for access control and address management. - rUSDYFactory.sol - This is a factory contract that allows the deployment of upgradable instances of the
mUSD tokencontract. It is managed by a guardian address, and the deployment process involves creating an implementation contract, a proxy admin contract, and a proxy contract for the token. The code is designed to facilitate the upgradeability of themUSDtoken and includes functions for batched external calls. - ContinuousPriceOracle.sol - This contract provides the price of
USDY, calculated continuously from a stored price and a yearly rate. Rate changes are limited on chain in size and frequency, and the oracle can be frozen in an emergency without breaking price reads. - IRWADynamicOracle - This is an interface that sets a standard for any contract wishing to provide information about the price of
RWA(Asset-Backed Real World Assets) or similar assets. Contracts that implement this interface must provide agetPrice()function that returns the current price ofRWA. The interface does not contain implementation logic but simply establishes a common structure for communication with dynamic asset price oracles.

