uOHM

reserve currency · ethereum mainnet · (3,3)

Every OHM fork quotes a backing per token and then explains, in the small print, that nothing buys back at any level. This one does.

Stake and your balance rebases every epoch. Bond ETH at a discount and grow the treasury. Both of those are ordinary. The difference is the third verb: you can burn your uOHM and take your pro-rata share of the treasury, at any time, from a contract that has no withdrawal function for anybody else.

redeem()

Burn uOHM, receive your exact share of treasury ETH. No cooldown, no vote, no owner.

MAX_SUPPLY

A hard cap in _mint. When it is reached, emissions stop permanently.

no withdrawal

The treasury has no function that lets anyone take ETH out except a holder who burned tokens.

The difference

A floor that is a floor.

Treasury

redeem(uint256 amount) → ETH

Burns amount of your uOHM and pays you treasuryBalance × amount / totalSupply. That is the whole function.

Because it exists, backing stops being an assertion. If uOHM trades below backing, anyone can buy on the market, redeem here, and keep the difference — so the gap pays somebody to close it. No one has to be trusted for that to work, and no governance decision can switch it off.

Redemption is share-preserving. Paying out balance × amount / totalSupply and burning amount leaves backing per token exactly where it was for everyone who stayed. We checked this at 1, 1,000, 100,000 and 500,000 tokens: bit-identical every time. Redeeming never dilutes the holders who do not.

The treasury has no withdrawal function. Not for the deployer, not for a multisig, not for anyone. ETH enters from bond sales and leaves only through redeem(). That is the only reason the floor is worth anything.

The three verbs

Stake, bond, redeem.

I · STAKE

Your balance grows

Deposit uOHM, receive suOHM. The index rises every epoch and every staked balance grows by the same factor at the same instant. Nothing to claim, no lock, unstake whenever.

II · BOND

The treasury grows

Sell ETH to the protocol below backing and receive uOHM vesting linearly. The ETH goes straight to the treasury and is never coming back out except through redemption.

III · REDEEM

The floor holds

Burn uOHM for your share of the treasury, any time. This is the exit that every other fork describes in a disclaimer instead of implementing.

Enforced or asserted

Which parts are contracts, and which are just numbers.

Reserve protocols are usually a dashboard with a token attached. Here is the same table every fork should publish, for this one.

Claim
Where it lives
Your staked balance compounds every epochsuOHM rebases
EnforcedStaking.rebase(), permissionless, catches up deterministically
The treasury backs the tokenbacking per token
EnforcedTreasury.redeem() pays it out on demand
Bonds put real assets inETH before tokens
Enforcedtreasury.fund() runs before token.mint()
Emissions are limitedrunway
EnforcedMAX_SUPPLY reverts the mint; runwayEpochs() reads it live
Nobody can drain the treasurycustody
Enforced — there is no withdrawal function to call
The APY is a returnthe headline number
False — it is a dilution rate. See below.

The rebase, honestly

The APY is an inflation rate wearing a costume.

A rebase mints new supply and splits it evenly among everyone holding the expanded supply. Your share of the staked pool after a rebase is exactly what it was before. No value is created by the act of rebasing, and the contract says so in its own comments.

What makes this version different is that the schedule is capped and the ceiling is real. Here is what each emission rate actually costs, simulated against a 10,000,000 hard cap with 90,000 staked:

Computed with the same arithmetic the Staking contract uses, at 8-hour epochs. When the cap is reached, mintable() returns zero and rebases stop paying — permanently. runwayEpochs() returns the remaining figure live, from chain state.
Rate / epochQuoted APYEpochs of runway DaysFinal index
0.10% 199% 4,712 1,571 111x
0.20% 792% 2,358 786 111x
0.30% 2,558% 1,573 524 111x
0.50% 23,442% 945 315 111x
1.00% 5.4e+6% 474 158 111x

Read the last two columns together. A rate that quotes a spectacular APY is the same rate that exhausts the cap fastest, and the index reaching 111x means the supply did too. The index rising and your position being worth more are different events.

Who pays for the discount

Bonding dilutes existing holders. Here is exactly how much.

Selling tokens below backing necessarily lowers backing per token — the discount is the value handed from current holders to the bonder. Every fork glosses over this. The algebra, for treasury T, supply S, deposit E and discount d:

backing_after / backing_before = (T + E)(1 - d) / (T(1 - d) + E)

It equals 1 only when d = 0, and falls toward (1 - d) as the deposit grows. So a 5% bond can dilute backing by at most 5%, and usually far less. The contract enforces that bound rather than assuming it.

Backing per token remaining after one bond, against a 250 ETH treasury and 1,000,000 supply. What holders receive in exchange is a permanently larger treasury — more ETH behind the token and more depth for redemption. It is a trade, not a free lunch.
Deposit0% discount2.5% 5%10%
1 ETH100.000%99.990%99.979%99.956%
50 ETH100.000%99.574%99.130%98.182%
500 ETH100.000%98.319%96.610%93.103%
5,000 ETH100.000%97.616%95.227%90.431%

The record

Canonical addresses.

Anything not listed here is not uOHM. Verify against this table before you touch anything.

ContractRoleAddress
UOHMERC-20, capped mintawaiting mainnet
Treasuryreserves, redeem()awaiting mainnet
Stakingepochs, rebaseawaiting mainnet
suOHMrebasing staked tokenawaiting mainnet
BondDepositoryETH bonds, vestingawaiting mainnet
PoolETH / uOHM, Uniswap v4awaiting mainnet