/ builder
Compose the
rules first
Five blocks, numbered the way the contract names them. Everything on this page is computed here in your browser by the same arithmetic the contract executes, and checked against the same validation the contract applies. Nothing is sent anywhere until you launch.
This page settles the rules and only the rules. A token’s name, its ticker and its opening price belong to the transaction that opens the pool, so they are asked for on the launch page — and the panel below the five blocks carries whatever you build here into it.
Caps each buy at a share of the in-range reserve and adds a surcharge, for a fixed number of blocks after the pool opens.
beforeSwap · while the window is open
The LP fee rises with how deep the trade bites into liquidity. No oracle, no keeper — it is arithmetic on the reserve.
beforeSwap · every buy
A share of the tokens bought goes to the dead address inside the same swap. The pool's reserves are untouched; only the buyer receives less.
afterSwap · once the output is known
A share of the ETH is donated to whoever holds in-range liquidity, before the swap sees it.
beforeSwap · out of the input
A share of each qualifying buy accumulates, and every Nth buy takes it. The counter advances at most once per block and is public.
beforeSwap · out of the input
beforeSwap
afterSwap
The numbers are names, not a sequence. Auto Burn is block 03 and runs last, because it works on an output that does not exist until the swap has happened.
The rules are settled. The token is not.
A name, a ticker and an opening price belong to the transaction that opens the pool, not to the hook — so they are asked for on the launch page. This carries everything above into it unchanged, and sends nothing: the config travels in the address bar, which also makes it a link you can hand to someone else.
with this hook →
- taken from each buy
- 2%LP rewards plus the pot, out of the ETH in
- LP fee
- 0.3% → 5%rises with trade depth
- burned from the output
- nothing
- gas on a buy
- ~93,34683,278 base + 10,068 for 3 blocks
Gas is measured, not estimated: a 0.1 ETH buy against a 10 ETH pool in test/unit/BlockGas.t.sol, second buy so the storage is warm. Your figure moves with the pool, not with this page.
- fee charged
- 1.347%
- to in-range LPs
- 0.002000 ETH
- to the pot
- 0.000000 ETH
- reaches the swap
- 0.098000 ETH
- of which the fee
- 0.001320 ETH
- burned from the output
- nothing
- counts toward the pot
- no pot
Every check in BlockHook._validate passes. The chain would take this config as written.
These are the hook’s nine checks, in its order, naming the error it would revert with. Read them against the deployed hook.
BlockConfig({
guardBlocks: 300,
maxBuyBps: 500,
snipeTaxPips: 10000,
baseFeePips: 3000,
maxFeePips: 50000,
surgeSens: 10000,
burnBps: 0,
burnTriggerWei: 0,
lpBps: 200,
potBps: 0,
potEveryN: 0,
potMinBuyWei: 0
})(300,500,10000,3000,50000,10000,0,0,200,0,0,0)0x28CC
The low 14 bits of the hook’s address, which is how v4 knows which callbacks to make. They belong to the deployed contract, not to your config: every pool Quench opens is served by the same hook, so this mask never changes. Check it against E8Cc at the end of its address.
A published blueprint is a config anyone can launch against. It cannot be edited or withdrawn afterwards, and its royalty comes out of the creator’s fee share, never out of a buyer.
Connect a wallet to sign this. Everything above is computed without one.
Prefer to do it from a terminal? Copy the struct above and call publishBlueprint with cast send --account — see the docs.