Polymarket does not decide who won a market. Anyone with a $750 stake does. Someone proposes the outcome. If nobody disputes it for two hours, it becomes final. If the proposal is wrong — or just too early — the $750 is lost. And if someone disputes, UMA tokenholders vote on the outcome, which stretches resolution from 2 hours to several days.
That is the whole system in five sentences. The rest of this article walks through each step: who does what, where the money goes, and what happens in the rare case of two proposals and two disputes.

The rules are the market
Every market has resolution rules, written before trading starts. They say which source decides the outcome (an official announcement, a specific website), when the market can resolve, and how edge cases are handled. The market title is just a summary — the rules are the contract. Most resolutions that make traders angry did not break the rules; the trader just never read them. So read the rules before you trade, and definitely before you propose.
Sometimes an event takes a turn the rules did not cover. Polymarket can then publish a clarification (an “additional context” note). It is posted on-chain through a bulletin-board contract. Proposers and voters must take it into account, but it cannot change what the question originally meant.
UmaCtfAdapter contract — v3.0 lives at 0x157Ce2d672854c848c9b79C49a8Cc6cc89176a49 on Polygon. It is the bridge between the CTF contract, which holds every outcome token, and UMA's Optimistic Oracle, where proposals and disputes actually happen. Proposals call proposePrice on UMA's OptimisticOracleV2; clarifications are published through the bulletin-board contract referenced in each market's ancillary data.
The happy path: proposed → unchallenged → final, in ~2 hours
When the outcome of an event becomes clear, anyone can propose the resolution. Not Polymarket. Not a committee. Anyone:
- Pick the winning outcome.
- Post the stake. On a standard market this is $750 in total: a $500 bond set per market, plus UMA’s flat $250 fee. Smaller markets use a $250 bond ($500 total). The 2028 presidential markets use bonds of $25,000–$50,000.
- Submit the proposal to the UMA oracle.
A 2-hour challenge period starts. If nobody disputes, the market resolves. The proposer gets the stake back plus a small reward — from $0.80 to $5, about $2 on average (a few big markets pay up to $20). We checked this on-chain instead of trusting the docs: out of ~179,700 settlements in six months, 162,197 paid out exactly $752 — the $750 stake plus a $2 reward, the most common configuration.
This is why it is called an optimistic oracle. The system assumes the proposal is honest and only runs its expensive checks when someone objects. Almost every market resolves this way: quietly, about two hours after someone proposed.
The money: what $750 buys, and how it vanishes
The stake is not a fee. It is a bet, and it is all-or-nothing:
| You… | Outcome | You receive | Your profit |
|---|---|---|---|
| Propose correctly, undisputed | Market resolves | $750 stake back + reward (avg ~$2) | +$0.80 to +$5 |
| Propose correctly, survive a dispute | Vote upholds you | Stake back + half the disputer’s bond = $1,000 | +$250 |
| Propose incorrectly | Vote rejects you | $0 | −$750 |
| Propose correctly but too early | ”Too early” verdict | $0 | −$750 |
| Dispute and win | Proposal rejected | Stake back + half the proposer’s bond = $1,000 | +$250 |
| Dispute and lose | Proposal upheld | $0 | −$750 |
These payouts are visible on-chain. In six months of settlements, disputed markets paid the winner exactly $1,000 — 477 times. That is the winner’s $750 stake back, plus $250: half of the loser’s $500 bond. The rest of the loser’s money goes to UMA.
Two rows of that table surprise people. First, “too early” loses the whole stake. Propose the right answer before the market’s rules say the event is over, and you lose $750 — the same as being wrong. Second, winning a dispute earns you $250 for risking $750. Disputing only pays if you are right, not if you are just annoying.
Proposing is not paperwork — it is a bet. You stake $750 on your answer being right, and on the timing being right too.
What a dispute triggers: the DVM vote
Every dispute goes to a vote. Anyone can dispute during the challenge window — the dispute link is in the market page’s Rules section — by posting a counter-stake equal to the proposer’s. That escalates the question to UMA’s Data Verification Mechanism (DVM), the human layer at the bottom of the system:
- Debate (24–48 hours). People submit and argue evidence, much of it in UMA’s Discord channels (
#evidence-rationale,#voting-discussion). Votes happen every other day, so there is always at least a full day for discussion. Yes, really: markets with millions in open interest get debated partly in chat. - Vote (~48 hours). UMA tokenholders vote using a commit–reveal scheme. From dispute to verdict, the whole process takes roughly 2–4 days.
The vote returns one of the market’s allowed answers, and the answer decides everything:
- YES, NO, or 50-50 — final. The market resolves to that answer, and the loser of the dispute forfeits their stake. (In the rare 50-50 case, every share on both sides redeems for $0.50.)
- “Too early” — the event is not resolvable yet: think of someone proposing the result of a match that is still being played. The proposer loses their stake, and the market resets: back to waiting for a proposal, with a fresh 2-hour challenge window when one arrives. If that new proposal gets disputed too, there is another vote.
That reset loop is how a market ends up disputed twice — which has happened only 554 times in Polymarket’s history. And the matching $750 counter-stake is the spam defense: disputing a correct proposal just hands your bond to the proposer.
Polymarket’s entire history, measured on-chain
The docs describe the rules. The chain shows how they play out. We measured the full record of oracle events behind 1,481,159 markets — all of Polymarket’s history:
- 99.78% of markets resolve with no dispute at all. Of 1,479,722 resolved markets, 1,477,851 took the happy path: proposed, unchallenged, final in about 2 hours.
- Repeat disputes are rarer still. 2,754 markets (0.19%) were disputed once. Only 554 — 0.037%, about 1 in 2,700 — were disputed twice or more, usually after a “too early” verdict reset the market and the next proposal was challenged too.
- “Too early” is the most common dispute outcome — by a wide margin. Of the 3,846 disputes in Polymarket’s history with a final verdict, 2,072 (54%) resolved “too early” — more than the disputes that resolved YES (963) and NO (743) combined. The most common way to lose a stake is not being wrong. It is being right too soon.
- The 50/50 outcome is real: 68 disputes ended with it. In those markets, every share on both sides redeemed at $0.50.

And who does the proposing? It is a job for bots. The top six proposer addresses filed 623,154 proposals — roughly 4 in 10 of every proposal in Polymarket’s history — with success rates that only automation can sustain:
| Proposer | Proposals (all-time) | Success rate | Times disputed |
|---|---|---|---|
0x176a56a1… | 177,214 | 99.92% | 149 |
0xd9aa1a62… | 142,954 | 99.90% | 69 |
0x53692dbf… | 141,501 | 99.84% | 147 |
0x8d04011b… | 66,228 | 99.98% | 21 |
0x9c1f9b97… | 52,982 | 99.75% | 144 |
0xc816f934… | 42,275 | 99.78% | 45 |
Two of the six are also active disputers — and not only against others. 0x9c1f9b97… has disputed rival proposals 60 times and its own proposals 86 times. Why would a bot dispute itself? Most likely damage control: if your proposal is about to lose, disputing it yourself is cheaper than letting someone else do it — winning the dispute claws back $250 of the $750 you are already losing. Anyone can propose, but in practice you are racing bots for every reward — bots precise enough to hedge their own mistakes.
The disputer side has professionals too — and the economics draw a hard skill bar. A win pays +$250; a loss costs −$750. That means disputing only makes money above a 75% win rate. Look at where the top disputers sit against that line:
| Disputer | Disputes | Won | Lost | Win rate |
|---|---|---|---|---|
0xe0d478a2… | 73 | 68 | 5 | 93% |
0x0db5aea9… | 294 | 254 | 40 | 86% |
0xb7ad15ad… | 107 | 91 | 16 | 85% |
0x9c1f9b97… | 146 | 111 | 35 | 76% |
0xba2cb316… | 57 | 22 | 35 | 39% |
0xdcfe1241… | 174 | 48 | 126 | 28% |
The best disputer, 0x0db5aea9…, won 254 of 294 — at standard stakes, roughly +$33K of other people’s bonds. 0x9c1f9b97… (the same bot from the proposer table) sits at 76%, almost exactly breakeven. And 0xdcfe1241… disputed 174 times with a 28% win rate — roughly $80K forfeited. The dispute market is honest: being right pays, and being trigger-happy is one of the most expensive hobbies on Polymarket.
After resolution: $1, $0 — or $0.50
Resolution is permanent. Polymarket is non-custodial and cannot alter or reverse a result — once UMA finalizes, the outcome is immutable. Trading stops. Winning tokens redeem for $1.00 each. Losing tokens are worth $0.00. In the rare 50/50 case, every token redeems for $0.50.
redeem events you see cluster in the hours after a market finalizes.
Why traders should care: disputes are trading windows
A dispute does not stop trading. The order book stays open. But the price stops tracking the event and starts tracking the resolution process itself: how likely the proposal is to stand, and how voters will read the rules. A challenge window packs a market’s best-informed trading into a few hours. The traders who understand the resolution rules get paid by the traders who don’t.
You can watch that flow live. The Polyflux stream delivers every trade from the mempool, ~3 seconds before it confirms on-chain — so you see a disputed market react to evidence as it happens.
The resolution events themselves are in the feed too. The same WebSocket that carries trades also carries propose, dispute, and settle events. Your code can know a proposal landed the moment it happens — roughly two hours before the market resolves — and a dispute alert is one if statement:
# pip install polyflux-client
import asyncio, os
from polyflux import Client
async def main():
client = Client(os.environ["POLYFLUX_API_KEY"])
async for r in client.resolutions(): # propose / dispute / settle
if r.is_dispute:
print(f"DISPUTE: {r.title!r} — disputer {r.disputer}")
asyncio.run(main())
Each event arrives as a typed Resolution with the market title, the proposer or disputer address, the outcome, and the payout — see the client guide for the full model. And after the dust settles, Trades Inspector lets you select the challenge window on the price chart and see exactly who traded it, ranked by volume and P&L. Grab a key, pick a contested market, and watch what happens when money disagrees.