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.
Ethereum sets a base fee for the block. Your transaction pays it and the network burns it. Nobody receives it.
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.
That second amount goes to a shared index. Every share holds an equal claim on it. No staking, no window, no snapshot.
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.
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.
of the ETH side of the swap. This protects small swaps: a 0.1 ETH swap never pays more than 0.00025 ETH.
Above this base fee, the amount stops growing. The most one swap can ever pay is 150 000 × 200 gwei = 0.03 ETH.
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 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.
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.
What one share received in the last block that had a swap. It goes up with gas and volume, down when shares are created.
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.
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.
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.
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.
What it cannot do
Six things, on purpose. Each one would have been a trapdoor.
- 1It 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.
- 2It 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.
- 3It cannot mint.The supply is fixed at 1 000 000 000 $v1. There is no way to create more.
- 4It cannot take anything other than ETH.The amount always comes from the ETH side of the swap. The hook never touches $v1 balances.
- 5It cannot force a claim.Claiming is a pull. What you have not claimed stays credited to you until you ask for it.
- 6It 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.
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.
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.