Verex
DocsCreatePortfolio

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:

ProblemQuestion it answersVerex's mechanism
Price discoveryWhat is this outcome worth right now?Central limit order book + an operator market maker (moving to LMSR)
Custody & settlementWho holds what, and how does $1 actually get paid?Gnosis Conditional Tokens Framework (CTF) on Sepolia
TruthWhat 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

  1. Create. The question, its outcomes and a resolution time are registered. On-chain, prepareCondition creates the condition; the operator splits collateral into a full set of outcome tokens to have inventory to sell.
  2. 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.
  3. 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.
  4. Close. At the resolution time the market stops accepting orders.
  5. Resolve. The winning outcome is reported on-chain via reportPayouts. This is irreversible.
  6. Redeem. Holders burn winning tokens through redeemPositions and 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.

Practical consequence: the oracle for a market must be chosen before it is created. Verex plans to expose this as a per-market choice at creation time — operator resolution for demo markets, UMA for markets that need to be trustless — rather than as a global switch.

Where the system stands

LayerTodayPlanned
Price discoveryCLOB + constant-probability operator ladderLMSR quote centres, then an on-chain pool
CustodyCTF on Sepolia, liveunchanged
TruthOperator reports the outcomeUMA Optimistic Oracle as a per-market option
DeploysManual scriptGitHub Actions with Workload Identity Federation
Verex runs on the Sepolia testnet with test USDC. No real funds are at risk anywhere in the system.