Documentation
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:
| Phase | Name | Where it trades |
|---|---|---|
0 | NotGraduated | the bonding curve |
1 | Swept | nowhere — reserves are out of the curve, the pool is not yet created |
2 | PoolCreated | the Uniswap V4 pool |
3 | Rescued | nowhere; 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#
| To | Call |
|---|---|
| launch with no opening buy | factory.launchToken |
| launch and buy atomically | launchAndBuy.launchAndBuy |
| trade before graduation | curve.buy / curve.sell on the launch's own curve |
| trade after graduation | Uniswap's UniversalRouter |
| collect fees you are owed | feeEscrow.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:
- Approvals — which contract pulls your funds. Two of the five entrypoints approve something other than the contract you are calling.
- Decimals — a 6-decimal quote asset against an 18-decimal token.
- 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.txt | The entire documentation as one document — every address, signature, selector and gotcha. Paste this into an agent. |
/llms.txt | A short index, following the llms.txt convention. |
/skill.md | A Claude Code skill. Save it as .claude/skills/foci/SKILL.md and it loads itself when relevant. |
/documentation/<page>.md | Any 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.