Prediction Markets
A fully on-chain prediction market powered by the same orderbook engine that runs spot and lending — with multi-outcome events, autonomous resolution, and zero-sum settlement.
Core Insight
Each outcome in a prediction event is its own orderbook, trading outcome shares against USDC. Price = probability. A 3-outcome event creates 3 independent orderbooks linked by event ID. The matching engine, order types, and settlement infrastructure are reused without modification.
How Prediction Markets Work
Users trade outcome shares priced between $0 and $1. The price represents the market's implied probability of that outcome occurring.
"Who wins the next US presidential election?"
Candidate A shares trading at $0.62 → 62% implied probability
Candidate B shares trading at $0.31 → 31% implied probability
Candidate C shares trading at $0.09 → 9% implied probabilityWhen the event resolves, winning shares pay $1 and losing shares pay $0. Traders profit by buying shares below their true probability and selling above.
Architecture
One Orderbook Per Outcome
Each prediction event creates N orderbooks — one per outcome — all trading against USDC:
Event: ELECTION2025
├── ELECTION2025_A_USDC → orderbook for Candidate A shares
├── ELECTION2025_B_USDC → orderbook for Candidate B shares
└── ELECTION2025_C_USDC → orderbook for Candidate C sharesEach outcome book is a standard orderbook instance. During trading, the books operate independently — they don't need to know about each other. The event ID links them for resolution, when the system needs to know which outcome won.
Why independent books work: each trade's collateral is self-contained. The buyer locks what they pay, the seller locks their maximum loss. Total locked per trade always equals the max payout ($1/share). This means solvency is guaranteed per-outcome without coordinating across books.
Order Flow
All existing order types work: Limit, Market, GTC, GTD, IOC, FOK. Self-trade prevention applies.
Collateral Model
Both sides of a trade lock USDC to ensure the system is always solvent:
| Side | What They Lock | Why |
|---|---|---|
| Buyer | quantity × price | What they pay for shares |
| Seller | quantity × (max_price − price) | Maximum loss if outcome wins |
Example at $0.60 for 100 shares:
- Buyer locks: 100 × $0.60 = $60
- Seller locks: 100 × $0.40 = $40
- Total locked: $100 = exactly the max payout if outcome wins
This ensures zero-sum settlement at resolution regardless of which outcome wins.
Resolution
Lifecycle
Dispute Window
Resolution is a two-step process with a 24-hour dispute window:
- Propose — Admin proposes the winning outcome. Trading halts on all outcome markets.
- Wait — 24-hour window for anyone to flag an incorrect resolution.
- Finalize — After the window expires, the canister auto-finalizes via timer and executes settlement.
If disputed during the window, trading reopens and the event returns to Active.
Settlement
When an event finalizes:
- Winners (net long on winning outcome): receive $1 per share
- Losers (net short on winning outcome, or long on losing outcomes): collateral seized
- Voided events: all collateral returned, no settlement
The settlement is zero-sum — total payouts to winners exactly equals total collected from losers.
Autonomous Resolution
The canister handles resolution lifecycle via timers:
- Auto-finalize: After the dispute window expires, a timer task detects pending proposals and finalizes them
- Price-feed resolution: For price-based events ("Will BTC hit $100K?"), the canister queries external APIs via HTTPS outcalls and resolves when conditions are met
- Combo resolution: Events composed from other events auto-resolve when their dependencies resolve
No external keepers or oracle bots needed.
Market Types
Binary Markets
The simplest form — two outcomes (YES / NO):
"Will ETH hit $10K before June 2026?"
├── ETH_10K_YES_USDC → YES shares
└── ETH_10K_NO_USDC → NO sharesYES + NO prices should sum to ~$1.00. When they don't, arbitrageurs correct the spread.
Multi-Outcome Markets
Events with 3+ possible outcomes:
"Which chain will have the highest TVL in Q4 2026?"
├── TVL_ETHEREUM_USDC
├── TVL_SOLANA_USDC
├── TVL_BITCOIN_USDC
└── TVL_OTHER_USDCSum of all outcome prices should approximate $1.00.
Range Markets
Numeric predictions divided into buckets:
"What will BTC price be on Dec 31?"
├── BTC_PRICE_50K_60K_USDC → $50K–$60K range
├── BTC_PRICE_60K_70K_USDC → $60K–$70K range
├── BTC_PRICE_70K_80K_USDC → $70K–$80K range
└── BTC_PRICE_ABOVE_80K_USDC → >$80KResolved automatically by querying a price feed at the resolution time.
Combo Bets
Events composed from other events using AND/OR logic:
"Trump wins AND BTC > $100K"
→ Resolves YES only if BOTH referenced events resolve YES
"ETH hits $5K OR SOL hits $500"
→ Resolves YES if EITHER referenced event resolves YESCombo events reference other events by ID and auto-resolve when their dependencies settle.
Maker Rebates
To attract liquidity providers, prediction markets support negative maker fees — makers receive a rebate for providing liquidity instead of paying a fee:
| Role | Fee | Effect |
|---|---|---|
| Taker | Pays fee (e.g., 2%) | Standard trading fee |
| Maker | Receives rebate (e.g., 0.5%) | Paid for providing liquidity |
Net protocol revenue = taker fees − maker rebates. This incentivizes tight spreads and deep books.
Leaderboards
Track trader performance across prediction markets:
| Metric | Description |
|---|---|
| Volume | Total USDC traded across all prediction markets |
| PnL | Realized profit/loss from resolved events |
| Win rate | Percentage of winning positions |
| Trades | Total number of trades |
Available globally and per-event, with pagination.
Polymarket Comparison
| Feature | Polymarket | Vortum |
|---|---|---|
| CLOB trading engine | ✅ | ✅ Already built |
| Binary & multi-outcome markets | ✅ | ✅ |
| Price = probability ($0–$1) | ✅ | ✅ |
| Market resolution | ✅ UMA oracle | ✅ Admin + HTTPS oracle |
| USDC settlement | ✅ | ✅ |
| Leaderboards | ✅ | ✅ |
| Non-custodial | ✅ | ✅ |
| Multi-chain deposits | ❌ Polygon only | ✅ BTC, SOL, ICP |
| Dispute window before settlement | ❌ | ✅ 24-hour challenge period |
| Range markets (price buckets) | ❌ | ✅ With auto-resolution |
| Combo bets (AND/OR composition) | ❌ | ✅ |
| Autonomous oracle resolution | ❌ Requires UMA voters | ✅ Canister HTTPS outcalls |
Challenges
| Challenge | Approach |
|---|---|
| Liquidity per outcome | Thin books on unlikely outcomes; maker rebates help |
| Oracle reliability | Multi-source with dispute window as safety net |
| Sum-of-probabilities drift | Arbitrageurs naturally correct; monitoring alerts |
| Regulatory exposure | Event selection guidelines; geographic restrictions |
| Market manipulation | Rate limits on large positions; position caps per user |