Skip to main content

When you can challenge

Between T+16 min and T+136 min (the 2-hour window after proposeOutcome). Only one challenge per market is accepted.

Posting a challenge

PredictStreetOracle.challengeOutcome(bytes32 questionId, bytes32 bondSnapshot) external;
The challenger must transfer 10 USDC (bondAmount) to the oracle. bondSnapshot freezes the bond amount at challenge time.
POST /api/oracle/challenges
{
  "marketId": "...",
  "reason": "Explain what you think is wrong (50+ chars)"
}
The server handles bond approval + on-chain call.

Possible outcomes

DecisionYour bondWhat happens
Confirm originalForfeited to platform revenue walletOriginal payouts finalise
OverrideReturned + rewardCorrected payouts
VoidReturned in fullAll user collateral refunded (requires CO + CTO joint approval)

Decision SLA

  • Target: 2 hours for straightforward data-check cases.
  • Maximum: 24 hours for investigations.
  • Beyond 4 hours: platform-wide notification sent.

During DISPUTED

Trading is paused for the market. Existing positions are preserved. User banner: “This market is under review due to a raised dispute.”

Good reasons to challenge

  • Proposed payouts contradict the resolution criteria.
  • Primary data source was evidently wrong at proposal time.
  • Match abandoned / cancelled but oracle proposed a winner.

Bad reasons (will likely cost you the bond)

  • Subjective disagreement.
  • Out-of-scope ref / VAR complaints.
  • Disagreement with penalty shootout decisions accepted in the feed.
Repeated frivolous challenges → wallet-level reputation flags + potential account restrictions per SOP §8.3.