Pools

How a launch splits the supply across pools, and how the start price works.

A launch creates 1 to 5 Uniswap v4 pools. Each pool pairs the token with one quote.

Pool requests

Each pool request has three fields:

FieldTypeDescription
quoteaddressThe quote asset. address(0) is the chain's native currency.
supplyBpsuint16The pool's share of the supply, in basis points (10000 is 100%).
initialTickint24The start price, as a tick of raw quote per raw token. See below.

The requests must follow these rules:

  • There are 1 to 5 requests.
  • The shares sum to exactly 10000, and each share is more than zero.
  • The shares do not increase. Each share is less than or equal to the share before it. Equal shares are allowed.
  • The first request is the main pool. Its share is at least 6000 (60%).
  • Each request has a different quote.
  • Each start tick is a multiple of 200, at least -887200, and less than 887200.

There is no quote allowlist. A quote can be native currency or any ERC-20. Use a standard ERC-20 with no transfer fee and no rebase.

Pool key

Each pool has this Uniswap v4 pool key:

FieldValue
currency0The lower address of the token and the quote
currency1The higher address of the token and the quote
feeThe LP fee of the launch's partner, in pips. It is static.
tickSpacing200
hooksDropHook

Read the key with poolKey(quote, token) on the launchpad.

The position

The launchpad adds one position to each pool. The position holds only the token. It starts at the start price and goes up to the highest usable price.

  • Buyers move the price up and take tokens from the position.
  • Sellers can only take back the quote that buyers put in. Below the start price, the pool has no liquidity.
  • The launchpad owns the position forever. Nobody can remove it, and nobody can add other liquidity.

Start price

initialTick is the start price in raw quote per raw token, whatever the order of currency0 and currency1. The launchpad converts it to the pool's tick.

The price of one whole token in whole quote units is:

price = 1.0001 ^ initialTick × 10 ^ (18 − quoteDecimals)

The start market cap is price × 1,000,000,000. The tick spacing is 200, so the start price moves in steps of about 2%.

QuoteStart market capinitialTickExact market cap
ETH (18 decimals)10 ETH-18420010.016 ETH
ETH (18 decimals)30 ETH-17320030.088 ETH
USDC (6 decimals)$33,000-379600$32,734
USDC (6 decimals)$100,000-368400$100,321

See Set the start price to calculate a tick in code.

A high start price makes the position's range narrow. If the range is too narrow for the pool's supply, PoolManager reverts the launch with TickLiquidityOverflow.

Each pool has its own start price. The launchpad does not check that the prices of different pools agree. If they do not agree, traders can buy in the cheaper pool and sell in the other.

Dev buy

A launch can buy tokens from the main pool in the same transaction. The devBuy field has:

FieldTypeDescription
amountInuint128The exact quote amount to spend. 0 skips the dev buy.
recipientaddressReceives the tokens. Must not be zero if amountIn is not zero.

The caller of launchDrop pays:

  • If the main pool's quote is native, send exactly amountIn as the call value.
  • If the main pool's quote is an ERC-20, approve the launchpad for amountIn first. Send no value.

The dev buy is a normal swap. It pays the LP fee, and the fee goes to the fee recipients like any other fee. If the pool cannot take all of amountIn, the whole launch reverts.

On this page