Market Types
Understand binary markets and market groups (multi-outcome with NegRisk) — when to use each and how they work.
All markets on OddMaki are binary (YES/NO) with two ERC-1155 outcome tokens. The difference is whether they stand alone or belong to a group.
Binary Markets
A standalone binary market is a single YES/NO question. Created via createMarket(), it goes live immediately.
- Two outcome tokens (YES and NO) minted by the Gnosis CTF
- Price discovery through an on-chain CLOB
- Each tick represents a price increment (e.g., $0.01 with a 1% tick size)
- Resolved independently through UMA
const tx = await client.market.createMarket({
venueId: 1n,
question: {
title: 'Will ETH hit $5000 by Dec 31?',
description: 'Resolves YES if ETH/USD >= $5000 on any major exchange.',
},
outcomes: ['Yes', 'No'],
tickSize: parseEther('0.01'),
collateralToken: USDC_ADDRESS,
additionalReward: 0n,
liveness: 0n, // defaults to 2 hours
});Market Groups
A market group contains N mutually exclusive binary markets where exactly one resolves YES. All share the same collateral, tick size, and oracle parameters.
Lifecycle: Create group → Add outcomes → Activate → Trade
// 1. Create the group
await client.market.createMarketGroup({
venueId: 1n,
question: 'Who will win the championship?',
description: 'Resolves YES for the winning team.',
collateralToken: USDC_ADDRESS,
tickSize: parseEther('0.01'),
additionalReward: 0n,
liveness: 0n,
});
// 2. Add outcomes
await client.market.addMarketToGroup({
marketGroupId: 1n,
marketName: 'Team A',
marketQuestion: 'Will Team A win?',
});
// 3. Activate (locks totalMarkets, enables trading)
await client.market.activateMarketGroup({ marketGroupId: 1n });Groups support placeholder markets — reserve slots for outcomes added later. Add placeholders before activation, then activate them individually once the outcome is known.
NegRisk Explained
NegRisk ensures mutual exclusivity through two mechanisms:
Cascade resolution — When one market resolves YES, all sibling markets automatically resolve NO in the same transaction. No separate assertion needed for siblings.
Position conversion — Holders of NO positions across multiple markets in a group can convert them into YES positions in the complementary markets, plus collateral returned. This keeps pricing consistent across the group.
Conversion math (for a group with N total markets):
- Input: NO tokens from
noCountdifferent markets,amounteach - Output: YES tokens for the remaining
N - noCountmarkets +(noCount - 1) * amountcollateral
Choosing the Right Type
| Binary | Market Group | |
|---|---|---|
| Question style | Yes/No | Which one of N? |
| Outcomes | 2 (YES/NO) | N mutually exclusive |
| Resolution | Independent via UMA | Cascade — one YES triggers all NOs |
| Position conversion | N/A | NegRisk conversion available |
| Complexity | Simple | Multi-step creation |
| Max outcomes | 2 | 50 per group |
| Examples | "Will X happen?" | "Who will win?", "What range?" |
Use binary for simple yes/no questions. Use market groups when outcomes are mutually exclusive and you need consistent pricing across them.
Examples
Binary: "Will BTC reach $100k by end of 2026?" — Two outcomes, independent resolution.
Market Group: "Where will Giannis be traded?" — Add each team as an outcome. When one team acquires him, that market resolves YES and all others cascade to NO.
Market Group with placeholders: "Who will win the election?" — Start with known candidates, reserve placeholder slots for late entrants. Activate placeholders as new candidates emerge.
What's Next
- Creating Markets → — step-by-step creation for both types
- Resolution → — how markets resolve, including cascade
- Token Mechanics → — how outcome tokens and NegRisk conversion work