Skip to main content

Single-sided liquidity

zk-pad follows the Clanker v4 launch model, ported from Uniswap v4 to PancakeSwap Infinity concentrated-liquidity (CL) pools.

No curve, no migration​

Many launchpads sell a coin on a bonding curve first and then "graduate" it to a DEX. That migration step has been the source of several real exploits on BSC (pre-initialized pools, broken migration state). zk-pad has no curve and no migration: the coin trades on its final PancakeSwap Infinity pool from the first second.

Single-sided positions​

At launch, the pool is initialized at a starting price chosen by the creator. The locker places the whole 1,000,000,000-token supply in one to seven concentrated positions that sit entirely above that price. Because the price starts at the bottom of every range, the positions hold only the new token and no quote token. That is what "single-sided" means: nobody has to supply quote-token liquidity at launch.

As people buy, the price moves up through the ranges and the positions fill with the quote token. As people sell, the price moves back down.

Presets​

The SDK and the launch wizard offer two presets (from docs/research/launchpads.md §9.3):

PresetPositions (tick offsets from t0, share of supply)Character
Fair (default; recommended for donation and social-escrow launches)[0, 16400] 10% · [16400, 75400] 50% · [28400, 75400] 15% · [75400, 110400] 20% · [89400, 110400] 5%A thin launch band: an early sniper gets far less supply per BNB and pays a much higher average price.
Standard[0, 110400] 100%One position. Simple, but buying half the supply costs roughly one starting market cap, so it is easier to snipe.

Custom shapes are allowed on-chain: up to 7 positions, ticks multiples of the tick spacing (200), every range at or above the starting tick, and position shares summing to 10,000 bps.

Starting price​

The starting price is expressed as a tick (tickIfToken0IsToken). Each quote token has an allowed tick window (roughly $2k to $250k of fully diluted value at the time the bounds were set). The default target is about $7.5k FDV, for example 10 WBNB or 7,500 USDT. See quote tokens for the table.

Only the locker can add liquidity​

The hook's beforeAddLiquidity callback rejects every liquidity add that does not come from the pool's locker. This matters for the fee: on a pool with a 1% to 5% fee, an outsider could otherwise add "just-in-time" liquidity around a large trade and capture most of its fee. With the guard, all LP fees go to the locked positions, and therefore to the beneficiary.

Locked forever​

The locker holds positions directly in the Infinity CLPoolManager. They are keyed by the locker's address and a salt, so there is no position NFT that could be transferred. The locker contract has no code path that removes liquidity: its only modifyLiquidity calls are the initial mint (positive delta) and fee "pokes" (zero delta). See no-rug guarantees.

Dev buy​

The creator may buy tokens in the launch transaction, at the starting price, before anyone else can trade. For WBNB-paired coins the dev buy is paid with msg.value; for other quote tokens it is pulled from the creator's balance. It has a minAmountOut slippage guard. The dev buy is public on-chain, like any other trade. It pays the normal fee F and runs before the anti-sniper fee is armed.