// Documentation

How Contention.markets works

The backer surface for fully on-chain games. Skill Contests are pari-mutuel pools on the outcome of matches you don’t play. To compete as a contestant instead, head to the player surface ↗ (separate operator).

/ contests

Skill Contests

Skill Contests are pari-mutuel pools on the outcome of fully on-chain games. The underlying matches are played on a sibling player surface; backers here back a contestant, and if their contestant wins they split the prize pool with other backers of that contestant, pro-rata to their stake.

No order book. No bookmaker. No counterparty. The protocol takes a 5% fee from the total pool; everything else flows to backers of the winning contestant.

Total pool        = sum(stake[i] for all backers i)
Winning pool      = sum(stake[i] for backers of winner)
Distributable     = total pool × (1 − fee_bps / 10000)
Your payout       = your_stake / winning_pool × distributable

Each entry requires a skill component — a bracket pick (for tournaments) or a move-prediction memo (for 1v1). This anchors the legal frame as a "predominantly skill" contest under DFS precedent. Free entries via Skill Points (earned playing arcade games) cover the alternative-method-of-entry sweepstakes safe harbor.

/ play

Want to play instead?

Contention.markets is the backer surface — you back contestants in matches you don’t play. If you want to compete as a contestant, head to the player surface ↗.

The player surface is a separately-operated product where you challenge another player directly, accept their challenge, and compete in chess / snake / blockwords matches. The two surfaces share only the oracle layer — the same on-chain game programs that decide outcomes — and operate as separate products under separate legal entities. A regulator action against one does not put the other at risk.

/ oracle

Oracle architecture

Match outcomes are read from the game program's on-chain state. Three layers:

Tier A — live ER state          → display "skill assessment" (no settlement)
Tier B — game program PDA       → authoritative settlement
Tier C — GPX1 SPL-memo on L1    → fallback if Tier B unavailable

Tier B is the binary differentiator. DraftKings reads stats from third-party feeds (Stats Inc., SportRadar) — they trust an oracle. We read directly from the game program that produced the result. No oracle committee. No dispute window.

Tier C ensures contests can still settle from on-chain transaction history even if every off-chain server disappears — on either surface.

/ fees

Fees & payouts

Protocol fee       5%   (default; configurable in ContestConfig)
Organizer fee      0–2%  (opt-in per contest; streamer kickback)
$GAMER buy-burn    0–1%  (post-launch; folds to treasury until token ships)
Total max          10%   (hard-capped in code)

Fees collect into a per-contest FeeVault PDA on each backing, then flush at settlement. No fee on cancelled contests — backers refund 100%.

Settlement is permissionless — anyone can call settle_contest once the underlying match resolves. We run the first keeper but don't gate it.

/ programs

Programs / on-chain

contention-markets    69Yfc...1Xo8   live on devnet  · CM v2.1 (backer pools)
contest-pools         TBD            in design       · Skill Contests program

oracles consumed (player-surface programs, separate operator):
  magic-chess         match result PDAs
  cyber-snake         bot duel PDAs
  blockwords          showdown PDAs

Source of truth for invariants is the program code in programs/<name>/src/lib.rs. IDLs are mirrored to the player-surface frontend for type-safe instruction builders; that's a read-only operational dependency, not a shared codebase.