Skip to main content

How can a new token have liquidity when nobody put money in the pool?

· 10 min read
BlockTrader365

There is a small paradox at the bottom of every launchpad: a token that did not exist an hour ago is trading, right now, against real money — and nobody funded the pool. No treasury seeded it, no market maker was hired, and the creator didn't deposit a cent of the quote asset.

There are two ways to make that work, and BT365's HyperEVM launchpad has shipped both. Our first generation minted the whole supply as a single-sided concentrated-liquidity position. Our current one mints it into a bonding curve with a virtual reserve, and only creates a pool once the curve has raised real money. Each is genuinely elegant, and each has a failure mode subtle enough that you can write a plausible-looking launchpad that strands tokens permanently. Both the elegance and the traps below are from our own implementations.

Two-sided pools, one-sided positions​

In a classic constant-product pool (Uniswap V2 and its forks), liquidity is always both assets at once, spread across every price from zero to infinity. To launch a token there, someone must deposit both sides — the token and the quote asset — and the amount of quote capital deposited hard-limits how much depth the market has. This is why old-style launches needed a funded treasury or a presale: the pool eats real money before the first trade.

Concentrated liquidity (Uniswap V3 and its forks — on HyperEVM, that includes HyperSwap) changed the geometry. A position covers a chosen price range, and the composition of the position depends on where the current price sits relative to that range:

  • Price below the range → the position is 100% the token.
  • Price inside the range → a mix of both.
  • Price above the range → 100% the quote asset.

That first case is the single-sided trick. Put the entire token supply in a range that starts just above the current price and extends to the top of the price spectrum, and the position is valid while containing zero quote asset. The pool is fully armed with sell-side inventory and needs no money at all. Once trading opens, the first buy pushes the price up into the range, the position starts selling tokens and accumulating WHYPE, and the pool's quote side is built entirely out of buyers' money, trade by trade. Lock the position NFT and neither the creator nor the platform can ever withdraw it.

The one-tick trap​

Concentrated-liquidity pools quantize prices into ticks, and positions may only start and end on ticks aligned to the pool's tick spacing (200, at the 1% fee tier). So launch code must round the range's lower boundary to an aligned tick — and the obvious choice is to round up to the nearest aligned tick above the current price.

The bug: if the pool's current tick happens to already be aligned, "round up to the nearest" returns the current tick itself. The range now starts exactly at the live price — which puts the live price inside the range — and a mint inside the range requires both assets. The launch is offering zero WHYPE. The mint reverts.

On an established pool this would be a nuisance: the price wobbles one tick and the retry succeeds. On a freshly created pool it is permanent. The pool has no liquidity yet, so no trade can ever occur, so the price can never move off that tick — and every retry fails identically, forever. The fix is one word of specification: the boundary must be strictly above the current tick, never equal to it. Our first-generation launcher encoded exactly that rule, with a comment explaining why — because the buggy version passes every test in which the starting tick happens to be unaligned, which is nearly all of them.

Back to constant product — with a reserve that isn't there​

Our current launcher takes the other route, and it starts from the observation that the constant-product formula's problem was never the math. It was that a pool with zero quote asset has no price.

So the curve pretends. Every launch mints its billion tokens into a constant-product curve that carries a virtual reserve of 60 HYPE: a number that enters the pricing formula exactly as a real balance would, but was never deposited and can never be withdrawn. The opening price is simply 60 HYPE against the full supply. Every buy adds real HYPE to the curve and takes tokens out; every sell does the reverse; the product stays constant; and because the fee is always charged on the HYPE leg, the curve never accumulates fees denominated in the token it is selling.

Nobody guessed a fair price to seed it, and nobody put money in. The curve's real HYPE balance is, once again, buyers' money — it just lives in a curve instead of a pool for a while.

Graduation: the pool that buyers funded​

The curve has a finish line. Holding the product constant, it reaches 120 HYPE of real reserve at exactly the point where roughly two-thirds of the supply has been sold, and the curve reserves the remaining tokens so it cannot sell through that point. The buy that crosses the line is filled up to it and refunded the rest, selling closes, and the curve hands its reserves to the launch factory.

The target seed is two-sided: the raised HYPE, less a 2% graduation fee, paired with exactly enough tokens for a HyperSwap V3 pool at the 1% fee tier to open at the price the curve closed at. If the pool is new or can be repriced to that target, one full-range position is minted and its NFT is locked with an unlock date roughly nine hundred years out. Tokens the pool does not need at that target price — about a tenth of the supply — are burned. If someone already created the pool and its price cannot be moved to the target within the capped budget, the seed instead uses two locked single-sided positions; the market must close the price gap later. In either case, the pool's quote side was funded by the same people who traded on the curve.

The pre-existing-pool trap​

The bonding curve sidesteps the one-tick trap of the original single-sided launch: its normal two-sided, full-range seed does not depend on a lower tick strictly above the opening price. It has its own quiet failure mode instead, and it comes from permissionlessness.

A V3 pool for a token pair at a fee tier can be created by anyone, and the launch token's address is known from the moment it launches — long before graduation. So a griefer, or a holder with a plan, can create the token's pool early and initialize it at an arbitrary price. Naive graduation code that tries to create the pool finds it already exists, and code that blindly seeds into it at the pool's price seeds at the wrong price.

Worse, the pre-created pool can hold positions. A large holder who parks their tokens as a narrow position just under the curve's closing price would, on a naive seed, be bought out at that price by the seed's own HYPE with zero impact — the best exit any holder could get, funded by the liquidity everyone else is relying on. Every large holder would rationally do it.

Our graduation contract therefore adopts an existing pool rather than assuming a fresh one, and then refuses to be generous with the seed. If the pool's price is off, it nudges it toward the curve's closing price with a swap capped both in size and in gas: an empty pool reaches the price for free, dust in the way is absorbed, and anything larger is simply not traded with. If the price still differs after the nudge, the seed goes in as two single-sided positions instead of one — the HYPE leg entirely below the pool's price and the target, the token leg entirely above both — so neither leg trades against whatever was parked between them. The market arbitrages the gap later; the seed does not pay for it. And because sweeping the curve and seeding the pool are separate steps, a seed that cannot be placed leaves the raised HYPE safe and the graduation retryable.

It is a good miniature of launch engineering generally: the interesting failures are not the ones that revert loudly on the happy path, but the ones that are legal, quiet, and — unless someone thought about them — permanent or profitable for the wrong person.


Part of our series on Hyperliquid's EVM side — see HyperEVM vs HyperCore, what happens during a launch, and why our launches no longer take a gas deposit. Explore the platform.