NAV X Open the vault
A Uniswap v4 hook · Ethereum

The pool that buys the world.

Every trade of NAV pays a fee in ether. The fee buys gold, bitcoin and staked ether on chain, a slice at a time, in public. Any holder can burn NAV and take their exact share of all of it, whenever they want.

wstETH WBTC XAUt
Treasury— ETH
Backing per 1M NAV— ETH
Price per 1M NAV— ETH
Allocations—
Redemptions—

Live from the chain once NAV is launched.

I · TRADE

Every trade feeds it

2% of the ether side of every swap: 1.5% to the treasury, 0.5% to the owner. Trade anywhere NAV routes.

II · BUY

The treasury buys the world

Anyone can move it forward and is paid for it. Each slice buys whichever of gold, bitcoin or staked ether is furthest below its target.

III · REDEEM

Your slice, any time

Burn NAV and receive your tokens over all the tokens there are, of every asset, in kind. 1% stays for those who remain.

A coin with something behind it, and the right to walk away with your share of it.

The best hook coins of 2025 and 2026 had one thing in common: their fee bought something you could see. Punks, gold, an NFT gacha. Most also kept a key, a pause or an upgrade, and the loops depended on someone.

NAV keeps the loop and drops the key. The treasury is what the hook holds and nothing else. Nobody can move it but a redeeming holder, and nobody can stop a redemption. There is no owner of the token, no mint, no pause, no upgrade.

The floor only rises. Trading adds to the treasury. A redemption takes exactly a share and burns the tokens that held it, so what every remaining token owns never falls.

Treasury

Everything behind NAV, read from the chain.

Valued at Lido's own rate and at the route pools' 15-minute averages. The bar is the mix; the targets come from the helm.

staked etherbitcoingoldether waiting
wstETH · staked ether—

Minted from ether by Lido at its own rate. No market, no slippage. Earns the staking yield while it sits.

—
WBTC · bitcoin—

Bought in Uniswap v4's ETH/WBTC 0.05% pool, never more than 0.6% from where that market has been.

—
XAUt · gold, troy ounces—

Bought through ETH/USDT then XAUt/USDT, both Uniswap v4, both guarded the same way.

—
ETH · waiting—

Fees not yet allocated. Still the treasury's, still redeemable, still counted.

—
Next slice—
Helm targets—
Swap fee now—
Volume— ETH
Mechanism

Four moves, and nothing else.

One pool, one hook, one token. Every rule is a constant in verified source.

ETH / NAV pool every swap 1.5% in ETH the treasury (what the hook holds) ETH allocate wstETH WBTC XAUt the helm: thirds, tilted by trend, never past 3/5 the guard: no buy more than 0.6% from the average anyone may allocate · paid 0.2% of the slice amount / supply a holder redeems burns NAV, 1% stays
Ether comes in with every trade, becomes assets when anyone allocates, and goes out only to holders who burn NAV for it.

The fee

Every swap pays 2% of its ether side, in all four shapes (buy or sell, exact in or out), taken by the hook as a swap delta. 0.5% is owed to the owner; the rest belongs to the treasury simply by not being the owner's. For the first five minutes after launch the fee falls from 25% to 2%, and everything above 2% goes to the treasury.

The allocation

allocate() is open to anyone, once a block. It takes up to 1 ETH of treasury ether and buys the asset furthest below its target: wstETH straight from Lido, WBTC in the ETH/WBTC pool, XAUt through ETH/USDT then XAUt/USDT. The caller is paid 0.2% of the slice, at most 0.004 ETH. Nobody needs to call it for trading to work, and unallocated ether is still redeemable.

The guard and the helm

Each route pool's price is averaged (15 minutes) once a block. A buy is refused when the pool sits more than 0.6% from its average and stops if it gets there, so moving a market for the occasion only gets that asset skipped. Targets start at a third each and tilt with each asset's 15-minute average against its 3-day average: a 10% rise lifts its weight by half, a 10% fall cuts it by half, and that is as far as it goes.

The redemption

NAV.redeem(amount, to, skip, message) burns your tokens and the hook pays you amount / totalSupply of every asset and of the treasury ether, less 1% that stays. In kind: nothing is priced, so nothing can be manipulated. Any asset you can't receive can be left behind. A message rides along, on chain.

Specs

Every number, fixed in the contracts.

Nothing below can be changed by anyone, ever.

ParameterValueMeaning
Supply1,000,000,000 NAVMinted once, all of it into the pool at launch through the Uniswap app.
PoolETH / NAVOne pool. ETH is currency0, so a higher tick is a cheaper NAV.
Hook flags0x10CCafterInitialize (binds the one pool), beforeSwap, afterSwap and both swap return deltas. Liquidity is ordinary Uniswap liquidity.
LP positionNFT at 0x…dEaDThe launch position, the whole supply, sent to the dead address.
Swap fee2.00%Of the ETH side: 1.5% treasury, 0.5% owner.
Opening fee25% → 2% over 5 minFalls linearly; the surplus goes to the treasury.
Slice0.1 – 1 ETHOne allocation, at most once a block.
Allocation tip0.2%, ≤ 0.004 ETHTo whoever calls allocate.
Guard± 0.6%60 ticks from the route pool's 15-minute average.
Averages15 min · 3 daysTime-weighted, sampled once a block; one sample never weighs more than 15 minutes.
Helm⅓ each, ×0.5 – ×1.5A 10% trend moves a weight by half; no target above 60%.
Redemptionamount / supply − 1%Of every asset, in kind. The 1% stays in the treasury.
Message≤ 280 bytesOn every redeem or burn, in the event log.
RoutePoolHow it buys
wstETHLidoSends ether to the wstETH contract, which stakes and wraps it at Lido's rate.
WBTCETH / WBTC · 0.05% · v4Exact-in swap, price limit at the guard.
XAUtETH / USDT · 0.30% → XAUt / USDT · 0.05%Two exact-in swaps in one unlock; every dollar must become gold or the slice reverts.
Docs

How NAV works, page by page.

Getting started

What is NAV

NAV is a token with one Uniswap v4 pool, ETH/NAV, and a hook on that pool. The hook takes a fee in ether from every trade and keeps it in a treasury. The treasury is turned, a slice at a time, into three assets: staked ether (wstETH), bitcoin (WBTC) and gold (XAUt).

Anyone holding NAV can burn it and receive their share of the treasury: their tokens over all the tokens there are, of every asset, in kind. That share is the token's backing, and it only grows: trades add to the treasury, and a redemption takes exactly a share and destroys the tokens that held it.

NAV is its own measure: net asset value, what is behind each token. The Treasury tab shows it live.
Getting started

Buy and sell

NAV trades in its one Uniswap v4 pool, from the Uniswap app, any aggregator or any router. Nothing special is needed: no hook data, no allow-list. Every swap pays 2% of its ether side to the hook (1.5% treasury, 0.5% owner), in all four shapes: buying or selling, with the amount in or the amount out fixed.

For the first five minutes after the pool opened the fee started at 25% and fell to 2%. Everything above 2% went to the treasury.

Getting started

Redeem your share

Open the vault, choose how much of your NAV to redeem, and confirm. Or call the token directly:

NAV.redeem(amount, to, skip, message)
  • Your amount is burned first. Then the hook sends to exactly holding × amount / supplyBefore × 99% of wstETH, WBTC, XAUt and treasury ether.
  • skip leaves assets behind: bit 1 wstETH, 2 WBTC, 4 XAUt, 8 ether. Use it if one of them can't reach you; your share of it stays in the treasury for everyone else.
  • message is up to 280 bytes, written to the chain with the burn.

Nothing is priced in a redemption, so no oracle or market move can change what you get. Nobody can block it.

Getting started

Burn as a gift

NAV.burn(amount, message) destroys tokens and takes nothing. The treasury stays the same and there are fewer tokens, so every other token's backing rises. It is the purest way to say something on chain: a message that cost you exactly what it says it did.

Getting started

Move the treasury

allocate() turns up to 1 ETH of treasury ether into the asset furthest below its target. Anyone may call it, once a block, when at least 0.1 ETH is waiting. The caller is paid 0.2% of the slice, at most 0.004 ETH, enough to cover the gas at ordinary prices.

next() shows what it would do right now: the asset, the ether and the tip. The vault has a button for it.

Trading never waits on it. If nobody allocates, the ether simply waits in the treasury, where it is still counted and still redeemable.

Concepts

The treasury

The treasury is exactly what the hook holds: its wstETH, WBTC and XAUt balances, and its ether claims on the Uniswap PoolManager less what the owner is owed. There is no separate ledger that could disagree with the balances. The only number the hook keeps about money is ownerOwed.

That design choice is deliberate. Hook coins have died of two numbers drifting apart by rounding until a reserve could no longer pay what it promised. NAV has nothing to drift.

Concepts

The fee

The hook charges 2% of the ether side of every swap. When the ether amount is the one named in the swap (an exact-in buy or an exact-out sell) it is charged before the swap; otherwise after, on the ether that actually moved. Either way the swapper pays exactly 2% of the ether leg.

  • 0.5% is owed to the owner, paid by collect(), which anyone may call.
  • 1.5% is the treasury's.
  • During the five-minute opening, the fee above 2% is the treasury's too. The owner never earns more than 0.5%.
Concepts

The guard

A treasury that buys in public markets is a target: push the price up, let it buy, sell back. NAV only buys near where a market has been.

  • Each route pool's tick is folded into a 15-minute time-weighted average, at most once a block. One sample never counts for more than 15 minutes of time.
  • A buy is refused when the pool sits more than 60 ticks (0.6%) from its average, and its price limit stops it at 0.6% if it gets there.
  • The check uses the average as it stood before this block's price entered it.

Moving a market for the occasion only gets that asset skipped. The slice goes to another asset, or waits.

Concepts

The helm

The helm decides what the next slice buys. It is a rule, not a mind:

  1. Each asset starts with a weight of 1. wstETH is ether, so it has no trend against ether and stays at 1.
  2. WBTC's and XAUt's weights move with their trend in ether: the 15-minute average against the 3-day average. A 10% rise lifts the weight to 1.5; a 10% fall cuts it to 0.5; never further.
  3. Targets are the weights over their sum, so no asset is ever targeted above 60%.
  4. The slice buys the open asset furthest below its target, counting the slice itself in the total.
Concepts

The floor

Because any holder can redeem, NAV's price has a floor near its backing. If the pool's price falls below what a token can redeem for, buying NAV and redeeming it is profitable, and that buying pushes the price back up. The 2% swap fee and the 1% redemption fee are the width of that band.

The floor rises with every trade. It does not fall when others leave: a redemption takes exactly its share and destroys the tokens that held it, and the 1% left behind raises everyone else's backing a little.

The floor is a floor in assets, not in dollars. If gold, bitcoin and ether fall, so does what NAV is backed by.
Concepts

The LP

NAV launched the standard way. The whole supply was minted to the deployer, who created ETH/NAV in the Uniswap app and put all of it in, one-sided, below the opening price, so no ether went in. The LP position NFT was then sent to 0x000000000000000000000000000000000000dEaD.

  • Only the holder of a position's NFT can remove it. Nobody holds the dead address's key.
  • Check it yourself: ownerOf(id) on Uniswap's PositionManager. The Contracts tab reads it live.
  • The hook binds exactly one pool: ETH/NAV at the launch fee tier, created by the owner's wallet. Every other pool that names it is refused.
Reference

Formulas

fee        2% of the ETH leg  (25% → 2% linearly over the first 5 minutes)
owner      0.5% of the ETH leg, capped at the fee
treasury   claims(ETH) − ownerOwed   +   wstETH, WBTC, XAUt balances

slice      min(treasury ETH, 1 ETH) − tip        when treasury ETH ≥ 0.1 ETH
tip        min(slice × 0.2%, 0.004 ETH)

average    a ← a + (tick − a)(1 − e^(−min(dt, 900)/τ))     τ = 900 s, 259 200 s
guard      |spot − average₁₅ₘ| < 60 ticks;  price limit = average ∓ 60
trend      WBTC: −(avg₁₅ₘ − avg₃d)   XAUt: (XAUt/USDT − ETH/USDT)(avg₁₅ₘ − avg₃d)
weight     clamp(1 + trend / 1000 ticks, 0.5, 1.5);  wstETH = 1
target     weightᵢ / Σ weight
choose     open asset with the largest  target × (holdings + slice) − holding

redeem     out = holding × amount / supplyBefore × 0.99      for each asset and ETH
Reference

Hook ABI

allocate() returns (uint8 asset, uint256 eth, uint256 got)
donate() payable
collect()

next() view returns (uint8 asset, uint256 slice, uint256 tip)   // 255: nothing to buy now
holdings() view returns (uint256[4])     // wstETH, WBTC, XAUt, ETH
values() view returns (uint256[4])       // the same, in wei of ether
nav() view returns (uint256 total, uint256 perToken)
targets() view returns (uint256[3])      // millionths
references() view returns (int24[3] spot, int24[3] fast, int24[3] slow)
price() view returns (uint256)           // ETH per whole NAV, in wei
feePips() view returns (uint256)
treasuryEth() view returns (uint256)
ownerOwed() view returns (uint256)
Reference

Token ABI

redeem(uint256 amount, address to, uint8 skip, string message)
burn(uint256 amount, string message)
transfer, transferFrom, approve, balanceOf, totalSupply, allowance   // plain ERC-20
HOOK() view returns (address)

No owner, no mint, no pause, no tax inside the token. The fee lives in the pool's hook.

Reference

Events and errors

Redeemed(holder, to, amount, supplyBefore, skip, message)   // token
Burned(holder, amount, message)                             // token
Allocated(asset, eth, got, tip, by)                         // hook
Paid(to, amount, supplyBefore, out[4])                      // hook
Donated(from, eth)   Collected(eth)   Launched(poolId, openTick)

NothingToDo(pending)   less than 0.1 ETH waiting
OncePerBlock           an allocation already ran this block
NoRoute                every market is outside its guard right now
Thin                   the gold leg could not take every dollar
TooLong                a message over 280 bytes
WrongPool · NotOwner   a pool the hook refuses to bind
Help

FAQ

Can the owner take the treasury?

No. The owner is paid 0.5% of volume through collect and has no other power. The only way anything leaves the treasury is a holder redeeming, or an allocation turning its ether into an asset it then holds.

Why is the price above the backing?

The backing is a floor, not a price. People can pay more for what they expect the treasury to become.

What if nobody calls allocate?

The ether waits in the treasury, counted and redeemable. The tip exists so that someone always will.

Can I redeem part of my NAV?

Yes, any amount.

Help

Risks

  • Not audited. The contracts are tested on a fork of Ethereum mainnet against the live Uniswap, Lido, WBTC and XAUt contracts, including a fuzz of every action in random order and over ten thousand ether of churn. That is not an audit.
  • The assets carry their issuers' risks. Lido can pause staking. WBTC's custodian can pause it. XAUt is an upgradeable Tether contract that can freeze addresses. A redemption can leave any of them behind.
  • The backing moves with the assets. It is measured in gold, bitcoin and ether, not in dollars.
  • Buying moves markets. Every allocation pays the route pools' fees and some price impact, bounded by the guard.
  • The price can sit far above the backing. The floor protects against the price falling below what the treasury holds per token, not against paying more than that.
Help

Glossary

backing
The treasury divided by the supply: what one NAV can redeem for, before the 1%.
slice
One allocation, up to 1 ETH.
helm
The rule that sets each asset's target.
guard
The 0.6% band around a market's 15-minute average.
route pool
A Uniswap v4 pool the treasury buys in.
tick
Uniswap's price unit: one tick is 0.01%.
skip
The bits that leave an asset behind in a redemption.
Security

What we tried to break.

Every test runs on a fork of Ethereum mainnet, against the live Uniswap PoolManager, Universal Router and PositionManager, Lido, WBTC and XAUt.

Attacks with tests

Drift. Over ten thousand ether pushed through the pool, allocating as it went, then every holder outside the pool redeemed: the books matched to the wei.

Overpaying. A fuzz of random buys, sells, donations, allocations, redemptions and burns, 128,000 calls a run: no redemption ever paid more than its exact share, and nobody else's redemption or burn ever lowered what a remaining token owns.

Front-running the treasury. A market shoved by 5.5% in the same block was skipped and the slice went elsewhere. Every allocation bought at least 97% of its ether's worth.

Opening the pool first. Only the owner's wallet can create the one pool the hook binds; any other pool naming the hook is refused.

Trust

No owner powers. The owner chose the opening price once and receives 0.5% of volume. collect pays it; anyone may call it.

No setter, pause, upgrade or withdraw in either contract.

The liquidity is unpullable. The launch LP NFT is at 0x…dEaD.

Not audited. Read the source. Every rule is in the hook's header comment.

Contracts

On Ethereum mainnet.

Addresses appear here at launch.

ContractAddressRole
NAV token—ERC-20 with redeem and burn, both carrying a message.
NavHook—The fee, the treasury, the guard and the helm. Flags 0x10CC.
LP position NFT—The launch liquidity, the whole supply. Its owner is read live.
PoolManager0x000000000004444c5dc75cB358380D2e3dE08A90Uniswap v4.
PositionManager0xbD216513d74C8cf14cf4747E6AaA6420FF64ee9eUniswap v4: holds the LP NFTs.
wstETH0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0Lido wrapped staked ether.
WBTC0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599Wrapped bitcoin.
XAUt0x68749665FF8D2d112Fa859AA293F07A622782F38Tether Gold, one troy ounce per token.