OddMaki
Configuration

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 noCount different markets, amount each
  • Output: YES tokens for the remaining N - noCount markets + (noCount - 1) * amount collateral

Choosing the Right Type

BinaryMarket Group
Question styleYes/NoWhich one of N?
Outcomes2 (YES/NO)N mutually exclusive
ResolutionIndependent via UMACascade — one YES triggers all NOs
Position conversionN/ANegRisk conversion available
ComplexitySimpleMulti-step creation
Max outcomes250 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