Verex in one page
A prediction market turns a question about the world into a tradable asset. Verex implements that with three independent mechanisms — an order book for price discovery, conditional tokens for custody, and an oracle for truth. This page is the map; the other technical documents zoom into each piece.
The premise: a share that pays $1 if it happens
Every market on Verex resolves to exactly one outcome. Each outcome is a token that pays $1 if it happens and $0 if it does not. That single rule is what makes the price meaningful: if a token trades at $0.63, the market is collectively saying the event is 63% likely.
Because the outcomes of one question are mutually exclusive and exhaustive, their prices must sum to $1. A multi-outcome market — “who wins the election?” with five candidates — is five such tokens whose prices are held to a total of 100%. Verex enforces this by renormalising sibling outcomes whenever one of them trades.
The three problems
Every prediction market, however it is built, has to answer three separate questions. Confusing them is the most common source of muddled design:
| Problem | Question it answers | Verex's mechanism |
|---|---|---|
| Price discovery | What is this outcome worth right now? | Central limit order book + an operator market maker (moving to LMSR) |
| Custody & settlement | Who holds what, and how does $1 actually get paid? | Gnosis Conditional Tokens Framework (CTF) on Sepolia |
| Truth | What actually happened? | Operator resolution today; UMA Optimistic Oracle next |
They are genuinely independent. You can change the pricing engine without touching settlement, and swap the oracle without touching either — with one important exception noted below.
Lifecycle of a market
- Create. The question, its outcomes and a resolution time are registered. On-chain,
prepareConditioncreates the condition; the operator splits collateral into a full set of outcome tokens to have inventory to sell. - Quote. The operator posts a ladder of buy and sell orders around its current probability estimate, so the book is never empty on day one.
- Trade. Orders match in the book by price-time priority. Each match is settled on-chain as a pair of signed orders through the CTF exchange.
- Close. At the resolution time the market stops accepting orders.
- Resolve. The winning outcome is reported on-chain via
reportPayouts. This is irreversible. - Redeem. Holders burn winning tokens through
redeemPositionsand collect $1 each. Losing tokens are worth nothing.
The one place the layers are coupled
Settlement and truth are not fully independent, and it is worth knowing why. A condition's on-chain identity is derived by hashing the oracle's address into it:
conditionId = keccak256(abi.encodePacked(oracle, questionId, outcomeSlotCount))The oracle address is part of the market's identity. Pointing an existing market at a different oracle does not reconfigure it — it computes a different conditionId, which is a different market holding none of the original tokens. Migrating a live market between oracles is therefore not a matter of changing a setting; it is arithmetically impossible.
Where the system stands
| Layer | Today | Planned |
|---|---|---|
| Price discovery | CLOB + constant-probability operator ladder | LMSR quote centres, then an on-chain pool |
| Custody | CTF on Sepolia, live | unchanged |
| Truth | Operator reports the outcome | UMA Optimistic Oracle as a per-market option |
| Deploys | Manual script | GitHub Actions with Workload Identity Federation |