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 part | Of the trade | Goes to |
| Treasury | 0.8% | Backing, for every holder |
| Launcher | 0.2% | The wallet that launched OHMIC |
| Pool fee | 0.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:
| Event | T | L | S | Backing |
| Swap fee | +0.8% | | | rises |
| Floor buys x at B | −0.99·B·x | | −x | rises (by the fee) |
| Emission sells x at P ≥ 2B | +P·x | | +x | rises |
| Loan of D, charge c | −(D−c) | +D | | rises (by c) |
| Repayment of D | +D | −D | | unchanged |
| Default: D written off, C burned | | −D | −C | rises (D ≤ 0.95·B·C) |
| Anyone burns OHMIC | | | −x | rises |
| Donation | +x | | | rises |
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
- At the start of your swap, the hook compares the pool's price with backing.
- If the price is above backing, the pool fills your sell as usual.
- 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.
- 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.
| Term | Value |
| You borrow | 95% of your collateral's backing, in ETH |
| Charge | 1% a year of the loan, pro rata, taken up front |
| Length | 7 to 365 days, chosen when you borrow |
| To close it | repay the full loan amount, in ETH, by the due date |
| If you don't | after the due date anyone can close it: your OHMIC is burned, and you keep the ETH you borrowed |
| Liquidation | none: the market price never matters |
| Capacity | at 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:
- closes the epoch's time-weighted average price;
- adds it to a ring of the last 21 epochs, which is the 7-day moving average;
- sets the new epoch's emission allowance from the moving average against backing;
- 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
- Open the bank and press Connect.
- Under Cooler, enter how much OHMIC to lock and for how many days (7–365).
- Read the quote: the ETH you receive now, the amount to repay, and the charge.
- Press Borrow. The first time, your wallet asks you to approve OHMIC for the bank; then it asks you to confirm the loan.
- 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
- Open the bank with the wallet that borrowed, and press Connect.
- Your open loans are listed under Cooler. Press Repay on the loan.
- 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.
- Open the bank. Overdue loans are listed under Treasury.
- 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 see | Call | Units |
| Backing | backing() | wei per 1e18 OHMIC |
| Pool price | price() | wei per 1e18 OHMIC |
| Treasury, loans | reserve(), lent() | wei |
| Is the floor buying? | floorOpen() | bool |
| Are emissions selling? | emissionsOpen(), emitLeft() | bool, OHMIC wei |
| Moving average | movingAverage() | wei per 1e18 OHMIC |
| A loan | loans(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
| Function | Who | What it does |
borrow(uint256 collateral, uint256 term) | anyone | Locks 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) payable | borrower | Send exactly the loan's debt; the collateral is returned. |
seize(uint256 id) | anyone | After the due date: burns the collateral and writes the loan off. |
donate() payable | anyone | Adds ETH to the treasury. |
collect() | anyone | Pays the launcher's accumulated 0.2% to the launcher. |
incinerate() | anyone | Burns the OHMIC the floor holds. |
Views
| Function | Returns |
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.
| Function | Notes |
transfer, transferFrom, approve | Standard. 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
| Event | When |
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
| Error | Meaning |
BadTerm | Loan term outside 7–365 days |
TooMuchLent | This loan would put more than half the treasury on loan |
NothingToBorrow | The collateral is worth nothing at current backing |
NotYours | Only the borrower can repay |
WrongAmount | Repay with exactly the loan's debt |
NotDue | The loan cannot be closed before its due date |
Closed | The loan is already repaid or closed |
NotLive | The 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.