Listing a new market is an operator action today (admin authority on the protocol). Once governance is wired, listings will route through CNTM votes. This page describes the operational flow at a level you can use to:Documentation Index
Fetch the complete documentation index at: https://continuum-ec12e897.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
- Anticipate when a market is about to launch.
- Replicate the flow in a private deployment (forks, testnet integrations).
- Understand which addresses get derived where.
Decision: pick the asset
Continuum’s targeted launch is TradFi only - equities, indices, commodities, FX. No crypto. Asset checklist:- Has a reliable Pyth on-chain feed (preferred) or Hermes feed (fallback).
- Volatility regime is defined enough to pick a fee tier (index vs liquid equity vs volatile equity).
- Initial price (
initial_l_price) chosen - this anchors the constant product. Pick something close to the current spot. - OI cap chosen - typically 2× expected initial pool depth.
Sequence
The reference scripts live inscripts/ of the protocol repo. Operators run them in order:
Create the market
Market PDA, allocates L and S SPL mints (mint authority = market PDA), creates the collateral vault. Sets keeper_authority and fee_recipient.Initialize the per-market CLP
Clp PDA + per-market vault (cUSDC token account).Create CLP token ATAs
Create Meteora DLMM pools
Two pools per market - one L/cUSDC, one S/cUSDC. Pool fee tier per asset volatility:
| Asset class | binStep | Base fee |
|---|---|---|
| Index ETF (QQQ, SPY) | 10 | 0.10% |
| Liquid equity (NVDA, AAPL) | 20 | 0.20% |
| Volatile equity (TSLA, GME) | 25 | 0.25% |
Wait for keeper
The keeper’s seeder runs every 600s. On its next tick it allocates from
GlobalClp to the new market’s vault, mints inventory pairs via vault_mint_pairs, opens Meteora positions via clp_open_meteora_position. Within ~10 minutes the market is live.Pool fee tier guidance
base_fee_pct = bin_step × base_factor / 1_000_000. Trade-offs:
| Lower fee (binStep 5–10) | Higher fee (binStep 20–25) |
|---|---|
| Tighter NAV peg band | Wider NAV peg band |
| Less LP revenue per swap | More LP revenue per swap |
| Smaller intra-day range covered | Larger intra-day range covered |
| Better for stable underlyings | Better for volatile underlyings |
binStep=5 is not recommended - position range collapses too tight, intraday spikes blow active_id out of range, triggering close+reopen rebalance cycles.
What happens once a market is live
| Time after listing | Event |
|---|---|
| 0s | Market PDA exists, mints exist, vault exists. Mints will fail because oracle TWAP not populated. |
| ~30s | Keeper has pushed enough observations to populate TWAP. Mints succeed at NAV. |
| ~5 min | Keeper’s first risk-state mirror, seeder cycle. Capital allocated. |
| ~10 min | Meteora positions opened. Pool trading viable. |
| ~30 min | First arb cycle if pool drifted from NAV during seeding. |
| ~1 hour | Steady state - mints, redeems, trades all functional. |
OraclePriceUnavailable will reject. Safe to assume markets need ~5 minutes warm-up after listing.
Adding to the registry
The registry is updated separately from market initialization:registry::register_market with the new mints, pools, and the MeteoraDlmm venue. After this, the registry-driven frontend picks the market up automatically.
If you skip registration, the market still works at the program layer - mint_paired etc. all succeed. But the official frontend won’t know to display it.
Adding to the asset list (frontend)
The frontend pulls market metadata fromfrontend/lib/market-addresses.json. After listing:
- Update the JSON with the new market’s pubkeys.
- Add SEO metadata, asset description, icon URL.
- Push the change → docs and frontend redeploy.
market-addresses.json is:
Pausing / delisting a market
Soft pause:Market.is_active = false. All mints and redeems reject with MarketNotActive. Existing positions remain valid SPL tokens but cannot be redeemed at NAV until the market is reactivated.
Full delist (recover all capital, close pools):
- Withdraw Meteora positions → CLP PDA ATAs.
- Redeem CLP PDA’s L+S balances back to cUSDC.
return_to_globalper-market vault →GlobalClp.set_active(false).- Optionally remove from registry.
Future: governance-driven listing
When CNTM governance is activated:- Anyone can propose a new market listing on-chain.
- CNTM holders vote with their staked CNTM weight.
- Quorum reached → proposal queues for execution.
- Time-locked execution → the listing scripts run automatically.
See also
Live markets
Markets currently active on devnet.
Roadmap
Planned markets.
Concepts → Markets
Market structure, OI cap, account layout.

