Markout / Sepolia
24 s memory
Uniswap Hookathon · UHI10

Liquidity with a short memory.

Two lanes share one 24-second view of price. Spot fills now and insures its own impact. Batch lets opposing orders meet at the same TWAP. When a move holds, the premium goes to in-range LPs.

The thesis

A volatile pool should not make every trader pay for the few who move first.

3 bps
instant spot fee
5–60
live premium, bps
24 s
immutable memory
≥ 50%
reversion refunds
Live pool instrumentNo wallet needed · streaming canonical Sepolia slot0
Live memory / MDA · MDB
REC · Sepolia
warming up — reading slot0 from Sepolia…
price MDA/MDBtick LP dividend…

live at markout-nine.vercel.app · Chrome + MetaMask on Sepolia

How it works

One clock. Two ways through.

Spot users get immediate execution with reversion insurance. Batch users opt into an epoch where opposing flow can meet before any residual reaches the curve.

The swap

Premium posted

Spot swaps fill instantly at 3 bps. The hook charges a live-quoted reversion-insurance premium — priced from this pool's own settle history (starts at 20 bps, clamps 5–60) — onto the swap caller's own PoolManager delta. Any router that can settle a normal v4 swap pays it.

Any router · canonical PM
afterSwap · hook delta
premium = amountIn × live bps
→ charged to the swap caller
→ escrowed by the hook
The window

24-second memory

A hook-local previous-tick accumulator records the pool's memory over an immutable [bond, settleAfter] window. Settling late interpolates the same endpoint — verdicts never change with timing, and nothing can freeze escrow.

Append-only history
fixed window · ticks
bondnowsettleAfter
avg tick immutable · T = 24 s
The verdict

Refund or Donate

Revert past half your own impact and the premium is refunded in the settlement transaction. Sustain, and in-range LPs are credited in that same settle tx (deferred only if L = 0). One claim path exists, only for failed delivery.

Refund paid at settle
settle · permissionless
reverted ≥ 50%  REFUND
sustained        DONATE → LPs
The batch

Net at the TWAP

Opt-in 24 s epochs on the same clock. Opposing orders net without touching the AMM. Unmatched size is one bonded residual — a spot swap with an unbounded price limit, named on the honest-limits row.

Two-sided nets skip the curve
clearBatch · uniform TWAP
two-sided  net, no AMM
lone / leftover  bonded residual
The trade-off

Tight quotes without pretending toxic flow is free.

A volatile pool either charges everyone enough to cover informed flow, or it bleeds. Markout asks the move that stays to fund the difference.

Vanilla AMM LP
Advertised feehigh, to cover toxicity
Single-shot arbextracted, free
Organic flowpays the high fee too
LP dividendnone — losses only
Nettight quotes impossible
Markout LP
Advertised fee3 bps
Single-shot arbpremium → LPs
Organic flowpremium refunded at settle
LP dividendforfeited premium, credited at settle
Nettight quotes, toxic flow pays

3 bps fill and the 24 s clock are constants. The premium is live-quoted (default 20, clamp 5–60).

The differentiator

The move that stays pays the liquidity it used.

Directional fees in beforeSwap are common. Markout taxes the informed move itself: it forfeits its premium into the pool it tried to exploit, on the same shared infrastructure every v4 pool uses.

01
Canonical, not private

Deployed against the shared canonical Sepolia PoolManager — a standard v4 hook, not a vanity deployment.

02
Any router, no allowlist

The premium rides the swap caller's own delta. Universal Router, your contract, v4's own test routers — all pay it unchanged.

03
Toxic flow pays into the pool

Sustained one-shot moves forfeit their premium to in-range liquidity on-chain — credited at settle when L > 0. No off-chain component, no private orderflow, no keepers required for correctness.

04
No partner integrations

The oracle is entirely hook-local: pool ticks plus the hook's own accumulator. No Chainlink, no Pyth, nothing external.

Honest limits

Named boundaries, not hidden caveats.

Markout is a precise mechanism with precise edges. These are part of the product, not fine print.

01
Atomic same-block sandwiches pass

The front leg and the victim refund — the backrun leg, unreversed, is what donates. A same-block rule cannot tell an atomic front from a 1:1 next-block organic reversion, so this limit ships named, not hidden.

02
The premium is a tax, not an LVR hedge

The measured edge over a vanilla 3 bps pool after identical toxic flow is exactly the forfeited premium — no more. Slow trend that never reverts in-window keeps the LP's inventory risk. Dust donates can walk the quote toward 60 bps; refunds walk it back 1 bp at a time.

03
LPs are credited at settle, not “later”

While the pool has liquidity, a donate verdict pays in-range LPs inside the settlement transaction itself. Only at zero liquidity does value wait for a permissionless flush — and settle is a call someone must send, never automatic.

04
A lone batch order is a TWAP, not CoW

Two-sided epochs net at the TWAP and never touch the curve. An empty epoch with one order is honestly a one-epoch TWAP fill — no auction, no solver, no partner.

05
Batch leftover is still a spot swap

Unmatched size clears as one bonded residual with an unbounded price limit. Cancelled orders cannot move the TWAP; a live residual can be sandwiched like any spot trade. Use two-sided netting when you care.

Make a move. Let the next 24 seconds answer.

Mint capped demo tokens, trade the live Sepolia pool, and settle the verdict yourself. Best in Chrome with MetaMask or another injected wallet.