Skip to main content

Timeline

T+EventOwnerSide-effect
0Real-world event concludesMatch result available at source
~15 minOracle posts proposeOutcomeoracle-servicePredictStreetOracle emits OutcomeProposed
16 minChallenge window opensContractBook writes paused for this market
16–136 minChallenge can be lodgedAny user10 USDC bond required
136 minChallenge window closesContractIf no challenge → ready to finalise
137 minfinalizeOutcomeoracle-serviceConditionalTokens.reportPayouts, redemption unlocked

Step 1 — Oracle consensus

3-of-3 agreement      → READY_TO_PROPOSE
2-of-3, primary ⊆ maj → READY_TO_PROPOSE with requiresManualReview
2-of-3, primary ⊄ maj → DELAYED (SOP §8.2 "not explainable")
0-of-3 / no data      → DELAYED

Step 2 — On-chain proposal

PredictStreetOracle.proposeOutcome(
    bytes32 questionId,
    uint256[] payouts
) external onlyAdmin;

Step 3 — Challenge window

PredictStreetOracle.challengeOutcome(
    bytes32 questionId,
    bytes32 bondSnapshotHash
) external;
Only the first challenge is accepted.

Step 4a — No challenge, finalise

PredictStreetOracle.finalizeOutcome(bytes32 questionId) external onlyAdmin;
Internally calls ConditionalTokens.reportPayouts, unlocking redemption.

Step 4b — Challenge, re-verify

resolveChallengeConfirm(questionId)
resolveChallengeOverride(questionId, newPayouts)
voidMarket(questionId)

What you observe as a partner

PhaseYour RESTYour WebSocket
Market OPENNormal tradingorderbook deltas
Event closestatus: CLOSEDmarket.statusCLOSED
Proposal on-chainPENDING_RESOLUTIONmarket.status
FinalisedRESOLVEDoracle.market_resolved
VoidedVOIDEDoracle.market_resolved
DelayedDELAYEDmarket.status with reason

Redemption

POST /api/me/redemptions
# Withdrawal endpoints aren't exposed on the partner API today.
{
  "marketId": "UAE-CUP-FINAL-20260425",
  "amount": "250"
}
The server resolves token IDs, queues on-chain redemption via the vault (dual-sig), returns a tracking record.