Skip to main content

How to index prediction market outcomes: Polymarket resolution and redemption data

Polymarket's 4 midterm control markets resolved onchain 2.8 to 8.1 hours after close, with no dispute. How a Polymarket outcome resolves onchain, with Goldsky data on resolution speed, disputes, and payout redemption.

How to index prediction market outcomes: Polymarket resolution and redemption data cover image
Written by
image of Elliott Charbonneau
Elliott Charbonneau

Head of Operations

Polymarket's four 2026 midterm control markets closed on Election Day. Each one resolved onchain between 2.8 and 8.1 hours later, with no recorded dispute. Goldsky's own data on Polygon shows most winning shares redeemed within a minute of that resolution. This post explains the onchain resolution path. It then shows Goldsky's data on resolution timing, disputes, and redemption speed for markets that resolved in the last 6 months. That set includes the House and Senate control markets that Goldsky's earlier post on midterm odds tracked before Election Day.

How a Polymarket outcome resolves onchain

Polymarket uses UMA's Optimistic Oracle (opens in a new tab) to resolve most prediction markets. After a market's end date, anyone can propose an outcome and post a bond. A 2-hour challenge period follows. If no one disputes the proposal, the market resolves. If someone disputes it, a second proposal round starts. 2 disputes send the question to a UMA token-holder vote. Once a result is final, Polymarket's Conditional Tokens contract (opens in a new tab) on Polygon emits a ConditionResolution event with the condition ID and the payout for each outcome. A holder of the winning outcome token then calls redeemPositions. That call pays out collateral for the winning side and leaves losing tokens worthless.

The midterm control markets resolved fast and without dispute

Polymarket ran one Yes/No market per party per chamber for House and Senate control after the 2026 midterms. These are the same 4 markets Goldsky's earlier post tracked by price. All 4 closed at the same scheduled end time and resolved onchain within hours.

MarketScheduled end (UTC)ConditionResolution (UTC)Hours to resolveOnchain dispute (QuestionReset)
House, Democratic Party2026-11-04 04:592026-11-04 13:06:068.1None found
House, Republican Party2026-11-04 04:592026-11-04 09:57:245.0None found
Senate, Democratic Party2026-11-04 04:592026-11-04 10:53:425.9None found
Senate, Republican Party2026-11-04 04:592026-11-04 07:47:342.8None found

Goldsky checked each market's questionID against the resolving contract's own QuestionReset event. That event fires only when someone disputes a proposal. None of the 4 midterm control markets has one, so none needed a second UMA proposal round. Resolution speed shows only whether someone disputed the first proposal. It does not show how close the race was.

Most winning shares get redeemed within a minute

Redemption is a separate step from resolution. A winning token holder has to call redeemPositions to collect payout, and nothing forces them to do it quickly. Goldsky's data on the same 4 markets shows most of them do.

MarketWinning-side payout redeemedRedeemed within 1 minuteRedeemed within 24 hours
House, Democratic Party$17.29M90.8%97.0%
House, Republican Party$8.19M94.3%99.8%
Senate, Democratic Party$7.57M88.0%98.3%
Senate, Republican Party$3.20M84.9%99.7%
Line chart: cumulative share of winning payout redeemed after resolution for the 4 Polymarket 2026 midterm control markets. 85% to 94% was redeemed within 1 minute, and close to 100% within 96 hours.

Across all 4 markets, 85% to 94% of the dollar value owed to winners moved out within 60 seconds of the ConditionResolution event. Almost every redeemer in this count is the same address: Polymarket's Neg Risk Adapter contract. Polymarket uses this contract as the resolving oracle for its multi-outcome markets. The adapter's own redeemPositions function calls the Conditional Tokens contract on the user's behalf. The Conditional Tokens contract then logs the adapter as the redeemer, not the wallet that asked for the payout. A handful of individual wallets redeem small positions directly over the following days. That is why the last 1% to 3% of payout trails out over 24 to 96 hours.

Across the last 6 months, disputes stayed rare

Goldsky's Polygon log data also covers every question resolved through Polymarket's 3 known UMA resolution-adapter contracts in the past 6 months. This covers far more than the midterm markets alone.

Resolution adapter contractQuestions resolvedQuestions with an onchain dispute (QuestionReset)Dispute share
0x2f5e3684cb1f318ec51b00edba38d79ac2c0aa9d11,509750.65%
0x157ce2d672854c848c9b79c49a8cc6cc89176a495611.8%
0x6a9d222616c90fca5754cd1333cfd9b7fb6a4f744312.3%
All 3 combined11,608770.66%

Disputes stay rare across the broader set too. Under 1% of resolved questions through these 3 contracts needed a second UMA proposal round in the past 6 months. Polymarket's resolution docs (opens in a new tab) put an undisputed resolution at about 2 hours after the challenge period. A disputed one takes 4 to 6 days, when it goes to a full vote. A low dispute share is one reason few resolutions take that long in practice. This count covers only the 3 UMA-based resolution contracts Goldsky checked. It does not cover markets that resolve by Chainlink TWAP or by manual admin action, such as Polymarket's up-down markets.

Method

Every number above comes from matic_raw_logs in Goldsky's community ClickHouse warehouse. That table holds the same raw Polygon contract-log data Goldsky streams as the matic.raw_logs Turbo dataset (opens in a new tab). matic_raw_logs holds every Polygon log from block 0 (genesis) to block 96,975,799 as of this run. The queries below scope to blocks 86,547,825 through 96,975,799, the last 6 months as of 2026-11-08 20:19:55 UTC.

* Event identification. ConditionResolution and PayoutRedemption come from the Conditional Tokens contract, 0x4D97DCd97eC945f40cF65F87097ACe5EA0476045 on Polygon. QuestionResolved and QuestionReset come from the 3 UMA resolution-adapter contract addresses in the table above. Polymarket's contracts page (opens in a new tab) publishes all of them.
* Condition and question IDs. Each midterm market's conditionId and questionID came from Polymarket's own CLOB API. Goldsky used the API only to identify which onchain condition is which market, the same label-lookup role Polymarket's API played in Goldsky's earlier midterm post. No price, volume, or timing figure above came from that API.
* Payout parsing. PayoutRedemption's payout amount sits in the second word of the event's non-indexed data, after the condition ID and before the index-set array offset.
* Limits. Redemption and dispute counts only reach as far back as each contract's own history. They do not cover a market's full lifetime if it predates the contract. The dispute count only covers the 3 UMA resolution adapters queried here. This method reads markets built on the Conditional Tokens contract. Polymarket started new markets on separate Protocol V2 contracts on November 9, 2026, per Polymarket Developers (opens in a new tab) and Polymarket's V2 migration guide (opens in a new tab). On those markets, resolution routes through a new OracleAggregator contract instead of Conditional Tokens, per Goldsky's Polymarket docs (opens in a new tab). This method does not read those markets.

sql
SELECT
  multiIf(
    position(data,'d5d9fc47718bd553592d126b1fa5e87183d27f3936975b0c04cc0f2dec1f1bb4')>0,'house_dem',
    position(data,'4e4f77e7dbf4cab666e9a1943674d7ae66348e862df03ea6f44b11eb95731928')>0,'house_rep',
    position(data,'307a1ed89d60b61002dd5bbf00e1408c5ed2ab3fcdb056191ca7ef9bc34d38f3')>0,'senate_dem',
    position(data,'86bfb53af7250a40928975c551d12c185b762fa4ce0b40c6a64a50c946d72587')>0,'senate_rep',
    'other'
  ) AS market,
  block_timestamp,
  substring(data, 131, 64) AS payout_hex
FROM matic_raw_logs
WHERE block_number BETWEEN 96120686 AND 96975799
  AND address = '0x4d97dcd97ec945f40cf65f87097ace5ea0476045'
  AND is_deleted = 0
  AND startsWith(topics, '0x2682012a4a4f1973119f1c9b90745d1bd91fa2bab387344f044cb3586864d18d')
  AND (position(data,'d5d9fc47718bd553592d126b1fa5e87183d27f3936975b0c04cc0f2dec1f1bb4')>0
    OR position(data,'4e4f77e7dbf4cab666e9a1943674d7ae66348e862df03ea6f44b11eb95731928')>0
    OR position(data,'307a1ed89d60b61002dd5bbf00e1408c5ed2ab3fcdb056191ca7ef9bc34d38f3')>0
    OR position(data,'86bfb53af7250a40928975c551d12c185b762fa4ce0b40c6a64a50c946d72587')>0)
ORDER BY market, block_timestamp

FAQ

Does a fast resolution mean the market outcome was not in doubt?
No. Resolution speed reflects whether anyone disputed the first proposal, not how close the underlying race was.

What stops someone from proposing a false outcome?
UMA's bond and dispute system does. A wrong or early proposal loses its bond to a disputer, per Polymarket's resolution rules (opens in a new tab).

Why does redemption lag resolution at all, if most of it happens in a minute?
redeemPositions is a separate transaction from resolution. Nothing forces a holder to call it right away. Most winning value is redeemed within a minute, through Polymarket's Neg Risk Adapter, which calls redeemPositions on the holder's behalf. The remaining holders redeem on their own schedule over the following days.

How can I get this data from Goldsky?
Use a Turbo pipeline on the matic.raw_logs dataset, filtered to the Conditional Tokens contract and the UMA resolution-adapter addresses in the Method section above. See Goldsky's Polymarket docs (opens in a new tab) for the dataset catalog and the polymarket.* datasets that cover trading activity directly.

Do these 4 midterm markets match the odds Goldsky tracked before the election?
Yes. They are the same House and Senate control markets from Goldsky's pre-election odds post, now shown at resolution instead of mid-trade.

© Endless Sky Inc. All rights reserved.

PrivacyTermsSecurity

System status