OriginDOCS

Markets

Asset Classes & Roadmap

Launch Coverage

At launch, Origin lists perpetual futures across three asset classes:

  • Crypto perps. BTC, ETH, SOL, and major altcoins.
  • Equity perps. Major single-name equities and equity indices.
  • Commodity perps. Precious metals, energy, and agricultural benchmarks.

All contracts are quoted in USD and settled in stablecoins.

Roadmap

Options, spot, and FX perpetuals are scheduled to follow.

  • Options. Will share the same margin account as perps, allowing portfolio-margined risk offsets.
  • Spot. Will leverage the same orderbook and settlement infrastructure.
  • FX perps. Will reference rates derived from Circle StableFX liquidity, giving traders 24/7 access to currency pairs natively settled in stablecoins.

Listing Process

Listings are permissioned. New markets are reviewed for liquidity, oracle availability, regulatory considerations, and risk-parameter feasibility before being activated. Each listing publishes a complete parameter set at the time of activation:

  • Initial margin, maintenance margin, and leverage tier ladder
  • Position limits
  • Tick size and lot size
  • Oracle source binding (Pyth feed identifier and CEX price source set)
  • Funding configuration
  • Fat-finger band

Contract Specifications

Quote and Settlement Currency

Every contract is USD-denominated. PnL is calculated in USD and credited or debited in the user's collateral assets. If a user holds non-USD collateral, realized PnL settles against that collateral at the prevailing oracle exchange rate, with haircuts applied (Accepted Assets & Haircuts).

Tick Size and Lot Size

Tick size and lot size are set per market based on liquidity profile and price magnitude. High-liquidity, high-price markets (e.g., BTC) use finer ticks expressed in absolute USD; lower-price markets use ticks expressed as a percentage of price to avoid quoting noise. The full table is published on the markets reference page.

Position Limits

Each market enforces a per-account maximum position size. Limits scale with the user's effective margin tier and are designed to prevent any single account from accumulating risk that would be difficult to liquidate without market impact.

Market States

A market can be in one of the following per-market states at any time. These are distinct from system-wide operational states (Operational States), which act as a global envelope over all markets.

StateBehavior
LIVEFull trading. Markets with external closure periods (equities, commodities) may additionally be in Discovery Mode during weekends, holidays, or after-hours trading.
POST_ONLYOnly post-only limit orders accepted; takers rejected. Used during volatility spikes or oracle anomalies.
REDUCE_ONLYOnly orders that reduce existing positions accepted. Used during planned market windowing or risk events.
HALTEDNo order activity. Existing positions continue marking; liquidations paused if halt is triggered by oracle staleness.
DELISTEDMarket removed from listing; users notified to close before final settlement.

Transitions between states are logged on-chain and announced via the WebSocket market-state channel.

CrossFX: Virtual Cross-Currency Markets

Core Concept

Origin exposes markets like GOOGL/KRW, BTC/EUR, and XAU/JPY without maintaining separate orderbook liquidity for every quote currency. Instead, each virtual cross-currency market is a composition of a canonical USD-denominated perp book and an FX overlay:

GOOGL/KRW  =  GOOGL/USD-PERP  +  USD/KRW FX layer
BTC/EUR    =  BTC/USD-PERP    +  USD/EUR FX layer
XAU/JPY    =  XAU/USD-PERP    +  USD/JPY FX layer

This gives users a native local-currency trading experience while all orderbook liquidity, funding, risk, and market-maker hedging remain unified around canonical USD books.

CrossFX Virtual Market Flowchart showing how GOOGL/USD canonical book and USD/KRW FX oracle combine to create virtual GOOGL/KRW mark price, feeding into liquidation engine, user display, and SL/TP triggers.

FX Oracle Architecture

The FX overlay is not a simple midpoint price feed. It is a liquidity-aware executable FX oracle anchored to StableFX RFQ (Request for Quote) quotes at the $1M-notional level. This reflects institutionally meaningful executable liquidity rather than theoretical midpoints that may not be achievable at size.

Size-Aware Quote Curves

For each currency pair, the protocol maintains a curve of executable quotes at different size buckets:

USD/KRW ask curve (StableFX RFQ):
  $100K:  1,382
  $1M:    1,385   ← primary mark input
  $5M:    1,390
  $10M:   1,396

The $1M level is chosen as the primary mark input because it represents real executable liquidity at an institutionally relevant size, while remaining robust to quote manipulation that might target smaller notional amounts.

CrossFX Oracle

The published CrossFX oracle mark is a clamped value designed to be manipulation-resistant and continuous even when RFQs are sparse:

fx_oracle_mark = min(
  max(
    TWAP_5min(StableFX $1M RFQ),
    oracle_price * 0.98
  ),
  oracle_price * 1.02
)

The price is clamped ±3% from the backup oracle reference price to prevent extreme deviations from broader market consensus. If the RFQ-based calculation falls outside this band, the oracle reverts to the conservative boundary toward the reference price.

Quote TTL and Circuit Breakers

Every FX quote carries a time-to-live (TTL). Under normal conditions:

  • Normal FX TTL: 3-5 seconds
  • Liquidation FX TTL: 1 second for fast markets
  • UI indicative TTL: 30 seconds

If StableFX RFQ becomes unavailable, the oracle falls back to the backup feed with widened collateral haircuts. Circuit breakers trigger when:

  • Backup oracle deviates from $1M RFQ by >100 bps
  • FX bid/ask spread widens beyond threshold
  • Settlement failure rate for an LP exceeds threshold

User Experience vs. Protocol Reality

From the user's perspective:

  • Deposit KRW1, see margin in KRW, trade GOOGL/KRW, see PnL in KRW, withdraw KRW1.

From the protocol's perspective:

  • Collateral is valued in USD at conservative FX rates. The order routes to the canonical GOOGL/USD book. The FX overlay prices USD/KRW via $1M RFQ. The Risk Engine computes everything in USD. Settlement converts through StableFX only when needed (withdrawal or liquidation), not on every trade.

Economic Distinction

The user's actual economic exposure is to a USD-denominated GOOGL/USD perp. The KRW display is a presentation layer over that canonical position. This distinction matters for understanding where risk resides:

AspectUser SeesProtocol RealityRisk Location
PositionLong GOOGL/KRWLong GOOGL/USD-PERPUSD-denominated perp risk
PnL+₩528,200+$380 USDUSD at source, converted for display
Mark price₩249,286$180.12 USDBoth valid; KRW is derived
Funding payment-₩2,768/hour-$2 USD/hourCanonical USD funding
Collateral value₩100,000,000$66,426 (at ask)KRW1 balance × conservative FX

Where FX Risk Lives

Users holding KRW1 collateral and trading GOOGL/KRW carry FX risk on their collateral, not on their perp position. The perp position is USD-denominated; if USD/KRW moves, the USD PnL remains the same, but its KRW equivalent changes.

Example:

  • User enters with KRW1 when USD/KRW = 1,380
  • Later USD/KRW moves to 1,450 (+5.1% KRW depreciation)
  • GOOGL/USD mark unchanged at $180
  • User sees their KRW margin value increase 5.1% in KRW terms (more KRW per USD of collateral)
  • But their USD position value is unchanged

This is collateral FX exposure, not position FX exposure. Origin makes this distinction explicit in account statements and the order preview, showing both USD and local-currency values side by side.

Virtual Market Definition

Each virtual market is registered as:

FieldExample
virtual_market_idGOOGL-KRW-PERP
canonical_market_idGOOGL-USD-PERP
display_quote_currencyKRW
settlement_stablecoinKRW1
fx_pairUSD/KRW
max_fx_drift_bps25
fx_quote_ttl_ms3000

The virtual market is a routing and display configuration; it is not a separate orderbook. Risk, funding, open interest, and position records are all maintained on the canonical USD market.

Mark Price Construction for Virtual Markets

The virtual mark price for cross-currency markets is constructed by composing the canonical USD mark with the FX oracle rate, with specific pricing used for different risk purposes:

Display Mark Price

virtual_mark_price = canonical_mark_usd × fx_oracle_mark

Where fx_oracle_mark is the blended $1M RFQ rate described above, clamped ±2% from the backup oracle reference to prevent manipulation. This display mark is used for:

  • Unrealized PnL display in local currency
  • Liquidation price estimates shown to users
  • SL/TP trigger conditions expressed in local currency

Executable Virtual Spread

The displayed bid/ask spread for a virtual market reflects both the asset perp spread and the FX spread:

virtual bid  =  asset/USD impact bid  ×  USD/local_executable_bid
virtual ask  =  asset/USD impact ask  ×  USD/local_executable_ask

For a buy order, the execution path requires paying the asset ask in USD terms, then converting USD to local currency at the ask (the worse rate for the buyer). For a sell, the path is reversed using bids.

Example:

GOOGL/USD bid/ask:        180.00 / 180.10
USD/KRW executable:       1,379  / 1,384
                          
GOOGL/KRW virtual bid:    180.00 × 1,379 = 248,220 KRW
GOOGL/KRW virtual ask:    180.10 × 1,384 = 249,258 KRW
Virtual spread:           1,038 KRW (~0.42%)

Liquidation Pricing

For liquidation calculations, the protocol uses stressed FX rates that protect solvency:

stressed_fx_rate = fx_oracle_ask × (1 + stress_factor)
                 
Where stress_factor accounts for:
  - FX volatility buffer (typically 1-3%)
  - Size premium for large liquidations
  - Settlement uncertainty

The liquidation engine asks: "If we had to convert this user's KRW1 collateral to USDC now, at size, what USD value would we actually realize?" That conservative value is what matters for solvency.

For large liquidations exceeding $1M in local-currency value, the protocol requests a live RFQ at the actual seizure size rather than using the $1M mark rate. This ensures the liquidation pricing reflects real executable liquidity at the specific notional being converted.

Conservative Pricing by Purpose

PurposeFX Rate UsedDirection
Display, UI chartsBlended oracle markMid (clamped ±2%)
Collateral valuation$1M RFQ askAsk (weakens collateral value)
Liquidation triggersStressed ask × bufferAsk × (1 + stress)
Settlement (withdrawal)Live RFQ at actual sizeBid/ask per side

Order Routing and Limit Translation

When a user places a local-currency limit order (e.g., Buy GOOGL/KRW limit ₩250,000), the system translates the limit into a canonical USD price at placement time:

# Buy side: user pays local currency for USD exposure
canonical_limit_usd = local_limit / USD_local_execution_ask

# Sell side: user receives local currency from USD exposure
canonical_limit_usd = local_limit / USD_local_execution_bid

Origin uses dynamic FX-bound limits: the original local-currency limit price and FX reference rate are stored alongside the translated USD limit. If FX moves beyond max_fx_drift_bps while the order rests on the book, the order is cancelled by default (configurable to pause or reprice). This protects the user from having their KRW-denominated price intent silently become a different economic outcome after an FX move.

Funding

Funding remains canonical. A single GOOGL/USD funding rate applies regardless of the user's display currency. There are no separate funding rates for GOOGL/KRW, GOOGL/EUR, or GOOGL/JPY. This eliminates liquidity fragmentation and cross-currency funding arbitrage. Funding payments are denominated in USD and reflected in KRW only as a display conversion.

Market-Maker Model

Virtual cross-currency markets are powered by two specialized liquidity roles:

ParticipantProvides
Perp market makerQuotes on canonical Asset/USD books
FX liquidity providerQuotes on stablecoin FX pairs (e.g., USDC/KRW1) via StableFX
Origin virtual layerSynthesizes Asset/local-currency markets from both

Market makers do not need to quote every synthetic pair directly. A market maker quoting GOOGL/USD and an FX LP quoting USDC/KRW1 together enable GOOGL/KRW for users, without requiring any participant to hold or hedge cross-currency perp inventory.