Create
Documentation
Get started

foci

foci is a permissionless launchpad. Anyone deploys a token against a bonding curve; the curve is the only venue until a fixed amount has been raised, at which point the launch graduates — reserves are swept out of the curve and seeded as a full-range Uniswap V4 position whose liquidity is locked forever.

Everything is on-chain and permissionless. There is no allowlist for trading, no admin who can seize a position, and no path by which locked liquidity comes back out.

The two venues#

A token is only ever tradeable in one place, and which one depends on its phase:

PhaseNameWhere it trades
0NotGraduatedthe bonding curve
1Sweptnowhere — reserves are out of the curve, the pool is not yet created
2PoolCreatedthe Uniswap V4 pool
3Rescuednowhere; terminal

Phase 1 is transient and usually invisible — the crossing buy normally sweeps and seeds in one transaction. But it can persist if the seed runs out of gas, and a token sitting there has no tradeable venue at all. See Graduation.

Read the phase from factory.getLaunchedToken(token).phase and branch your UI on it. Do not infer it from whether a pool exists.

What you actually call#

ToCall
launch with no opening buyfactory.launchToken
launch and buy atomicallylaunchAndBuy.launchAndBuy
trade before graduationcurve.buy / curve.sell on the launch's own curve
trade after graduationUniswap's UniversalRouter
collect fees you are owedfeeEscrow.claimToken

The curve is per launch — it has no fixed address. Get it from factory.getLaunchedToken(token).curve.

Before you write anything#

Three pages will save you the most time, in this order:

  1. Approvals — which contract pulls your funds. Two of the five entrypoints approve something other than the contract you are calling.
  2. Decimals — a 6-decimal quote asset against an 18-decimal token.
  3. Graduation — the gas trap that leaves a launch half-migrated.

Building with an AI#

There is a Use with AI button at the top of every page. It will copy the page you are on, open a Claude conversation already pointed at the full reference, or install a Claude Code skill.

Directly, if you prefer:

/llms-full.txtThe entire documentation as one document — every address, signature, selector and gotcha. Paste this into an agent.
/llms.txtA short index, following the llms.txt convention.
/skill.mdA Claude Code skill. Save it as .claude/skills/foci/SKILL.md and it loads itself when relevant.
/documentation/<page>.mdAny single page as raw markdown.

The skill is short on purpose. It teaches the handful of things that are counter-intuitive — approval targets, the two decimal scales, the graduation gas trap — and points at the full reference for everything else, so it costs little context to keep loaded.