Market Lifecycle
Every MarkIt market progresses through six states, from creation to final withdrawal. States advance automatically based on on-chain conditions — they never go backward.
State Diagram
Created → Funded → Open → CloseOnly → Resolved → WithdrawableStates in Detail
Created
The market has been deployed but doesn't yet have enough LP capital to open for trading.
Traders
Nothing — trading is not available
LPs
Deposit USDC to fund the pool
Operator
Wait for LP funding
Advances to Funded when the total LP deposits reach the minimum threshold (typically 1,000 USDC).
Funded
The pool has enough capital. Trading is now live.
Traders
Take YES or NO positions
LPs
Deposit additional USDC
Operator
Monitor market activity
Advances to Open immediately upon reaching the funding threshold (Funded and Open are effectively the same state for user experience).
Open
Active trading state. This is where most of a market's life is spent.
Traders
Take YES or NO positions, view P&L, hedge
LPs
Deposit additional USDC
Operator
Monitor market activity
Advances to CloseOnly when the current time is within the close-only window (typically 1 hour before the market's close time).
CloseOnly
Final hour before the market closes. Only positions that reduce the current skew are allowed. This prevents last-minute manipulation where a large one-sided position could distort the market.
Traders
Take positions only on the contrarian side (the less-popular outcome)
LPs
Cannot deposit
Operator
Monitor market activity
Advances to Resolved when the operator calls the resolve() function after the market's close time has passed.
CloseOnly protects market integrity. If 70% of positions are on YES, only NO positions are accepted during the CloseOnly window. This prevents someone from dumping a massive one-sided position right before the market locks.
Resolved
The outcome has been determined. Winners can now redeem their tokens.
Traders
Redeem winning tokens for 1.00 USDC each. Sweep (burn) losing tokens.
LPs
Wait for the withdrawal window
Operator
No further action needed
Advances to Withdrawable after the withdrawal buffer period (currently 0 seconds — immediate transition).
Withdrawable
The final state. All obligations can be settled.
Traders
Redeem winning tokens (if not already done)
LPs
Withdraw their pro-rata share of the pool
Operator
No further action needed
This is a terminal state. The market stays here until all participants have claimed their funds.
Automatic State Advancement
States advance automatically. Every time any external function is called on the contract, it checks whether state transition conditions are met and advances if so. There is no need for anyone to manually trigger state changes — except for resolution, which requires the operator to explicitly call resolve() with the outcome.
Timeline Example
For an NBA game market:
Day before game
Created → Funded
Market deployed, LP deposits USDC, market opens
Day before → 1 hour before game
Open
Active trading — YES and NO positions taken
1 hour before game
CloseOnly
Only contrarian positions allowed
Game time
CloseOnly
Market closed, waiting for game result
After game ends
Resolved
Operator resolves based on final score
Immediately after
Withdrawable
Winners redeem, LPs withdraw
Last updated