Yield
Yield has to come from somewhere real. For cUSD it comes from creator fees earned on tokenized stocks. Those stocks are sold into USDG before they reach the treasury, so the backing is always dollars — never a position that can fall in value overnight.
Trading activity on tokenized stocks on Robinhood Chain generates creator fees. That is the revenue behind cUSD.
Those stock fees are converted to USDG before they enter the treasury. Stocks move; the backing should not. The vault holds dollars only.
The USDG treasury is what makes the streamed APY real. Balances tick up every second at the target rate.
How you actually get paid
Through the streamed rate, and only that. Your balance grows every second because currentIndex() advances with time at ratePerYear(). No transaction is needed to keep it moving, and nobody has to claim anything.
Separately, settle() keeps the token honest about its backing. Anyone can call it — it is not privileged.
- If reserves fall short of outstanding cUSD, the shortfall is reported and all balances rebase down.
- If reserves exceed outstanding cUSD, that surplus stays as backing. It is deliberately not distributed.
- You can check the position yourself on-chain with treasuryValue(), cusdSupply() and pnl().
An earlier version of this contract did distribute surplus pro-rata, and it was exploited: someone minted a fraction of a cent, called settle() to inflate the index, and redeemed the entire treasury. Paying yield purely through the time-based rate removes that attack, because a share snapshot can no longer capture the reserves.
Why the rate is variable
The advertised APY is a target, not a promise. It is funded by actual fee revenue, and fee revenue depends on real trading activity. When activity is strong the treasury covers the rate comfortably. When it is weak, the rate can fall.
If the treasury takes a loss, balances rebase down and you can end up with less than you deposited. cUSD tracks real performance rather than guaranteeing a fixed return. This is the honest tradeoff for yield that is actually backed.
Verify it yourself
You do not have to take our word for the backing. Every number is readable on-chain.
treasuryValue() // USDG reserves actually held by the vault
cusdSupply() // total cUSD outstanding
pnl() // reserves − supply (positive = surplus)
ratePerYear() // the live APY, signedThe dashboard shows the same figures live, including the backing ratio — reserves divided by supply. Above 100% means fully backed.