Create Your First Market
Launch your first market on your venue — a binary UMA market or a Pyth-powered price market. Set the question, resolution path, and go live.
Your venue and app are live. Now you create your first market. As the operator you choose which resolution path fits the question — that's the decision that drives everything else.
Pick a Resolution Path
| If your question is... | Use | Resolves via |
|---|---|---|
| Discretionary (news, events, outcomes) | Binary Market | UMA — anyone asserts with a bond; optional dispute; human judgment |
| "Which of N mutually-exclusive outcomes?" | Market Group | UMA + NegRisk cascade |
| Up/Down or ≥ Strike on a price feed | Price Market | Pyth — auto-resolves at closeTime with no bond, no dispute |
All three market types share the same orderbook, the same outcome tokens, and the same fee stack. Only the resolution trigger differs. See Market Types for the full comparison.
Below are two common first-market recipes: a binary market (UMA path) and a price market (Pyth path). You can create either from the Venue Starter UI or directly with the SDK.
Option A: Binary Market (UMA path)
A single YES/NO question resolved by UMA's Optimistic Oracle. Best when the answer requires human judgment.
Through the Venue Starter's create-market flow, you'll fill in:
| Field | Description | Example |
|---|---|---|
| Question | The prediction question. Be specific. | "Will ETH trade above $10,000 on a major exchange before Dec 31, 2026?" |
| Resolution criteria | How the outcome is determined. More precise = fewer disputes. | "Resolves YES if ETH/USD exceeds $10,000 on Coinbase, Binance, or Kraken at any point before the end date." |
| Tick size | Price increment. 1% is standard. | 0.01 |
| End date | When the market stops accepting new orders and becomes assertable. | 2026-12-31 |
Or via SDK:
const tx = await client.market.createMarket({
venueId: 1n,
question: {
title: 'Will ETH hit $10,000 by Dec 31, 2026?',
description: 'Resolves YES if ETH/USD exceeds $10,000 on Coinbase, Binance, or Kraken at any point before 2026-12-31.',
},
outcomes: ['Yes', 'No'],
tickSize: parseEther('0.01'),
collateralToken: USDC_ADDRESS,
additionalReward: 0n,
liveness: 0n, // defaults to 2 hours
});The market creator pays the venue's marketCreationFee (minimum 5 USDC, split 50/50 protocol/venue). Approve USDC to the Diamond before creating.
What Happens On-Chain
- Registers the market on your venue with the question and resolution criteria
- Allocates a market ID (auto-incrementing from 1)
- Prepares the CTF condition and computes deterministic YES/NO position IDs
- Collects the market creation fee
- Emits
MarketCreated— the subgraph picks it up, the market appears in your venue UI - Opens the orderbook — the market is immediately live
Option B: Price Market (Pyth path)
A binary market tied to a Pyth price feed that auto-resolves at a fixed close time. No UMA bond, no liveness window, no dispute path — anyone can trigger resolution after the close time, and the Pyth historical price settles it.
Two sub-modes:
- Up/Down — YES resolves if
finalPrice > capturedOpenPrice(the Pyth price captured at creation) - Strike — YES resolves if
finalPrice >= strikePrice(you specify the target)
const tx = await client.priceMarket.createPyth({
venueId: 1n,
pythFeedId: '0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43', // BTC/USD
closeTime: BigInt(Math.floor(Date.now() / 1000) + 86400), // +24h
tickSize: parseEther('0.01'),
collateralToken: USDC_ADDRESS,
question: {
title: 'Will BTC close above its open price in 24h?',
description: 'Resolves from Pyth BTC/USD at the close timestamp.',
},
// strikePrice: 0n, // omit for Up/Down; set for Strike mode
// resolutionWindow: 60n, // Pyth publish-time tolerance (default 60s)
});
// After closeTime, anyone calls:
await client.priceMarket.resolvePyth(marketId);closeTime must be 5 minutes to 24 hours from now. For Up/Down mode the SDK fetches a current Pyth price at creation and pays the small ETH update fee; Strike mode skips both.
See Price Markets for the full data model and on-chain mechanics.
Option C: Market Group (UMA + NegRisk cascade)
A market group is N mutually exclusive markets that share collateral. When one resolves YES, the others automatically cascade to NO in the same transaction — no separate assertion needed for the losers. Use this for "Which of these outcomes?" questions: elections, tournaments, championships, trade destinations.
Under the hood each outcome is a binary YES/NO market, and exclusivity is enforced by the NegRisk adapter. Holders of NO across multiple siblings can also convert them into YES for the complementary markets plus collateral returned, keeping group pricing consistent.
The lifecycle is create → add outcomes → (optionally reserve placeholders) → activate:
// 1. Create the group
await client.market.createMarketGroup({
venueId: 1n,
question: 'Who will win the 2027 NBA Finals?',
description: 'Resolves YES for the championship-winning team.',
collateralToken: USDC_ADDRESS,
tickSize: parseEther('0.01'),
additionalReward: 0n,
liveness: 0n,
});
// 2. Add the known outcomes (each becomes a YES/NO binary market)
await client.market.addMarketToGroup({
marketGroupId: 1n,
marketName: 'Boston Celtics',
marketQuestion: 'Will the Celtics win the 2027 NBA Finals?',
});
await client.market.addMarketToGroup({
marketGroupId: 1n,
marketName: 'Denver Nuggets',
marketQuestion: 'Will the Nuggets win the 2027 NBA Finals?',
});
// 3. (Optional) reserve placeholder slots for late entrants
await client.market.addPlaceholderMarkets({ marketGroupId: 1n, count: 4n });
// 4. Activate — locks totalMarkets and opens all outcomes for trading
await client.market.activateMarketGroup({ marketGroupId: 1n });Constraints: up to 50 markets per group (including placeholders), minimum 2 to activate, only the group creator can add markets or activate. After activation, placeholders can still be converted into real outcomes with activatePlaceholder().
Resolution uses UMA — assert the winning outcome on one market and the cascade handles the rest. See Market Types for the full NegRisk conversion math, or Creating Markets for every parameter.
Market Is Live
For either path, once the transaction confirms, traders can:
- Place limit orders at any tick between 1¢ and 99¢
- Buy YES if they think the outcome is likely
- Buy NO if they think it's unlikely
- Orders match through the on-chain CLOB via Normal Fill, Mint-to-Fill, or Merge-to-Fill
- Makers pay no fees; takers pay the full fee stack — see Fees
What's Next
You now have a live prediction market platform with your own venue, your own domain, and your first market accepting trades.
From here:
- Create more markets — binary, grouped, and price market parameters in full
- Configure your fee structure to optimize revenue
- Set up access control to gate trading or creation
- Understand resolution for both UMA and Pyth paths
- Batch operations for market makers and quoting bots