Everything the overview pages describe in plain language, at contract level: the deployed address book, the on-chain read surface, the exact valuation and quorum mechanics, and the hosted ABIs. If you are building an interface, start with the agent skills — they package this page for your coding agent.
The chain is an Arbitrum Orbit L2 and is not in viem/chains — define it yourself, and include the multicall3 contract entry or batched reads silently break. One consequential chain limit: the transaction gas ceiling is 32,000,000, which is why the staged create → build → open launch path exists.
Per-DAO addresses are NOT listed anywhere — they come from factory.getLaunch(launchId), below. Start block 33,760,432 · tick spacing 60 · launch price $5.00.
launchCount() — DAOs ever created; ids run 1..count.
getLaunch(id) — one struct with every per-DAO address (token, treasury, staking, stakedToken, govToken, bondDepository, redemptionModule, governor, timelock, policyGuard, lister, receipt, both pool ids) plus the launch economics. Always decode with the hosted ABI — the tuple is thirty fields and hand-written orders drift.
isOpened(id) — gate every trading surface on this, never on raw phase comparisons.
The pure-view aggregator interfaces should prefer: launchView (one-call dashboard), poolView / twapTick / currentFee (per-pool price, TWAP, live dynamic fee), tokenUsd9 (display-only price), pendingFees, legValues / positions (curve-leg backing).
Decimals: TOKEN and sTOKEN 9 · gTOKEN and gROHM 18 · USD values 9 (1e9 == $1.00).
Each DAO’s CurveLegReceipt marks ONLY the quote legs (WETH + gROHM) of the locked v4 positions at min(spot, twap, pre-block tick) with a 20% haircut and uncollected fees excluded — a one-block pump moves spot but never the mark. The DAO’s own token leg is never counted (circular backing). gROHM held by a treasury is priced by the BackingFeed: ROHM backing × the gROHM index — a conservative floor with no AMM read, so it cannot be flash-moved.
The hook’s LP fee decays baseFee + (startFee − baseFee)·(w−t)²/w² over the MEV window w (~120s), then sits at the base (~1%). locker.collectAndSplit(launchId) is permissionless: TOKEN-leg fees convert to WETH (TWAP-floored), the WETH and gROHM legs split exactly 50/50 between the DAO treasury and ROHME; a stranded leg escrows for claim() instead of blocking the crank. The gROHM half lands in kind and is counted as backing after a permissionless auditReserves().
quorum(t) = max(quorumBps × circulating(t), quorumFloor) over non-excluded gTOKEN. The floor is set at launch to 10× the ROHME grant (25% of supply as gTOKEN) so the grant can never self-quorum. If mass unstaking ever strands a once-live DAO below its floor, anyone may call QuorumRescue with a witness timepoint proving prior liveness; it lowers the floor to 50% of the live float — lowering only, and never at genesis.
Markets are excess-reserve-gated: excessReserves() = totalReserves − baseSupply caps what bonds can mint. A market cannot start below ~95% of the token TWAP (the shared TwapFeed is the reference), and the creator’s pricing path is a one-hour announced queue on the PolicyGuard with permissionless execution; the Senate holds the direct path. Reserves a treasury may price are gated to the ROHME-vetted AssetRegistry (exact feed equality), so captured governance cannot register a lying feed.
Six per-DAO contracts are OpenZeppelin beacon proxies — Staking, Distributor, BondDepository, Governor, PolicyGuard, LpBondLister — each pointing at a shared per-type UpgradeableBeacon whose addresses ship in the manifest; verify any DAO’s logic via beacon.implementation(). The money set — Treasury, RedemptionModule, CurveLegReceipt, the token — is deployed directly with no proxy and no upgrade path. Launches are staged create → build → open (each stage under the 32M gas ceiling); the monolithic launch() wrapper does all three when it fits.
The canonical machine-readable build inputs — the same files the agent skills consume. Fetch these; do not transcribe addresses from docs pages.
Swap integrations: the chain’s UniversalRouter is modified (an extra minHopPriceX36 field in the swap structs; 0 disables it). Stock Uniswap SDK calldata mis-decodes against it — encode execute() with the hosted router ABI. The V4Quoter is unmodified stock.