Skip to main content

Market State Machine

States

StateMeaningMain allowed operations
UninitializedNot initializedCreateMarket
ActiveTrading periodNewOrder ; CancelOrder ; MintPair ; RedeemPair ; ClaimFunds ; SubmitMarketResult
ResultSubmittedOracle result submittedStartDispute ; SubmitFinalMarketResult
DisputeUnder disputeVote ; SubmitFinalMarketResult
FinalCoolingFinal cooling periodRequestDaoReview ; ConfirmFinalResult
DAOReviewDAO reviewApproveDaoProposal ; ConfirmFinalResult
SettlementSettlementClaimMarketReward ; ClaimDisputeReward ; ClaimVoteReward ; ClaimFunds ; CloseMarket
ClosedClosed

Transition Diagram

Uninitialized ──CreateMarket──► Active ──────────────────────► Closed (abnormal)
│ SubmitMarketResult (expiry + oracle read)

ResultSubmitted ──────► Settlement (no dispute: SubmitFinal after cooling)
│ StartDispute (staked challenge)

Dispute ──────────► FinalCooling (SubmitFinal after voting + cooling)

┌─────────────────────────────┴──────────────────┐
ConfirmFinalResult(false) RequestDaoReview
FinalCooling expires ▼

▼ DAOReview
Settlement ◄────────────────────────────────────┘
│ ConfirmFinalResult(true), approvals ≥ threshold
│ CloseMarket (all assets drained)

Closed

Time Windows

WindowmainnetdevnetPurpose
Dispute24h5minChallenge window after the oracle result is submitted
Vote48h5minVoting window during dispute resolution
Cooling24h5minCooling period (no-dispute confirmation / final cooling after a dispute)

Result Enum

ValueMeaning
PendingNo result yet
YesEvent happened
NoEvent did not happen
InvalidOracle value abnormal, retryable

Two Typical Paths

Happy path (no dispute):

Create → trade → submit result at expiry → 24h cooling → SubmitFinal straight into Settlement → claims → close.

Disputed path:

Someone stakes a challenge within 24h of result submission → 48h voting → 24h cooling → SubmitFinal writes the voting result → 24h final cooling (DAO review possible, override at threshold) → Settlement.