Skip to main content

Module hyperliquid

Module hyperliquid 

Source
Expand description

Hyperliquid ExecutionClient implementations for perpetual futures and spot trading.

Uses the official hyperliquid_rust_sdk crate for REST and WebSocket API access. Gated behind the “hyperliquid” feature flag.

§Modules

§Authentication

Hyperliquid uses EVM-based authentication (Ethereum private key + EIP-712 signatures) instead of traditional API key/secret. The SDK handles all signing internally.

§Architecture

  • REST (InfoClient): account_snapshot, fetch_balances, fetch_open_orders, fetch_trades
  • REST (ExchangeClient): open_order, cancel_order
  • WebSocket (InfoClient with with_reconnect): account_stream via UserFills + OrderUpdates subscriptions

§SDK Delegation Model

This client delegates connection management to the official hyperliquid_rust_sdk:

ResponsibilityImplementation
ReconnectionInfoClient::with_reconnect() handles WebSocket reconnection automatically
HeartbeatSDK manages WebSocket ping/pong internally
DeduplicationSDK-managed; no custom dedup cache needed
Fill recoveryNot implemented — use ExecutionClient::fetch_trades after reconnect if needed

Caller responsibilities:

  • If fill recovery is critical, monitor for reconnection events and call fetch_trades()
  • REST clients (InfoClient::new(), ExchangeClient::new()) do NOT auto-reconnect; only WebSocket streams via with_reconnect() do

§Conditional Orders (Stop, TakeProfit)

Hyperliquid supports conditional (trigger) orders via the ClientOrder::Trigger variant.

Supported order kinds:

  • Stop → market order triggered at stop price (tpsl: "sl", is_market: true)
  • StopLimit → limit order triggered at stop price (tpsl: "sl", is_market: false)
  • TakeProfit → market order triggered at take-profit price (tpsl: "tp", is_market: true)
  • TakeProfitLimit → limit order triggered at take-profit price (tpsl: "tp", is_market: false)

Unsupported: TrailingStop, TrailingStopLimit (Hyperliquid does not support trailing stops)

UUID requirement: Trigger orders MUST use ClientOrderId::uuid() for the client order ID. The SDK’s cancel_by_cloid() requires a valid UUID. Non-UUID client IDs will be rejected at order placement with a clear error message.

SDK limitations (hyperliquid_rust_sdk 0.6.x):

  • fetch_open_orders: Returns OpenOrdersResponse which lacks trigger fields (is_trigger, trigger_px). All orders appear as OrderKind::Limit.
  • account_stream (WebSocket): OrderUpdate uses BasicOrder which also lacks trigger fields. Downstream consumers should correlate orders by cloid and track OrderKind from the placement response.

§Limitations

  • Price precision: Hyperliquid requires 5 significant figures for prices

Modules§

common
Shared utilities for Hyperliquid execution clients (perps and spot).
config
Configuration for the Hyperliquid execution client.
error
Error mapping for Hyperliquid SDK errors to rustrade-execution error types.
spot
Hyperliquid spot trading ExecutionClient implementation.

Structs§

HyperliquidClient
Hyperliquid perpetual futures execution client.