This directory contains comprehensive examples demonstrating all major SDK features. Examples are organized by complexity and use case.
Most examples require a private key set via environment variable:
export PRIVATE_KEY="your_private_key_here"Or create a .env file in the project root:
PRIVATE_KEY=your_private_key_here# HyperCore examples
cargo run --example list-markets
cargo run --example send_order
cargo run --example websocket-user-events -- --user 0xYourAddress
# Morpho examples
cargo run --example morpho_highest_apy
# Uniswap examples
cargo run --example uniswap_pools_createdStart here if you're new to the SDK. These examples show read-only operations.
| Example | Description | Requires Key |
|---|---|---|
list-markets |
List all perpetual markets with details (leverage, tick size) | No |
list-tokens |
List all spot tokens with metadata | No |
list-hip3 |
Query HIP-3 DEXes and their perpetual markets | No |
websocket |
Subscribe to real-time trades, order books, and user events | No (read-only) |
websocket-user-events |
Subscribe to userEvents, TWAP streams, activeAssetData, and webData2 | No (read-only, requires user address) |
websocket-candles |
Subscribe to real-time candlestick (OHLCV) data for a market | No (read-only) |
vault_details |
Query vault details and performance metrics | No |
user_vault_equities |
Query a user's vault deposits | No |
user_role |
Query an address role (User, Vault, Agent, SubAccount) | No |
Try first: cargo run --example list-markets
These examples require a private key and perform state-changing operations.
| Example | Description | Requires Key |
|---|---|---|
send_order |
Place a single limit order on a perpetual market | Yes |
send_usd |
Send USDC from perpetual balance to another address | Yes |
transfer_to_evm |
Transfer assets from HyperCore to HyperEVM | Yes |
transfer_from_evm |
Transfer assets from HyperEVM to HyperCore | Yes |
transfer_to_perps |
Move assets from spot to perpetual balance | Yes |
transfer_to_spot |
Move assets from perpetual to spot balance | Yes |
vault_transfer |
Deposit or withdraw USDC from a vault | Yes |
subaccounts |
List subaccounts under a master account | No |
approve-agent |
Approve an API agent for your account | Yes |
Try next: cargo run --example send_order (after funding your testnet account)
These examples demonstrate advanced patterns for production systems.
| Example | Description | Requires Key |
|---|---|---|
multisig_order |
Place orders with multiple signers (vault/custody pattern) | Yes (multiple) |
multisig_send_usd |
Multi-sig USDC transfer | Yes (multiple) |
multisig_send_asset |
Multi-sig asset transfer between DEXes | Yes (multiple) |
multisig-approve-agent |
Approve an API agent for a multisig account | Yes (multiple) |
buy_and_transfer |
Complex flow: place order, wait for fill, transfer to EVM | Yes |
priority-fee-bid |
Bid on gossip priority Dutch auction for faster order execution | Yes |
Production pattern: See multisig_order for how institutional systems manage custody
Morpho is a lending protocol on HyperEVM. These examples show how to query lending rates and vault performance.
| Example | Description | Requires Key |
|---|---|---|
morpho_highest_apy |
Find vaults with highest APY for yield optimization | No |
morpho_supply_apy |
Query supply APY for specific markets | No |
morpho_borrow_apy |
Query borrow APY for specific markets | No |
morpho_vault_apy |
Get detailed vault APY breakdown | No |
morpho_vault_performance |
Analyze vault performance metrics over time | No |
morpho_create_market_events |
Subscribe to new Morpho market creation events | No |
Use case: Integrate these into lending aggregators or yield farming bots
cargo run --example morpho_highest_apyUniswap V3 integration for querying pools and tracking liquidity positions.
| Example | Description | Requires Key |
|---|---|---|
uniswap_pools_created |
Monitor new pool creation events | No |
uniswap_prjx_flows |
Track PRJX token flows and liquidity | No |
Use case: Market making bots, liquidity analytics, DEX aggregators
cargo run --example uniswap_pools_createdBTC: max leverage 50x, tick size 1, sz_decimals 5
ETH: max leverage 50x, tick size 0.1, sz_decimals 4
...
Trade: Buy @ 93231.0 size 0.5
Order book update for BTC: 50 bids, 50 asks
User fill: +0.1 BTC @ 93230.0
Vault: USDC Optimizer
Supply APY: 8.45%
Net APY: 8.23%
TVL: $1,234,567
All order prices must be rounded to valid tick sizes:
let client = hypercore::mainnet();
let markets = client.perps().await?;
let btc = markets.iter().find(|m| m.name == "BTC").unwrap();
// Round price to valid tick
let rounded = btc.round_price(dec!(93231.23)); // -> 93231See send_order.rs for complete example.
All examples use anyhow::Result for simple error propagation:
#[tokio::main]
async fn main() -> anyhow::Result<()> {
// Your code here
Ok(())
}The websocket.rs example shows basic subscription, but production systems should implement:
- Automatic reconnection with exponential backoff
- Subscription state management across reconnects
- Message deduplication
Set the PRIVATE_KEY environment variable or create a .env file.
Use market.round_price() to round prices to valid tick sizes before submitting orders.
Fund your testnet account at: https://app.hyperliquid-testnet.xyz/faucet
Ensure you're using the correct network (mainnet vs testnet). Check hypercore::mainnet() vs hypercore::testnet().
- Start with read-only examples (
list_markets,websocket) - Get testnet funds from the faucet
- Try a simple trade with
send_order - Explore advanced patterns like multi-sig and cross-chain transfers
- Build your bot using WebSocket subscriptions for real-time data
- Full API Documentation
- Hyperliquid Docs
- CLAUDE.md - Developer guide for working with this codebase
Found a bug in an example? Have a use case we don't cover? Open an issue or PR!