Session — the MVP on the local stack — closed 15 Sep 2026
The launchpad core, deployed and usable on a local chain (D27). Fees on. No stocks (their own effort), no hooks, no web interface, no experiment seams, no anti-snipe. Security bar: Slither triaged plus an internal review.
Where it starts — 15 Sep 2026
make dev-deploy deploys a one-quote launchpad: PoolManager, one DevQuote, FeeVault, one
PoolMigrator (no fees), the curve beacon, the factory, and PoolSwapTest. It does not deploy:
BasketFactory,setQuoteSource, reference units, or any stock;LaunchRouter— and there is no Uniswap v3 on a bare anvil for its swap leg;- more than one quote asset, or any fee (curve, creator or pool).
make dev-smoke proves launch → curve → graduation → pool swap for that one quote.
Tried and rejected
-
A forked local chain, for real Uniswap v3.
anvil --fork-urlof Arbitrum One at block 504,491,782: code reads work, everyeth_callfailsExcess blob gas not set, and sends fail on fee history.--hardfork cancunandpraguechange nothing; anvil 1.8.1 has no Arbitrum network mode. -
Uniswap's official
@uniswap/deploy-v3. It exists and deploys the full stack from official artifacts, but it is a Node CLI and the developer wants everything in Foundry. Building from the same source with Uniswap's compiler settings (800 runs, no metadata hash) reproduces the exact pool init-code hash0xe34f…8b54, which the deploy script checks. -
v3 inside the protocol project. Would compile 0.7.6 and OpenZeppelin 3.4 into every
make check.
Build plan — agreed 15 Sep 2026
- Done. Uniswap v3 from its official source, in its own Foundry project
contracts/dev/uniswap-v3(six pinned submodules: v3-core v1.0.0, v3-periphery 0682387, swap-router-contracts v1.3.0, v2-core v1.0.1, solidity-lib, OpenZeppelin v3.4.2-solc-0.7).make dev-deploydeploys WETH9, the factory, the position manager and SwapRouter02 first and writesdeploy/31337-uniswap-v3.json. Proved on anvil: pool created, liquidity minted, 1 WETH swapped through SwapRouter02. - Done.
script/DevMarkets.s.soldeploys dUSD (6 decimals) and dARB and seeds full-range 0.05% v3 pools, WETH/dUSD at 3,000 and WETH/dARB at 7,500.Deploy.s.solregisters WETH (20), dUSD (50,000) and dARB (69,000), turns fees on (1% protocol curve fee, 1% LP fee, 50% pool creator share), deploysLaunchRouter, and writes all of it todeploy/31337.json. Proved: 1 ETH through the router → v3 → dARB → curve bought 91M tokens. - Done.
make dev-smokeon a freshmake dev-deploy: launch against dARB with a 1% creator fee; 1 ETH through the router onto the curve; a quarter sold back for ETH; 15 ETH crosses the threshold at the node's estimate, graduates, refunds the excess; 1 ETH buys in the pool through the same call; a pool sale routes dARB → WETH → dUSD;collectFeessplits evenly. Every step checks its own outcome. - Done. Slither 0.11.4: 44 findings, no High, every one triaged as intended or a false positive.
CI's Slither job (
fail-on: medium) had been failing on 14 Mediums since the scaffold, unnoticed. The 14 are now disabled at their lines;make lintfails on Medium too, like CI. Triage below. - Dropped by the developer: nothing meaningful is deployed yet, and the contracts will change.
Slither triage
Moved to notes/references/slither-triage.md.
Next
Closed: the MVP runs locally. make dev-anvil, make dev-deploy, make dev-smoke. What follows is
three separate efforts (D27) — stocks, hooks, and the modular infrastructure for experiments — and which
comes first is the developer's call.