Skip to main content

Resolution and Settlement

Resolution is the process of determining the outcome of an event, and settlement is the process of paying out (or zeroing) positions based on that outcome. Together, they are the final stage of every prediction market's lifecycle on Intotes.

Event Lifecycle​

Every event moves through a defined set of states:

new  -->  started  -->  paid
StateDescription
newThe event has been created and is open for trading.
startedThe real-world event has begun (e.g., a match kicked off). Trading may still be open depending on market configuration.
paidAll positions have been settled and payouts distributed.

Pool Lifecycle​

Within an event, each pool follows its own lifecycle:

active  -->  closed (won_side set)  -->  settled
StateDescription
activeThe pool is live and its markets are open for trading.
closedThe outcome has been determined. won_side is set. No further trades are accepted.
settledAll positions in this pool have been paid out.

Closing: Setting the Outcome​

When the real-world outcome is known, the event creator (or an admin) closes the market by setting the won_side:

  • won_side = 0 means the first outcome won (e.g., YES in a binary market).
  • won_side = 1 means the second outcome won (e.g., NO).
  • For markets with more than two outcomes, higher indices correspond to additional outcomes.

Closing can be performed at different levels of granularity:

ActionEffect
Close a marketSets the outcome for a single market within a pool.
Close a poolSets the outcome for the entire pool and all its markets.
Close an eventCloses every pool in the event, resolving all markets at once.

Once a pool is closed, all trading in that pool stops immediately.

Settlement: Paying Out Positions​

After a pool is closed and won_side is set, the system settles all open positions:

Payout Rules​

  • YES holders: Receive 10,000 cents ($100.00) per share if the YES outcome wins. Receive 0 if YES loses.
  • NO holders: Receive 10,000 cents ($100.00) per share if the NO outcome wins. Receive 0 if NO loses.

In other words, each share of the winning outcome pays out at the maximum value, and each share of the losing outcome expires worthless.

Example​

Suppose a trader holds 5 YES shares that they bought at an average price of $0.60 each:

  • If YES wins: Payout = 5 shares * $100.00 = $500.00
  • If YES loses: Payout = $0.00

Profit and Loss Calculation​

The PnL for a settled position is calculated as:

PnL = settlement_payout - (amount * avg_price / 10000)

Where:

  • settlement_payout is the total amount received at settlement (in cents).
  • amount is the number of shares held.
  • avg_price is the volume-weighted average price at which the shares were acquired (in cents).
  • 10000 normalizes the price to the per-share payout basis.

Using the example above (5 YES shares at $0.60 avg, YES wins):

PnL = 50000 - (5 * 6000 / 10000)
PnL = 50000 - 3000
PnL = 47000 cents = $470.00 profit

If YES had lost:

PnL = 0 - (5 * 6000 / 10000)
PnL = -3000 cents = -$30.00 loss

ClosedPosition Record​

When settlement occurs, the system creates a ClosedPosition record for each user's position in the resolved market. This record includes:

FieldDescription
pnlThe realized profit or loss from the position, in cents.
won_sideThe winning outcome index (0, 1, etc.) that was set at close.
settlement_payoutThe total payout received.
amountNumber of shares that were held.
avg_priceThe average entry price of the position.

won_side = nil​

If won_side is nil (null) on a ClosedPosition record, it means the position was manually closed by the trader before the event was resolved -- not settled through the resolution process. In this case, the PnL reflects the trader's exit price rather than a settlement payout.

Cancelling an Event​

In exceptional circumstances, an event can be cancelled instead of resolved. When an event is cancelled:

  • All open positions are refunded at their original cost. Every trader receives back exactly what they spent to acquire their shares.
  • No winner is declared. No won_side is set on any pool.
  • The event moves to a terminal state and no further action can be taken.

Cancellation is a protective mechanism used when an event becomes invalid (e.g., a match is postponed indefinitely, the question becomes unanswerable, or there is a data integrity issue).