phasis.
Phasis Docs
Trading Guide

Expiry & settlement

How Phasis halts trading, determines the settle price via Pyth, and pays intrinsic value in USDC at expiry.

Settlement is automatic

You never need to manually exercise an option on Phasis. At expiry an off-chain cranker service coordinates the settlement sequence on your behalf. Intrinsic value is credited to your account in USDC as each series is settled.

Market state machine

Each market moves through a one-way sequence of states:

Listed → Halted → Settling → Closed
StateMeaning
ListedNormal trading is open
HaltedTrading is frozen; the market is awaiting a settle price
SettlingSettle price is set; users are being paid out series by series
ClosedAll positions settled; market retired

Once a market transitions to Halted, no new orders are accepted.

When does trading halt?

The cranker monitors block time and calls cranker_halt once the current time reaches expiry_ts − halt_window. The halt window is configured per underlying (typically around one hour before expiry). For a weekly BTC market expiring on Friday at 16:00 UTC, trading would halt around Thursday at ~15:00–16:00 UTC.

Settle price determination

The protocol uses the Pyth Lazer EMA price as the authoritative settle price. The cranker reads a signed Pyth price update (no older than a configurable staleness window) and writes it on-chain by calling cranker_settle_price. This transitions the market from Halted to Settling.

If the Pyth feed is unavailable, an admin can set a price manually via admin_force_settle_price. This escape hatch is only used if both automated feeds are stale.

Per-series payout

Once the settle price is on-chain, the cranker processes each series individually:

  1. The series is marked RetiredAwaitingSettle.
  2. For each account holding a position in that series, the cranker calls the settle function.
  3. The on-chain payout is calculated as intrinsic value multiplied by the position size:
PositionPayout per contract
Long callmax(0, settle_price − strike) USDC
Short callPays max(0, settle_price − strike) USDC
Long putmax(0, strike − settle_price) USDC
Short putPays max(0, strike − settle_price) USDC
  1. USDC is transferred to (or debited from) the user's account balance.
  2. The series moves to Retired.

In the rare case that a short position is undercollateralized at settlement, bad debt is covered first from the protocol fee pool, then absorbed by the protocol.

Example timeline (weekly BTC, expiry Friday 16:00 UTC)

TimeEvent
Friday 15:00 UTCCranker calls cranker_halt; market moves to Halted
Friday 16:00 UTCCranker submits Pyth EMA update; market moves to Settling
Friday 16:00–17:00 UTCCranker settles all accounts series by series
By Friday 17:00 UTCAll series retired; cranker calls cranker_retire_market; market moves to Closed

What you need to do

Nothing. Your balance is credited automatically. After settlement you will see:

  • Expired in-the-money positions converted to a USDC credit in balance_quote.
  • Expired out-of-the-money long positions with no payout (the premium paid is the total cost).
  • Short positions closed with the intrinsic value deducted (or zero deducted if they expired worthless).

Any remaining free balance can be withdrawn immediately after settlement.

Continue to Liquidation.

Connect a Wallet

No Sui wallet detected in this browser.

Install Sui Wallet

Phasis supports any wallet that implements the Sui Wallet Standard.