/ 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.

Loaded from blueprint the registry. Changing anything here makes it your own config — it does not touch the published one, which nobody can change.

/ 01 Anti-snipe

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

/ 02 Surge fees

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

/ 03 Auto burn

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

/ 04 LP rewards

A share of the ETH is donated to whoever holds in-range liquidity, before the swap sees it.

beforeSwap · out of the input

/ 05 Nth-buy pot

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

The counter moves at most once per block. Without that, N−1 dust buys and one real buy in a single block would take the pot every time.

/ one buy, end to end
in0.100000 ETH

beforeSwap

01Anti-snipecap 5% of the reserve, +1% feeallowed
02Surge fees0.3% → 5% by depthfee 1.347%
04LP rewards2% donated to in-range LPs−0.002000 ETH
05Nth-buy pot1% into the pot−0.001000 ETH
reaches the swap0.097000 ETH
the pool swaps at 1.347%

afterSwap

03Auto burn5% of the tokens out, on buys of 0.010000 ETH or more−5% of the output
outtokens, less the burn

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.

/ next

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.

launch a token
with this hook →
/ what this stack costs
taken from each buy
3%LP rewards plus the pot, out of the ETH in
LP fee
0.3% → 5%rises with trade depth
burned from the output
5%on buys of 0.01 ETH or more
gas on a buy
~120,80783,278 base + 37,529 for 5 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.

/ simulate a buy
fee charged
1.347%
to in-range LPs
0.002000 ETH
to the pot
0.001000 ETH
reaches the swap
0.097000 ETH
of which the fee
0.001306 ETH
burned from the output
5%
counts toward the pot
yes
/ would the hook accept thisaccepted

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.

/ the config
BlockConfig({
    guardBlocks: 300,
    maxBuyBps: 500,
    snipeTaxPips: 10000,
    baseFeePips: 3000,
    maxFeePips: 50000,
    surgeSens: 10000,
    burnBps: 500,
    burnTriggerWei: 10000000000000000,
    lpBps: 200,
    potBps: 100,
    potEveryN: 25,
    potMinBuyWei: 10000000000000000
})
(300,500,10000,3000,50000,10000,500,10000000000000000,200,100,25,10000000000000000)
/ hook flags

0x28CC

beforeInitializebeforeAddLiquiditybeforeSwapafterSwapbeforeSwapReturnDeltaafterSwapReturnDelta

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.

/ publish

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.

Simulated against the launchpad before your wallet opens, so a refusal arrives by name rather than as a failed transaction.

Prefer to do it from a terminal? Copy the struct above and call publishBlueprint with cast send --account — see the docs.