AArtery
On this page

Hyperliquid HIP-4

HIP-4 is the outcome-market surface Hyperliquid shipped to mainnet on 2026-05-02. Each market is a binary YES/NO contract that settles in USDH at $1 per winning share. HIP-4 markets are accounted on HyperCore (the order-book exchange), not on HyperEVM.

Warning

HIP-4 is not HIP-3. HIP-3 is continuous-price perpetuals (TSLA, FX, SP500). HIP-4 is the actual binary prediction-market product. Artery splits them into two registered providers — hyperliquid_perp covers main perps + HIP-3, hyperliquid_hip4 covers outcome markets only.

Asset-id encoding

Hyperliquid encodes everything in a single integer asset id. HIP-4 outcomes live in their own range:

RangeSurface
0..NMain perps (BTC, ETH, …)
10_000 + spotMeta.universe[i].indexSpot pairs
100_000 + dex_idx*10_000 + idx_in_dexHIP-3 perps (TSLA, FX, …)
100_000_000 + (10*outcome_id + side)HIP-4 outcomesside=0 NO, side=1 YES

Example: HIP-4 outcome 42, YES leg → asset id 100_000_421.

Endpoints

ArteryUpstream /info actionNotes
GET /v1/hyperliquid/hip4/outcome-metaoutcomeMetaList of all live outcome markets
POST /v1/hyperliquid/hip4/info(raw passthrough)Body forwarded verbatim — covers any new HIP-4 action without an Artery release

The raw passthrough exists because HIP-4's info actions are still being shipped — passthrough means new fields and new action types work the day upstream ships them.

Wire shape

bashcurl -sS https://api.artery.questflow.ai/v1/hyperliquid/hip4/outcome-meta \
  -H "Authorization: Bearer $TOKEN" | jq
json{
  "native": {
    "outcomes": [
      {
        "id": 42,
        "name": "BTC closes above $200k by 2026-12-31",
        "expiry": 1798761600000,
        "settlementToken": "USDH",
        "yesAssetId": 100000421,
        "noAssetId": 100000420,
        "status": "open"
      }
    ]
  },
  "meta": {
    "provider": "hyperliquid_hip4",
    "fetchedAt": "2026-05-08T12:00:00.000Z",
    "source": "live"
  }
}

Streaming

Same /v1/stream gateway as the rest of Hyperliquid. HIP-4 outcomes share the hyperliquid_perp channel namespace because they ride the same upstream WebSocket:

json{
  "type": "subscribe",
  "channels": ["artery:stream:hyperliquid_perp:100000421"]
}

Artery's stream worker pulls HL allMids once on bootstrap and fans out per-asset events; HIP-4 outcomes show up alongside main perps without extra setup. Use artery:stream:hyperliquid_perp:* to receive every update including all HIP-4 outcome markets.

Trading model (planned)

HIP-4 reuses the HL Core agent-trading model:

  1. User signs EIP-712 approveAgent with master wallet — one-time per agent
  2. Artery issues a unique short-lived agent (qf-<base36-ts>, max 16 chars)
  3. All order / cancel / modify actions sign with the agent — agent cannot withdraw funds

USDH balances live on HyperCore; HIP-4 markets settle into the user's HyperCore USDH balance. To bridge USDH off-platform, the user signs withdraw3 with the master wallet — Artery never holds withdrawal authority.

Note

Why Artery ships HIP-4 day one — HIP-4 launched 2026-05-02 and most aggregators are still working through HIP-3. By treating HIP-4 as a separate registered provider with raw passthrough on /info, we don't need to chase upstream schema changes.

See also

Edit this page on GitHubLast updated
Hyperliquid HIP-4 · Artery API Docs