A central bank in a Uniswap v4 hook

OHM, compiled
into a hook.

Olympus is a central bank built from a dozen contracts and a keeper who has to wake it every eight hours. OHMIC is the same bank inside one Uniswap v4 hook, on the one pool where it trades. Every swap is the heartbeat. The pool is the central bank.

  • A floor that buys every sell at exactly backing, inside the swap
  • Supply that grows only when the market pays twice backing or more
  • Loans against backing, with no price feed and no liquidations
  • Backing per token that can never fall
  • No owner, no keeper, no oracle, no setter
OHM1C 0x10CC v4 · ETH/OHMIC

The hook's 14 permission bits as pins. Lit pins are wired: afterInitialize, beforeSwap, afterSwap and both swap deltas. Nothing touches liquidity, so the Uniswap app can open the pool.

Live from the hook

Price—ETH per 1M OHMIC
Backing—ETH per 1M OHMIC
Premium—price ÷ backing
Treasury—ETH held + lent

Read from the hook on Ethereum mainnet, every 20 seconds.

B = (T + L) ⁄ S

The one equation. B is backing per OHMIC, T the ETH the treasury holds, L the ETH out on loans, and S the OHMIC in circulation. Every rule in the hook is defined against B, and none of them can make it smaller. B reads no oracle: it is made of two numbers the hook keeps itself.

Five organs, one hook

Each one replaces a piece of Olympus. The docs cover each in full.

Mechanism

One swap, followed through the bank

The five organs all sit on the path every trade already takes. There is nothing to call, claim or crank.

SWAP INUniversal Router HEART tick × time, 8 h P vs B P ≥ 2B and P ≥ MA P ≤ B EMISSIONSsells into buys at P FEE 1% FLOORbuys every sell at B POOL ETH / OHMIC TREASURY BUS · ETH as PoolManager claims Ttreasury Bthe floor, ground COOLERL, 95% of B

Why backing can only rise

  • Fees add ETH. 0.8% of every trade goes to T, while S is unchanged.
  • The floor pays at most B. Retiring a token at backing leaves (T + L) ⁄ S exactly where it was, and the 1% fee nudges it up.
  • Emissions sell at 2B or more. Every new token brings in at least twice the backing it dilutes.
  • Loans move ETH, they don't spend it. T falls and L rises by the same amount, and the up-front charge adds to B.
  • Defaults burn collateral. A loan was at most 95% of a backing that has only risen since, so burning its collateral lifts B.

Specs

Every number, as compiled

P is the pool's price, B backing, MA the 7-day moving average, and S circulating supply. Every value is a constant in the hook's bytecode. Nobody can change them, the launcher included.

ParameterConditionsMinTypMaxUnit
Swap fee, on the ETH sideevery swap shape, after the first 5 min1.0%
Opening feefalls linearly over the first 300 s1.025.0%
Launcher's shareof the trade, out of the fee0.2%
Floor bidP ≤ B, up to the liquid treasury0.99 BETH/OHMIC
Emission priceP ≥ 2B and P ≥ MA2 BETH/OHMIC
Emission allowance per epoch× clamp(P_MA ⁄ 2B, 1, 3)0.00670.0201% of S
Emission share of one buyexact-in or exact-out50%
Epochclosed by the first swap after it8hours
Moving average21 epochs, time-weighted7days
Loan to backingat origination95% of B
Loan chargepaid up front, pro rata1% a year
Loan term7365days
Treasury on loanchecked at each new loan50%
Supply at launchminted once; after that only the hook mints1,000,000,000OHMIC

Opening fee vs time

Exact: 25% at the open, 1% from 300 s on.

Emission multiple vs premium

Exact: 0 below 2B, then P ⁄ 2B, held at 3× from 6B on.

Price and backing, simulated

Illustrative: a seeded random market run through the real rules.

OHM vs OHMIC

The same bank, moved inside the market

OHMIC follows Olympus's 2026 machine, researched from its documentation and its live contracts. Olympus lives beside its market: it reads prices from other venues, sells through auctions, buys back through bond markets, and pays a keeper to keep time. A v4 hook lives inside the market, so each of those becomes part of the swap.

$11.20

OHM's liquid backing per token as Olympus publishes it, against a price near $20: about 1.8× backing.

every 8 h

How often a paid keeper has to call Olympus's Heart. In OHMIC, the first swap of each epoch does it.

FunctionOlympus (OHM)OHMIC
BackingLiquid treasury ÷ floating supply, shown on a dashboardbacking(), exact, on chain, never falls
Buying below backingYield Repurchase Facility: weekly yield, daily Bond Protocol auctionsThe floor, in the same swap as the sell
Selling above backingEmissions Manager at ≥ 100% premium, via Convertible Deposit auctions, then bondsEmissions at ≥ 2× backing, into buys, at the pool's price
LoansCooler V2: USDS against gOHM at about backing, 0.5% APR, no liquidationsCooler: ETH against OHMIC at 95% of backing, 1% a year, no liquidations
ClockThe Heart: a keeper paid to call beat() every 8 hoursThe first swap of each 8-hour epoch
Price inputPRICE module, a moving averageTick × time accumulator, 21 epochs
Range wallsRange Bound Stability, now disabledThe floor and emissions, always on
ParametersSet by governanceCompiled in, for ever
Treasury yieldSky Savings Rate on USDSNone: backing grows from trading alone

OHMIC is independent and is not affiliated with or endorsed by Olympus DAO. OHM is Olympus's token.

What is OHMIC

OHMIC is an ERC-20 token whose central bank lives inside its own Uniswap v4 pool. The bank is a single smart contract, a hook, that Uniswap calls on every swap in the ETH/OHMIC pool. It holds a treasury of ETH, and uses it to do four things Olympus does for OHM:

  • Buy every sell at backing when the price falls to backing: the floor.
  • Sell new tokens into buys when the market pays twice backing or more: emissions.
  • Lend ETH against OHMIC at 95% of backing with no liquidations: Cooler.
  • Keep time from the swaps themselves: the heart.

Everything is defined against one number, backing: the ETH behind each token. No rule in the hook can lower it.

Nothing to install, stake or claim. You trade OHMIC in the Uniswap app like any token. The bank runs inside your swap. The only separate app is the bank, for loans and for watching the numbers.

Where the name comes from

OHM is Olympus's token, and the ohm is the unit of resistance. "Ohmic" describes a component that obeys Ohm's law: linear, predictable, the same response every time. That is the design goal. Every rule is a constant, and the same trade always meets the same rules.

Buying and selling

OHMIC trades in one pool: ETH / OHMIC on Uniswap v4. Use the Uniswap app, or any wallet or aggregator that routes through it, and swap as you would any token.

What you pay

Every swap pays 1% of its ETH side to the hook, on top of the pool's 0.30% liquidity fee. A buy pays it on the ETH you spend, and a sell on the ETH you receive. The fee is the same in every swap shape: exact-in, exact-out, buys and sells. For the first five minutes after the pool opens, the fee starts at 25% and falls in a straight line to 1%.

Fee partOf the tradeGoes to
Treasury0.8%Backing, for every holder
Launcher0.2%The wallet that launched OHMIC
Pool fee0.30%The pool's liquidity

What can happen inside your swap

  • You sell while the price is at or below backing. The hook buys your OHMIC itself at exactly backing less 1%, and the pool's price does not move. More.
  • You buy while the price is at least twice backing and above its average. The hook may fill up to half of your buy itself, at the pool's current price. That half doesn't push the price up, so your average is better than the pool alone would give. More.
  • Otherwise your trade goes through the pool as usual, less the fee.
Use normal slippage settings. The bank never fills you at a worse price than the pool would.

Backing

Backing is the ETH behind each OHMIC:

B = (T + L) / S

T  ETH the treasury holds       reserve()
L  ETH out on Cooler loans      lent()
S  OHMIC in circulation          circulating()  =  totalSupply − vault

The hook reports it as backing(), in wei per whole OHMIC (1e18 units). It counts every token in circulation, including tokens held in the pool and tokens locked as loan collateral. The only tokens it leaves out are the ones the floor has bought, which the hook holds.

Backing never falls

Every way the hook changes T, L or S keeps (T + L) ⁄ S the same or raises it:

EventTLSBacking
Swap fee+0.8%rises
Floor buys x at B−0.99·B·x−xrises (by the fee)
Emission sells x at P ≥ 2B+P·x+xrises
Loan of D, charge c−(D−c)+Drises (by c)
Repayment of D+D−Dunchanged
Default: D written off, C burned−D−Crises (D ≤ 0.95·B·C)
Anyone burns OHMIC−xrises
Donation+xrises

Rounding always goes in the treasury's favour. Randomised testing of about 128,000 actions per run found backing fell by exactly zero wei.

Backing is not the price. The price is whatever the market pays. Backing is the level at which the hook stands ready to buy, and that is only as deep as the ETH the treasury holds. See Risks.

The floor

When the pool's price is at or below backing, the hook stops the pool from filling sells and fills them itself, at exactly backing less the 1% fee. The OHMIC it buys leaves circulation.

How a sell is filled

  1. At the start of your swap, the hook compares the pool's price with backing.
  2. If the price is above backing, the pool fills your sell as usual.
  3. If it is at or below, the hook takes your OHMIC and pays you amount × B × 0.99 in ETH from the treasury. The pool's price does not move.
  4. If the treasury cannot pay for all of it, the hook fills what it can and the pool fills the rest.

Why the floor can take every seller

Buying at backing leaves backing unchanged: (T − B·x) ⁄ (S − x) = B. As long as the treasury holds its ETH, the floor can buy the whole supply at the same price. The fee it keeps raises backing a little with each sale.

Arbitrage keeps the pool at the floor

If a large sell pushes the pool below backing, anyone can buy cheap in the pool and sell to the floor at backing. That trade is profitable, and it pulls the pool's price back up.

Where the bought OHMIC goes

It sits in the hook's vault, out of circulation. If emissions later sell OHMIC, the vault is sold before anything new is minted. Anyone can call incinerate() to burn the vault for good instead, which leaves backing exactly where it is.

Emissions

When the market values OHMIC far above its backing, the hook turns that premium into more backing. It sells OHMIC into buys at the pool's price.

When the hook sells

All three must hold at the start of a buy:

  • the price is at least twice backing (P ≥ 2B);
  • the price is at or above its 7-day moving average, so pushing the price down cannot buy emissions cheaply;
  • this epoch's allowance is not used up. Emissions never run in the first epoch after launch.

How much

allowance per 8-hour epoch = S × 0.0067% × m
m = clamp( P_MA / (2 × B), 1, 3 )     (0 below 2× backing)

That is 0.02% of supply a day at twice backing, rising to at most 0.06% a day at six times backing or more. The hook fills at most half of any one buy, so the price still moves with demand and the allowance spreads across buyers.

At what price

The pool's own price at the moment of your buy. You get that price on the hook's half with no slippage, so your fill is never worse than the pool alone, and usually better.

Why it raises backing

Every token is sold for at least 2B of ETH, while each new token in circulation only needs B. Every emission adds more to T than it dilutes S.

Cooler loans

Cooler lends ETH against OHMIC, priced on backing rather than the market. Nothing in a loan reads a price, so nothing can liquidate it.

TermValue
You borrow95% of your collateral's backing, in ETH
Charge1% a year of the loan, pro rata, taken up front
Length7 to 365 days, chosen when you borrow
To close itrepay the full loan amount, in ETH, by the due date
If you don'tafter the due date anyone can close it: your OHMIC is burned, and you keep the ETH you borrowed
Liquidationnone: the market price never matters
Capacityat most half the treasury can be out on loans at once

A worked example

Backing is 0.000002 ETH per OHMIC. You lock 10,000,000 OHMIC for 30 days.

backing of the collateral   10,000,000 × 0.000002 = 20 ETH
loan (95%)                   19 ETH
charge (1% × 30/365)         0.015616… ETH
you receive now              18.984383… ETH
you repay by the due date    19 ETH, and get your 10,000,000 OHMIC back

When a loan makes sense

A Cooler loan is cheap ETH against OHMIC you intend to keep, with no risk of liquidation. If the market price is far above backing, selling would raise more. If you never repay, the outcome equals selling at 95% of backing, less the charge.

The due date is final. One second after it, anyone can close your loan and burn your OHMIC. Repay before then. The bank shows the date for each loan.

The heart and epochs

Olympus pays a keeper to call beat() every eight hours. OHMIC uses the trades themselves as its clock.

Every swap

Before anything else, the hook adds the price that has held since the last swap, weighted by how long it held, into an accumulator: cumTick += tick × seconds. Prices that last longer count more, and a price held for one block barely counts.

The first swap of each epoch

An epoch is 8 hours. The first swap after one ends:

  1. closes the epoch's time-weighted average price;
  2. adds it to a ring of the last 21 epochs, which is the 7-day moving average;
  3. sets the new epoch's emission allowance from the moving average against backing;
  4. emits a Beat event.

If nobody trades for a day, the next swap closes one long epoch covering all of it, and the idle time still counts. Nothing breaks and nothing needs calling. The bank simply waits for the market.

Fees

The hook takes one fee: 1% of the ETH side of every swap, in ETH. It is never taken in OHMIC, and there is no tax in the token contract.

  • For an exact-in buy, it comes out of the ETH you send.
  • For an exact-out buy, it is added to the ETH you pay.
  • For an exact-in sell, it comes out of the ETH you receive.
  • For an exact-out sell, you receive exactly the ETH you asked for, and the fee is taken on top.

Split: 0.8% of the trade goes to the treasury and 0.2% to the launcher's wallet. Anyone can call collect() to pay out the launcher's share.

The opening: for 300 seconds after the pool opens, the fee falls linearly from 25% to 1%. The launcher's part stays at 0.2%; everything above it goes to the treasury. A bot that buys the first block pays a quarter of its buy into backing.

Borrow ETH against OHMIC

  1. Open the bank and press Connect.
  2. Under Cooler, enter how much OHMIC to lock and for how many days (7–365).
  3. Read the quote: the ETH you receive now, the amount to repay, and the charge.
  4. Press Borrow. The first time, your wallet asks you to approve OHMIC for the bank; then it asks you to confirm the loan.
  5. The ETH arrives in the same transaction. Your loan appears in the table with its due date.
If the bank says the treasury can't lend that much, half the treasury is already out on loans. Try a smaller amount, or wait for repayments.

Without the bank app

On Etherscan, call approve(hook, amount) on the token, then borrow(collateral, termSeconds) on the hook. Both amounts are in 18-decimal units. quoteLoan(collateral, termSeconds) returns the loan and the charge first, for free.

Repay a loan

  1. Open the bank with the wallet that borrowed, and press Connect.
  2. Your open loans are listed under Cooler. Press Repay on the loan.
  3. Your wallet sends exactly the loan amount in ETH. Your OHMIC comes back in the same transaction.

You must repay the whole loan at once, before the due date. repay(id) needs a value exactly equal to the loan's debt; any other amount is refused (WrongAmount). Only the borrower can repay (NotYours).

To extend a loan, repay it and borrow again for a new term.

Close overdue loans

After a loan's due date, anyone can close it. The collateral is burned, the loan is written off, and backing rises for every holder. The caller receives nothing; it is a public service, and costs a little gas.

  1. Open the bank. Overdue loans are listed under Treasury.
  2. Press Close next to one and confirm.

On Etherscan this is seize(id). It reverts with NotDue before the due date, and with Closed if the loan was already repaid or closed.

Donate to the treasury

donate() sends ETH straight into the treasury. Nothing comes back to the sender. It raises backing for every OHMIC, and so raises the level at which the floor buys.

In the bank, enter an amount under Treasury and press Donate.

The same panel has two more public buttons:

  • Pay the launcher's 0.2% (collect()) pays the launcher's accumulated share to the launcher's wallet.
  • Burn the floor's OHMIC (incinerate()) burns the vault for good. Backing is unchanged.

Check the numbers yourself

Every number on this site comes from public view functions on the hook. Open the hook's page on Etherscan (see Contracts), then Contract → Read Contract:

To seeCallUnits
Backingbacking()wei per 1e18 OHMIC
Pool priceprice()wei per 1e18 OHMIC
Treasury, loansreserve(), lent()wei
Is the floor buying?floorOpen()bool
Are emissions selling?emissionsOpen(), emitLeft()bool, OHMIC wei
Moving averagemovingAverage()wei per 1e18 OHMIC
A loanloans(id)borrower, due, collateral, debt

To turn backing into "ETH per million OHMIC", divide by 1012.

Hook: functions

OhmicHook is the bank. Its permission bits are 0x10CC: afterInitialize, beforeSwap, afterSwap, beforeSwapReturnDelta and afterSwapReturnDelta. It has no owner and no function that changes a parameter.

Actions

FunctionWhoWhat it does
borrow(uint256 collateral, uint256 term)anyoneLocks collateral OHMIC (approval needed) and pays 95% of its backing less the charge. term is in seconds, 7 to 365 days. Returns (id, paid).
repay(uint256 id) payableborrowerSend exactly the loan's debt; the collateral is returned.
seize(uint256 id)anyoneAfter the due date: burns the collateral and writes the loan off.
donate() payableanyoneAdds ETH to the treasury.
collect()anyonePays the launcher's accumulated 0.2% to the launcher.
incinerate()anyoneBurns the OHMIC the floor holds.

Views

FunctionReturns
backing()ETH per whole OHMIC, in wei: (reserve + lent) × 1e18 ⁄ circulating
price()The pool's price, ETH per whole OHMIC, in wei
movingAverage()The 7-day time-weighted price, same units; 0 before the first epoch closes
circulating()totalSupply − vault
reserve(), lent(), vault(), launcherOwed()The bank's books
floorOpen(), emissionsOpen()Whether each one would act on a swap now
emitLeft()OHMIC the hook may still sell this epoch
feePips()The fee now, in millionths (10,000 = 1%)
quoteLoan(collateral, term)(debt, charge) for a loan now
lendable()ETH that may still go out on loans
loans(id), loanCount()A loan: borrower, due, collateral, debt (debt 0 = closed)
epoch(), epochStart(), maTick(), ringLen()The heart's state
swaps(), volume(), fees(), emitted(), minted(), absorbed(), seized()Lifetime totals
TOKEN(), LAUNCHER(), poolId(), live()Wiring

Constants

FEE 10,000 · OPENING_FEE 250,000 · OPENING 300 s · LAUNCHER_SHARE 2,000 · EPOCH 28,800 s · MA_EPOCHS 21 · MIN_PREMIUM 2,000,000 · BASE_EMISSION 67 per million · MAX_MULTIPLE 3 · MAX_EMISSION_SHARE 500,000 · LTV 950,000 · RATE 10,000 · MAX_LENT 500,000 · MIN_TERM 7 days · MAX_TERM 365 days. Values in "pips" are millionths.

Token

Ohmic is a plain ERC-20: name Ohmic, symbol OHMIC, 18 decimals. 1,000,000,000 OHMIC were minted once, to the launcher.

FunctionNotes
transfer, transferFrom, approveStandard. No fee, no tax, no blacklist, no pause.
burn(uint256 amount)Burns your own OHMIC. Raises backing.
mint(address, uint256)Only the hook can call it (NotHook for anyone else), and only through emissions.
HOOK()The hook's address, fixed at deployment.

Events and errors

Events

EventWhen
Opened(id, fee, tickSpacing, sqrtPriceX96)The pool opened
Beat(epoch, twapTick, maTick, allowance, backing)An epoch closed
Floor(ohmic, eth, backing)The floor bought from a seller
Emission(ohmic, eth, fromVault)The hook sold into a buy
Borrowed(id, borrower, collateral, debt, charge, due)A loan opened
Repaid(id, borrower)A loan was repaid
Seized(id, collateral, debt)An overdue loan was closed
Donated(from, eth), Collected(eth)Treasury in, launcher share out

Errors you might see

ErrorMeaning
BadTermLoan term outside 7–365 days
TooMuchLentThis loan would put more than half the treasury on loan
NothingToBorrowThe collateral is worth nothing at current backing
NotYoursOnly the borrower can repay
WrongAmountRepay with exactly the loan's debt
NotDueThe loan cannot be closed before its due date
ClosedThe loan is already repaid or closed
NotLiveThe pool has not opened yet

Formulas

Units: ETH in wei, OHMIC in 18-decimal units. "Pips" are millionths. The pool's price comes from Uniswap's sqrtPriceX96. ETH is currency0, so a higher tick means a cheaper OHMIC.

backing          B = (reserve + lent) · 1e18 / circulating
fee              f = 1%  ;  opening: f(t) = 1% + 24% · (300 − t)/300, t < 300 s

floor            open when  sqrtP² / 2^96  ≥  circulating · 2^96 / (reserve + lent)
                 pays       x · (reserve + lent) / circulating · (1 − f)   (rounded down)

emissions        open when  P ≥ 2B  and  tick ≤ maTick  and  emitLeft > 0
                 fills      min(½ of the buy, emitLeft) at the pool price
allowance        emitLeft = circulating · 67/1e6 · m,   m = clamp(P_MA/(2B), 1, 3)

moving average   twap_epoch = Σ(tick · seconds) / epoch length
                 maTick     = mean of the last 21 twap_epoch

loan             debt   = collateral · B · 0.95
                 charge = debt · 1% · term / 365 days       (rounded up)
                 paid   = debt − charge
cap              lent + debt ≤ 50% · (reserve + lent)

FAQ

Is there a tax in the token?

No. The token is a plain ERC-20. The 1% fee is taken by the hook, in ETH, only on swaps in the OHMIC pool. Transfers between wallets are free.

Can anyone mint more OHMIC?

Only the hook, and only by selling into a buy at twice backing or more, within the allowance. The launcher has no mint.

Can anyone change the rules?

No. There is no owner, admin, setter, pause or upgrade. Every number is a constant in the bytecode.

Why did my sell not move the price?

The price was at or below backing, so the floor bought your OHMIC directly at backing less 1%.

Why did my buy get a better price than I expected?

Emissions were open. The hook filled part of your buy at the pool's price with no slippage.

What if nobody trades for days?

Nothing breaks. The next swap closes one long epoch that counts all the idle time.

Can the liquidity be pulled?

The launch position's NFT is sent to 0x…dEaD, after which nobody can remove it. You can check its owner on Etherscan with the PositionManager's ownerOf(id).

Is this Olympus?

No. OHMIC is independent and follows Olympus's published design. It is not affiliated with or endorsed by Olympus DAO.

Risks

Read this before you buy, borrow or rely on the floor.

  • Smart contract risk. The contracts are tested on a mainnet fork and under randomised fuzzing, but they have not been audited by a third party. Bugs are possible, and nothing can be patched.
  • The floor starts at zero. The treasury is empty at launch and grows from fees. Early on, backing is far below the price, and the floor protects little.
  • The floor is as deep as the treasury's ETH. It pays from ETH the treasury holds, not from ETH out on loans. Up to half the treasury may be lent.
  • The price can stay far above backing and fall a long way before the floor acts.
  • Emissions dilute. When they run, supply grows by up to 0.06% a day. Each sale raises backing, but your share of the supply shrinks.
  • Loan due dates are final. Miss one and your collateral is burned.
  • No yield on the treasury. Backing grows only from trading.
  • Immutable. If a parameter turns out to be wrong, it stays wrong.

Security

Tested against the real thing

Every test runs on a local copy of Ethereum mainnet, against Uniswap's live PoolManager, PositionManager and Universal Router. No mocks.

27

Fork tests. Every swap shape pays exactly 1% of its ETH side. The floor pays backing less 1%, to the wei, without moving the pool. Emissions stop at the allowance, to the token. Loans repay, default, burn and respect the cap.

0 wei

How far backing fell across randomised fuzzing: about 128,000 random buys, sells, loans, repayments, defaults, donations and burns per run. After every one, the hook's books matched what it holds in the PoolManager, to the wei.

Trust model

  • No owner. No admin, no pause, no upgrade, no setter. The hook has no function that changes a rule.
  • One minter. After the launch supply, only the hook can mint OHMIC, and only by selling at 2× backing or more.
  • One pool. The hook accepts exactly one pool, ETH/OHMIC, opened from the launcher's own wallet. Nobody can attach another.
  • No oracle. Backing is the hook's own two numbers. The moving average comes from the pool's own time-weighted price.
  • No keeper. Nothing has to be called for the bank to work. Trades run it.

Not audited by a third party. See Risks.

Contracts

Where it lives

The addresses appear here once OHMIC is live on Ethereum mainnet.

ContractAddress
OHMIC tokenAt launch
OHMIC hook, the bankAt launch
PoolETH / OHMIC on Uniswap v4: one pool, for ever
Websiteohmicv4.xyz
X@ohmicv4

Trade

OHMIC trades in the Uniswap app like any token. The bank runs inside every swap, so there is nothing extra to do.

Trade on Uniswap →

The bank

Watch the price against backing, borrow against your OHMIC with Cooler, and close overdue loans.

Open the bank →