Session — launchpad core
Closed. The protocol contracts. See notes/STATUS.md for project state and
notes/ARCHITECTURE.md for the shape.
Done
Six contracts — LaunchFactory, BondingCurve, LaunchToken, PoolMigrator, FeeVault,
BasketWrapper — with 120 local tests and 7 against live Arbitrum One. The concept also runs:
make dev-anvil → dev-deploy → dev-smoke, with no RPC anywhere.
All three things v1 had to prove are proved: a token launches on a curve and migrates to Uniswap v4, it can be paired against essentially any ERC20, and it can be paired against a basket of them.
Decided in passing, worth not relitigating
- A beacon per version, and no parameter setters in the curve. D12. The second half is the
consequence people forget: without it, an emergency upgrade is also a way to move
cmid-raise. - Parameters are derived, not supplied. The forced relation is the only value the curve can hold, so a launch cannot ship a curve that closes where its pool does not open.
- The migrator is replaced, never upgraded, and the pool is opened at launch rather than at
graduation. D16. Both follow from
PoolManager.initializebeing permissionless. - Fees are zero by default. Deliberate, so the mechanism could be watched without them.
- Baskets redeem pro rata rather than by fixed units. D14, amended before anything was built.
forge lint'sreentrancy-eventsandscreaming-snake-case-immutableare excluded repo-wide, with the reasoning infoundry.toml. Every hit was a false positive.
Open in this thread
All carried in notes/DECISIONS.md: O17 blocks the first fee strategy, O15 the token's
observer, O13 basket identity, O12 anti-snipe. The hook's shape is settled (D15) but it is
not written, and nothing but a script can reach the launchpad.
What went wrong in how we worked
The session drifted twice, both times the same way: after finishing a piece I proposed the next
one unprompted, and the proposals accumulated into a backlog the developer had not asked for. It
cost a full reset to untangle what was v1 from what was suggestion. Recorded against O7.