Resolution
Resolution is the process by which a market's outcome is determined and recorded on-chain. This is the moment that decides which tokens are worth 1.00 USDC and which are worth 0.
Who Resolves Markets?
Markets are resolved by the market operator — the address that owns the MarketEngine contract (typically the same admin who created the market via the MarketFactory). Resolution is a privileged action; only the owner can call it.
In MarkIt's current deployment, the operator is the MarkIt team. Markets cannot be resolved by traders, LPs, or any external party.
How Resolution Works
1. The Real-World Outcome Occurs
For NBA markets, this means the game finishes and a winner is determined.
2. The Operator Verifies the Outcome
The operator confirms the result using authoritative data sources. For NBA games, MarkIt uses ESPN's public API to verify final scores.
3. The Operator Submits the Resolution Transaction
The operator calls resolve(Outcome) on the MarketEngine contract, passing either YES or NO as the outcome. This transaction:
Sets the market's outcome permanently (it cannot be changed)
Transitions the market to the Resolved state
Emits a
MarketResolvedevent with the outcome and final liability figures
4. Redemptions Open
Once resolved, winning token holders can call redeem() to burn their tokens and receive 1.00 USDC per token. Losing token holders can call sweepLosing() to clean up their worthless tokens (no USDC payout).
Resolution Timing
Resolution can only happen after the market's close time has passed. The operator typically resolves within minutes to hours of the real-world outcome becoming known. For NBA games:
Game ends → ESPN reports final score → Operator verifies → Resolution transaction submitted
Typical delay: minutes (automated) to a few hours (manual verification)
Automated Resolution
MarkIt includes an automated resolution system for NBA markets. The auto-resolve script:
Polls ESPN's scoreboard API for completed games
Matches completed games to open MarkIt markets via a ledger file
Submits resolution transactions automatically
This minimizes the delay between a game ending and the market resolving.
After Resolution
Once a market is resolved:
Redeem
Winning token holders
Burn winning tokens, receive 1.00 USDC each
Sweep
Losing token holders
Burn losing tokens (0 USDC payout — cleanup only)
Withdraw
LPs
Withdraw pro-rata share of remaining pool
Redemptions and LP withdrawals can happen in any order. The contract correctly reserves funds for unredeemed winners regardless of withdrawal sequencing.
Edge Cases
What if a game is postponed?
If an NBA game is postponed, the market remains in the CloseOnly or Open state until the game is played and the operator resolves it. If the game is canceled entirely, the operator resolves based on the applicable rule (this is currently handled on a case-by-case basis).
Can a resolution be reversed?
No. Once resolve() is called, the outcome is permanent. The contract does not support re-resolution or outcome changes. This is by design — immutable resolution prevents post-hoc manipulation.
What if the operator disappears?
If the operator never resolves a market, funds remain locked in the contract. This is a known centralization risk in Phase 1. Future versions may introduce decentralized resolution mechanisms or time-based fallbacks.
Resolution is currently centralized. The MarkIt team operates as the sole resolver. While automated tools minimize delay and human error, this represents a trust assumption. Decentralized oracle integration is planned for future phases.
Last updated