v1.pool
Open App

How it works

v1.pool in plain words and a few drawings. Ten short parts, each one with a single idea. Read it top to bottom, or jump to what you need.

01

The idea

Every swap pays its base fee twice. Ethereum burns the first. The second is paid out in ETH to shares, divided by their number.

A swap on Ethereum already pays the block's base fee to the network. This pool charges it a second time, in ETH, and hands that second one to the shares. That is the whole protocol. Everything else on this page explains the pieces of that sentence.

A swap in the ETH / $v1 pool First base fee set by Ethereum, paid by you Second base fee the same kind of amount, in ETH Burned nobody receives it Shares split equally
One swap, two base fees. The first one is not ours: Ethereum sets it and burns it whether this pool exists or not. The second one is what the hook adds, and it has exactly one destination.
01
The first base fee

Ethereum sets a base fee for the block. Your transaction pays it and the network burns it. Nobody receives it.

02
The second base fee

The hook reads the block's base fee and charges the same kind of amount again, in ETH: a fixed gas envelope multiplied by the base fee.

03
The split

That second amount goes to a shared index. Every share holds an equal claim on it. No staking, no window, no snapshot.

02

What a swap pays

A gas envelope multiplied by the block's base fee. The envelope depends only on the size of the swap, and it comes from a five-step table that nobody can change.

Gas envelope, by the size of the ETH side of the swap 20 000 under 0.05 ETH 50 000 0.05 to 0.5 ETH 90 000 0.5 to 2 ETH 130 000 2 to 10 ETH 150 000 10 ETH and above gas envelope × the block's base fee = what the swap pays, in ETH
The bigger the swap, the bigger the envelope, up to 150 000 gas. A buy and a sell of the same size pay exactly the same amount.

An example

Base fee at 42 gwei. A 4 ETH swap is on the fourth step, so its envelope is 130 000 gas. 130 000 × 42 gwei = 0.00546 ETH. That is what it pays, about 0.14% of the swap.

Two ceilings

Two limits keep this from ever being absurd. Whichever is smaller, the envelope or the ceiling, is what the swap pays.

Ceiling one
0.25%

of the ETH side of the swap. This protects small swaps: a 0.1 ETH swap never pays more than 0.00025 ETH.

Ceiling two
200 gwei

Above this base fee, the amount stops growing. The most one swap can ever pay is 150 000 × 200 gwei = 0.03 ETH.

03

Where the ETH goes

To the shares, all of it. There is no treasury address in the contract, no fee switch, and no owner who could add one.

The swap pays in ETH The hook takes the amount The index adds it, per share You claim any time all in the same transaction as the swap, nothing to call, nothing to miss
The amount moves in the same transaction as the swap. It sits in the index until you claim it. Claiming sends ETH to your address and changes nothing else.
Shares, pro rata
100%
Team
0%
Treasury, multisig, anything else
0%

The contract has no owner. There is no admin role, no upgrade path, no pause button, and no address that can be set later. When the division leaves a remainder, it is at most one wei, and it is carried into the next block instead of being kept.

04

Shares

A share is 1 000 $v1 held outside the pool. Nothing to stake, nothing to lock: your balance is your share count.

Buying takes tokens out of the pool, so it creates shares. Selling puts them back, so it destroys shares. The flow that lands in a block does not care how many shares exist: it is simply divided by their number.

The same flow, before and after one buy 4 shares 5 shares new Every slice got smaller, including the one bought a second earlier. Selling runs the same picture backwards: fewer shares, bigger slices for the ones that stay.
Buy
You join the split

Your share is real from the next wei that lands. Everyone else's just got a little smaller.

Sell
You leave it

Whatever lands next is divided among fewer holders. You are not one of them anymore.

This is not a side effect to be fixed. It is the shape of the thing: a flow divided by a number that anyone can increase by buying. The site shows that number at all times, so nobody has to guess.

05

The counter

Two numbers, read straight from the contract. How much landed on one share in the last block, and how many shares are splitting it.

One block, base fee 42 gwei, three swaps Swap 1, buy 6 ETH0.00546 ETH envelope × base fee Swap 2, sell 0.85 ETH0.002125 ETH hit the 0.25% ceiling Swap 3, buy 0.12 ETH0.0003 ETH hit the 0.25% ceiling Block total 0.007885 ETH divided by 18 240 shares 432 gwei per share Two of the three swaps paid the ceiling, not the envelope. That is what keeps a flat gas charge from crushing small orders. The remainder of the division, 1 wei here, is carried into the next block.
The reference block used everywhere on this site. Both numbers come from contract state. Nothing here is scheduled.
Gwei per share
432

What one share received in the last block that had a swap. It goes up with gas and volume, down when shares are created.

Shares splitting it
18 240

How many shares exist right now. When this goes up, the first number goes down, all else equal.

There is deliberately no third number. A running total since the beginning only ever goes up, and it would hide the one thing the counter must show: that your slice shrinks when others come in.

06

Why the base fee

Because it is a number that Ethereum sets, that nobody here can influence, and that cannot jump in one block.

The base fee of a block is not an auction. It is computed from the previous block: up 12.5% if that block was full, down 12.5% if it was empty, never more. It takes at least 6 blocks, 72 seconds, to double, and at least 6 blocks to halve. The hook reads it straight from the block. It is not reported by an oracle and it cannot be forged by whoever sends the swap.

Base fee, block after block, rising as fast as it possibly can block n +1 +2 +3 +4 +5 +6 20 gwei 40.5 gwei +12.5% at most, each block so doubling takes at least six blocks, 72 seconds
Max move per block
±12.5%
Minimum to double
6 blocks
The same, in time
72 seconds

That is the whole engine. The flow to shares follows the temperature of the network: small when gas is cheap, larger when the network is busy, and never a surprise from one block to the next.

07

Who gets paid

Holders, and only holders. The hook never asks who is swapping.

In Uniswap v4, the address a hook sees is the router, not the trader. Most designs that try to pay swappers break on that fact. This one does not pay swappers at all. The amount is taken from the swap, and paid to whoever holds $v1 outside the pool, read from balances in the same transaction. A router cannot claim it, cannot redirect it, and cannot be paid for passing through.

  • The hook reads
  • The block's base fee
  • The size of the ETH side of the swap
  • Token balances, when they change
  • The hook ignores
  • The sender address it is given
  • The original sender of the transaction
  • Any data a router could attach

Three addresses never count as holders: the pool itself, the hook itself, and the zero address. They are fixed when the contract is created and nobody can change that list.

08

What it cannot do

Six things, on purpose. Each one would have been a trapdoor.

  • 1
    It cannot cancel a swap.There is no path where the hook refuses or reverts a trade. If something were ever wrong, the amount would be zero and the swap would still go through.
  • 2
    It cannot change the table.The five envelopes, the two ceilings and the share size are constants in the code. There is no setting, because there is no owner.
  • 3
    It cannot mint.The supply is fixed at 1 000 000 000 $v1. There is no way to create more.
  • 4
    It cannot take anything other than ETH.The amount always comes from the ETH side of the swap. The hook never touches $v1 balances.
  • 5
    It cannot force a claim.Claiming is a pull. What you have not claimed stays credited to you until you ask for it.
  • 6
    It cannot stop a second pool.Anyone can open an ETH / $v1 pool without this hook. Nothing in the token blocks it. That is the flaw, just below.
09

The flaw

Every design has one door it does not close. Here is ours, with its two numbers.

At 100 gwei, a large swap pays about 0.0148 ETH of gas for itself and 0.0150 ETH of surcharge on top. That is 101%: the swap really does pay its base fee twice. And the surcharge is worth the most exactly when traders least want to pay it, when gas is high.

Nothing stops anyone from opening a second ETH / $v1 pool with no hook. Once that pool is deep enough, routers will prefer it, because paying a little more price impact beats paying the surcharge. For a 4 ETH swap at the ceiling, that happens at about 1 600 ETH of depth.

Pool with the hook pays the surcharge to the shares this is where the flow comes from A pool without it anyone can open one pays nothing to the shares volume It wins the swaps once it holds roughly n² / s of liquidity: swap size squared, over the surcharge.
Small swaps leak first, because the surcharge is a larger share of a small swap. And the leak is widest when gas is high, which is also when the flow is richest.
Surcharge vs the swap's own gas, at 100 gwei
101%
Depth a hookless pool needs to win a 4 ETH swap
1 600 ETH

What we did not do about it

We did not add a transfer tax. We did not whitelist the pool. We did not make the token pausable. Each of those would have closed the leak and opened something worse: a contract that can stop you from selling. So the leak stays open, it is written on the front page, and it is written here.

10

A few words

Base feeThe minimum gas price of a block. Ethereum sets it and burns it.
Share1 000 $v1 held outside the pool. The unit the flow is split in.
EnvelopeA fixed amount of gas from the five-step table, multiplied by the base fee.
SurchargeThe ETH taken from a swap and paid to the shares. The second base fee.
CeilingTwo of them: 0.25% of the ETH side of the swap, and 200 gwei of base fee.
IndexThe running total of what one share has been paid. Your claim is read from it.
CarryThe remainder of a division, kept for the next block. At most one wei.
DilutionYour slice getting smaller when new shares are created. Shown live by the counter.
Still open, said plainly: whether a floor on the base fee would help in very calm periods, whether 1 000 $v1 is the right share size, and whether liquidity providers should get a part of the flow. None of these is decided, and the site will say so until one is.