Platform › Prediction markets › How a pot market works

Prediction markets

How a pot market works

Two pots, one question about a launch on this chain, and a payout that is each winner's share of the whole pot.

Version
1.0
Updated
2026-10-14
Source
Prediction market contract sources · Predict, common and drops contracts — design reference

Status#

Two pots, no price#

A market is one yes-or-no question and two pots, YES and NO. Nothing is priced: there is no order book and no AMM. Each market is an EIP-1167 clone of one fixed ParimutuelMarket implementation, so no key can change a live market’s logic.

A market's life
StepCallWho
CreatePredictionMarketFactory.createMarket — opens with an equal opening stake on both sidesAnyone, paying the creation fee
Stakestake(side, amount) — no unstakeAnyone
SettleLaunchOutcomeOracle.settle(marketId)Anyone
Claimclaim() — a payout or a refundEach staker; no expiry

See Creating a market and Settlement and refunds.

The payout#

ParimutuelMarket payout arithmetic
QuantityFormula
PottotalYes + totalNo
Protocol feepot × feeBps / 10,000
Featured-placement feepot × marketingBps / 10,000 — zero unless the market was featured
Payout poolpot − protocol fee − featured fee
A winner’s payoutstake on the winning side × payout pool / winning pot, rounded down
code
pot = 10 ETH  (YES 4, NO 6)   feeBps = 200   outcome = YES
payout pool = 10 − 0.2 = 9.8 ETH
a 1 ETH YES stake receives 1 × 9.8 / 4 = 2.45 ETH
When nobody pays a fee
CaseEvery staker gets
VoidedTheir stake back at par; both fees zero
Settled with one side emptyTheir stake back at par; both fees zero

Division truncates, so payouts never exceed the payout pool; the remainder of under one base unit per claimant stays in the market and is never swept.

What a market is about#

Every question is about The Hood’s own launchpad on the same chain: LaunchOutcomeOracle answers it by reading the launchpad’s contracts directly. No signer, no bond, no challenge window, no off-chain data.

code
question = (family, metric, subject, comparator, threshold, deadline)
outcome  = compare(observedValue, comparator, threshold)   // YES when true

Which metrics may be asked: Creating a market. The ids and reads: Prediction markets metrics.

Currencies and limits#

A market is denominated in one currency for its whole life, chosen at creation from SettlementRegistry. Stakes, fees and payouts are all in that currency, and figures are never summed across currencies.

SettlementRegistry routes
CurrencyHow it is listedDefault protocol fee
Native ETHAlways listed; cannot be delisted or denied200 bps (2%) on production
Core stablecoinOwner, via addCoreCurrencySet at listing
Project tokenA graduated Hood launch token that meets the listing bars, after a 7-day notice0 bps unless the owner sets one
Native ETH limits, set in the SettlementRegistry constructor
LimitValueRefusal
Minimum stake0.001 ETHStakeBelowMinimum
Per market100 ETHStakeExceedsMarketCap
Per address, per market10 ETHStakeExceedsPerAddressCap
Protocol fee ceiling500 bps — MAX_FEE_BPSFeeAboveHardCap

A market copies its currency’s fee and limits at creation; a later change to the registry affects new markets only. ERC-20 stakes credit the measured amount received, so a fee-on-transfer token credits what actually arrived.

Staking window#

When staking closes
ConditionRefusal
The deadline has passedStakingClosed
The market settled or voided before its deadlineStakingClosedMarketResolved
The market or the factory is pausedStakingPaused