Skip to content

Overview

GoMarket is a prediction market on Solana. Users buy and sell shares in the outcome of a real-world question — an election, a match, a price level — and each share pays out 1 USDC if that outcome happens and 0 if it doesn’t. The price a share trades at is therefore the market’s estimate of the probability.

There are three ways to take a position, across two trading venues that run side by side.

The high-market-program is an LMSR automated market maker: a cost function over the outstanding YES and NO supply that quotes both sides continuously, funded by a liquidity parameter rather than by anyone’s inventory.

Its defining property is that it always fills. A brand-new market, or a quiet one nobody is making, still has a price. You trade against the curve, not against another user.

This is the venue live on mainnet today, audited by Zokyo.

Every market has a central limit order book. You post a signed limit order; it either crosses resting liquidity immediately or rests in the book until someone takes it. Matching happens off-chain in the Order Manager; settlement happens on-chain in the markets Solana program, atomically, in a single transaction. GoMarket never takes custody of your funds — your tokens move directly from your wallet to your counterparty’s.

Because the position is a fungible SPL token, you can exit any time before resolution by selling back into the book.

The CLOB runs on devnet only today, and its audit is scheduled but hasn’t started.

Start trading →

An order book with no makers is an empty screen; a curve that always quotes charges its spread whether or not anyone disagrees about the price. The AMM bootstraps and backstops a market, the book takes over where there’s real flow, and both settle in USDC against the same YES/NO outcome model.

They are not a migration — they are complements, and a market’s venue is a property you read rather than assume.

Two venues, in detail →

A parlay is one slip carrying 2–10 legs. Each leg is a market plus a YES/NO pick. The odds of the legs multiply, so the payout multiplier grows fast — but every leg has to land. One loss and the whole slip is dead.

Parlays don’t trade against an order book. You’re betting against the parlay vault, at a per-leg probability that is snapshotted the moment you place the slip and never recomputed. The vault holds USDC and enforces a hard solvency rule: total outstanding exposure can never exceed 80% of the vault balance.

How parlays work →

AMM path CLOB path
│ │
│ buy_shares / sell_shares │ signed order
│ (one tx, always fills) ▼
│ ┌──────────────────────────────┐
│ │ Order Manager (SIWS, match) │
│ └───────┬──────────────────────┘
│ │ gRPC
│ ┌─────────────┼──────────────┐
│ ▼ ▼ ▼
│ ┌──────────┐ ┌────────────┐ ┌────────────┐
│ │ Ledger │ │ Executor │ │ Markets API│
│ │ PG+Redis │ │ sign & send│ │ catalogue │
│ └──────────┘ └─────┬──────┘ └────────────┘
│ │ Solana JSON-RPC
▼ ▼
┌──────────────────────┐ ┌──────────────────────────────┐
│ high-market-program │ │ markets · execute_trade │
│ LMSR · buy/sell │ │ │
└──────────┬───────────┘ └──────────────────────────────┘
│ reads (no CPI)
▼
┌──────────────────────────────────────┐
│ high-market-parlay │
│ create_parlay · settle_leg · claim │
└──────────────────────────────────────┘

Four Rust services off-chain, three Anchor programs on-chain, and a Django API that indexes them for the webapp. The AMM needs no matching layer — pricing is on-chain — which is why only the CLOB path runs through the order manager. Full architecture →

If you want to…Read
Understand the product before writing codeGoMarket 101
Know which venue a market is onTwo Venues
Verify the contractsContracts & Audits
Place an order from a scriptQuickstart
Know which API to callAPIs & Interfaces
Build a parlay UITrader Guide
Make marketsCLOB market making
Look up a field or errorAPI Reference