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 MarketResolved event 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:

  1. Polls ESPN's scoreboard API for completed games

  2. Matches completed games to open MarkIt markets via a ledger file

  3. Submits resolution transactions automatically

This minimizes the delay between a game ending and the market resolving.

After Resolution

Once a market is resolved:

Action
Who
What Happens

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.

circle-exclamation

Last updated