Creating Markets
A binary market is created through a five-step flow in the web UI, backed by the
create_market / create_market_spl instructions on
magma_binary_vault. Every market is a single
falsifiable YES/NO question with a deadline, a chosen variant, and seed liquidity.
The 5-step web creation flow is live on Solana devnet, including the AI oracle
analysis pass and on-chain seeding. Programmatic creation via REST
(POST /v1/binary/*) is not yet available — those endpoints return 503 until
post-TGE. See Program & API.
The 5-step flow
| Step | Action | Notes |
|---|---|---|
| 1 | Pick variant | Choose Classic (zero-sum) or Yield (capital-loss + Crucible). Fixed at creation. |
| 2 | Write the question | One falsifiable YES/NO question with a resolution deadline. |
| 3 | AI oracle analysis | Auto-classifies the question into a category and scores its falsifiability. |
| 4 | Seed liquidity | Creator seeds the YES and/or NO sides to bootstrap the market. |
| 5 | Pay fee + confirm | Clear the creation-fee gate (Cloudflare Turnstile + a verified treasury fee-payment tx), then sign; create_market / create_market_spl initializes on-chain state. |
Classic vs Yield at creation
The variant chosen in step 1 changes both the settlement math (see Overview) and the go-live path:
| Variant | Go-live | Why |
|---|---|---|
| CLASSIC | Admin review before the market opens | Zero-sum markets pay winners directly from losers; review guards against ambiguous or abusive questions. |
| YIELD | Instant-live | Yield markets carry a softer capital-loss profile (losers keep 65%) and route forfeitures to the Crucible, so they open immediately. |
The variant cannot be changed after creation. A Classic market and a Yield market on the
same question are distinct on-chain markets with distinct market_ids.
The creation-fee gate
MAGMA-native binary-market creation carries the same anti-spam fee gate as narrative publishing.
Creating a market through the web flow (or programmatically via POST /v1/markets, once live)
requires clearing the same three checks a narrative /publish does:
| Check | Requirement |
|---|---|
| Cloudflare Turnstile | A valid Turnstile token (cf_token) — the human-verification gate. |
| Signature | The creator wallet's signature over the request. |
| Treasury fee-payment tx | A confirmed on-chain transaction paying the creation fee to the protocol treasury, verified before the market is created. |
The fee is BINARY_MARKET_FEE_SOL, which defaults to the narrative publish fee
(NARRATIVE_PUBLISH_FEE_SOL, ~5 SOL — see YBNCM → publish fee).
Like the narrative fee, it is an anti-spam cost: a real on-chain payment makes mass-creating junk
markets uneconomical.
If the fee-payment transaction is missing or fails verification, creation is rejected with
market_fee_missing_treasury. The full reject-code list and the POST /v1/markets body are in
Program & API → market creation.
Only MAGMA-native creator markets (seed source) pay the fee. The bot, admin, and classic
protocol-created paths are not fee-gated — they are created by the protocol's own wallet.
Kalshi and Polymarket imports keep their own platform gates / KYC and never pay a MAGMA
fee (see source types).
AI oracle analysis
Step 3 runs an automated analysis pass over the question before it can be created. It produces two things:
- Category — the resolution category the question falls into (e.g. MARKET, SPORTS, POLITICAL), which selects the oracle source set used at resolution. See Oracle Resolution.
- Falsifiability — an assessment of whether the question has a clear, checkable YES/NO answer at the deadline. Questions that are not falsifiable are flagged so the creator can rewrite them before seeding.
This is the same class of pre-resolution analysis MAGMA applies to narratives — it ensures the oracle has a well-posed claim to resolve rather than an opinion.
Seeding liquidity
In step 4 the creator commits initial capital to the YES and/or NO sides. Seeding:
- Bootstraps both pools so early backers have a counterparty.
- Is recorded on-chain in the side vaults (
yes_vault/no_vaultfor SOL,yes_tvault/no_tvaultfor SPL). - Is itself a backing — seeded capital is subject to the same settlement rules as any other backing on that side.
Seed liquidity originating from the creator is tagged with the seed source type
(below).
Source types
Every market records how it was created. This drives whether MAGMA settles it on-chain or merely mirrors an external venue.
source | Origin | Settlement | Fee gate |
|---|---|---|---|
seed | Creator-seeded market via the web flow | Native on-chain (magma_binary_vault) | BINARY_MARKET_FEE_SOL (creation-fee gate) |
bot | Generated by the backend bot market generator | Native on-chain (magma_binary_vault) | None — protocol-created |
kalshi_import | Imported from Kalshi (brokered via DFlow) | Follows Kalshi's resolution, DB-synced — no MAGMA on-chain settlement | Kalshi's own gates / KYC — no MAGMA fee |
polymarket | Ingested from Polymarket (Gamma API) | Data-only today — see status below | Polymarket's own gates — no MAGMA fee |
Kalshi sync is LIVE: third-party markets are imported and follow the source platform's resolution, synced to MAGMA's database, with no MAGMA on-chain settlement. Polymarket is data-only ingestion (Gamma API) today; on-chain / EVM trading is Phase 14 (planned). See Oracle Resolution → third-party.
After creation
Once a Classic market clears review (or a Yield market goes live), it enters
oracle_status 0 (open) and accepts backings until its deadline. From there:
- Backers commit to YES or NO — see Backing & Settlement.
- The oracle resolves the question at the deadline.
- YIELD-market forfeitures fund the Crucible Pool.