Introduction
OddMaki is permissionless prediction market infrastructure on Base. If you want to run your own prediction market, this is the documentation for you.
Who This Is For
These docs are written for venue operators — the people who launch and run prediction markets on top of the OddMaki protocol. You'll find the step-by-step playbook for going live, the configuration levers you control, and the operational flows you'll use every day.
If you're a trader, market creator, or protocol developer, the same docs cover you too — but every section is organized around what an operator needs to know.
What is OddMaki?
OddMaki is a permissionless prediction market protocol on Base. It lets anyone deploy a venue — a fully on-chain prediction market platform with its own rules, fee structure, and branding. Think of it as infrastructure for launching your own Polymarket.
Launching a Venue
Running a venue is five things:
- Deploy a venue on-chain — this registers your configuration (fees, access rules, oracle settings) and gives you a
venueId. - Fork the Venue Starter — a white-label Next.js 15 frontend that connects to your venue by env var.
- Brand it — edit
theme.config.jsonand a few env vars. No React changes required to go live. - Create markets — binary, grouped, or price markets. You decide the question and the resolution path.
- Earn fees — every trade on your venue pays the venue fee to your configured recipient. Withdraw at any time.
No backend to run. No matching infrastructure. The app talks directly to Base and the OddMaki subgraph. See Quick Start for the full launch playbook.
Market Types
As a venue operator you can offer three market types, each picked per-market at creation. All three share the same orderbook, outcome tokens (YES / NO), and fee stack — they differ in how many outcomes they represent and how they resolve.
| Type | Outcomes | Resolves Via | When to Use |
|---|---|---|---|
| Binary | 2 (YES / NO) | UMA | Standalone discretionary questions ("Will X happen?") |
| Market Group | N mutually exclusive (2–50) | UMA + NegRisk cascade | "Which of these outcomes?" — elections, tournaments, championships |
| Price Market | 2 (YES / NO) | Pyth | Up/Down or ≥ Strike on a price feed, auto-resolved |
Market groups are several markets created under one group that resolve exclusively to one winner. When one sibling resolves YES, the NegRisk adapter cascades all others to NO in the same transaction — no separate assertion per loser. Holders of NO across multiple siblings can also convert them into YES for the complementary markets plus collateral returned, keeping prices consistent. See Market Types for the cascade and conversion math.
Resolution Paths
OddMaki ships with two resolution paths out of the box. Your choice is made per-market at creation. As an operator you can run a venue that uses only one, both, or — in the future — additional price feed providers.
| Path | Oracle | Covers | How It Resolves |
|---|---|---|---|
| UMA Optimistic Oracle V3 | UMA | Binary markets and market groups | Anyone asserts an outcome with a bond. Dispute window, DVM fallback, then report to CTF. Market groups add NegRisk cascade. |
| Pyth (Price Markets) | Pyth Network | Price markets (Up/Down, Strike) | Anyone calls resolvePyth after closeTime. The Pyth historical price settles it — no bond, no liveness, no dispute path. |
Price markets are the Pyth-powered path. They're ideal for high-frequency or systematic predictions (BTC closing above its open today, ETH ≥ $4,000 at a specific timestamp) where waiting for a human asserter and a dispute window doesn't make sense. Under the hood, price markets share the same orderbook, outcome tokens, and redemption flow as UMA-resolved markets — only the resolution trigger differs.
See Resolution for both lifecycles end-to-end, or Price Markets for the deep dive on the Pyth path.
What You Get Out of the Box
- On-chain CLOB — a fully on-chain central limit order book. Every order, fill, and cancel is transparent on Base.
- Settlement engine — three paths (Normal Fill, Mint-to-Fill, Merge-to-Fill) keep liquidity flowing even in thin markets.
- Binary, grouped, and price markets — YES/NO markets, multi-outcome groups with NegRisk, and Pyth-powered price markets with automatic resolution.
- Dual oracle resolution — UMA for discretionary markets, Pyth for price markets. No centralized authority decides outcomes.
- Batch trading — place up to 20 orders, cancel up to 100, or atomically cancel-and-replace in one transaction.
- White-label frontend — fork the Venue Starter and deploy a branded platform in minutes. Two-color theming auto-generates the full design system.
- Subgraph — pre-built indexer for markets, orders, positions, analytics, and leaderboards.
- SDK — TypeScript SDK for building custom UIs or integrating OddMaki into existing products.
Fee Model
Revenue flows through four fee layers on every trade. Fees are taker-only — makers pay nothing, takers pay the full stack.
| Fee | Range | Who Gets It |
|---|---|---|
| Venue Fee | 1–200 bps | You (the venue operator) |
| Creator Fee | 0 – venue fee | The market creator (carved from venue fee) |
| Protocol Fee | 0–200 bps (set by protocol owner) | OddMaki protocol |
| Match Operator Fee | 10 bps (fixed) | Whoever submits matchOrders |
You set the venue fee and creator fee when you launch and can update them at any time. Protocol fee is configurable by the protocol owner; operator fee is fixed. See Fee Structure for the full math.
How It All Fits Together
Protocol (Diamond contracts on Base)
└── Venue (your on-chain config: fees, rules, oracle settings)
└── App (Venue Starter — your branded frontend)
└── Subgraph (indexed data, analytics, leaderboards)
└── Users (traders and market creators on your venue)The protocol is the set of smart contracts deployed on Base — the Diamond proxy and its 21 facets. A venue is an on-chain configuration that points to the protocol, identified by a venueId you own. The app is a Next.js frontend that reads your venue config and renders a trading interface. The subgraph indexes all on-chain events into a queryable GraphQL API. Users interact through the app to trade and create markets.
Next Steps
Ready to launch?