hyperqit 0.1.9

rust sdk for interacting with hyperliquid
Documentation
use serde::{Deserialize, Serialize};

use crate::SignedMessageHex;

#[derive(Deserialize, Serialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
pub struct OrderRequest {
    #[serde(rename = "a", alias = "asset")]
    pub asset: u32,
    #[serde(rename = "b", alias = "isBuy")]
    pub is_buy: bool,
    #[serde(rename = "p", alias = "limitPx")]
    pub limit_px: String,
    #[serde(rename = "s", alias = "sz")]
    pub sz: String,
    #[serde(rename = "r", alias = "reduceOnly", default)]
    pub reduce_only: bool,
    #[serde(rename = "t", alias = "orderType")]
    pub order_type: OrderType,
    #[serde(rename = "c", alias = "cloid", skip_serializing_if = "Option::is_none")]
    pub cloid: Option<String>,
}

#[derive(Deserialize, Serialize, Clone, Debug)]
pub struct Limit {
    pub tif: String,
}

#[derive(Deserialize, Serialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
pub enum OrderType {
    Limit(Limit),
}

#[derive(Deserialize, Serialize, Debug, Clone)]
pub struct TransferRequest {
    #[serde(rename = "signatureChainId")]
    pub sig_chain_id: String,
    #[serde(rename = "hyperliquidChain")]
    pub chain: String,
    #[serde(rename = "amount")]
    pub amount: String,
    #[serde(rename = "toPerp")]
    pub to_perp: bool,
    #[serde(rename = "nonce")]
    pub nonce: u64,
}

#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(tag = "type")]
#[serde(rename_all = "camelCase")]
pub enum Actions {
    Order(BulkOrder),
    UsdClassTransfer(TransferRequest),
    UsdSend(UsdSendRequest),
    Cancel(BulkCancel),
    UpdateLeverage(UpdateLeverage),
    PerpDeploy(PerpDeployAction),
    SendAsset(SendAssetRequest),
    ConvertToMultiSigUser(ConvertToMultiSigUserRequest),
    MultiSig(MultiSigRequest),
    UserDexAbstraction(UpdateDexAbstraction),
}

#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
pub struct UpdateDexAbstraction {
    #[serde(rename = "signatureChainId")]
    pub sig_chain_id: String,
    #[serde(rename = "hyperliquidChain")]
    pub chain: String,
    pub user: String,
    pub enabled: bool,
    pub nonce: u64,
}

#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
pub struct BulkOrder {
    pub orders: Vec<OrderRequest>,
    pub grouping: String,
}

#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
pub struct BulkCancel {
    pub cancels: Vec<CancelOrder>,
}

#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
pub struct CancelOrder {
    #[serde(rename = "a", alias = "asset")]
    pub asset: u32,
    #[serde(rename = "o", alias = "oid")]
    pub oid: i64,
}

#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
pub struct UpdateLeverage {
    pub asset: u32,
    pub is_cross: bool,
    pub leverage: u32,
}

#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
pub struct PerpDexSchemaInput {
    pub full_name: String,
    pub collateral_token: u64,
    pub oracle_updater: Option<String>,
}

#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
pub struct RegisterAssetRequest {
    pub coin: String,
    pub sz_decimals: u64,
    pub oracle_px: String,
    pub margin_table_id: u64,
    pub only_isolated: bool,
}

#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
pub struct RegisterAsset {
    pub max_gas: Option<u64>,
    pub asset_request: RegisterAssetRequest,
    pub dex: String,
    pub schema: Option<PerpDexSchemaInput>,
}

#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
pub enum PerpDeployAction {
    RegisterAsset(RegisterAsset),
    SetFundingMultipliers(Vec<[String; 2]>),
    SetOracle(SetOracle),
    HaltTrading(HaltTrading),
    SetMarginTableIds(Vec<(String, u64)>),
    InsertMarginTable(InsertMarginTable),
    SetOpenInterestCaps(Vec<(String, u64)>),
}

#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
pub struct SetOracle {
    pub dex: String,
    pub oracle_pxs: Vec<[String; 2]>,
    pub mark_pxs: Vec<Vec<[String; 2]>>,
    pub external_perp_pxs: Vec<[String; 2]>,
}

#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
pub struct HaltTrading {
    pub coin: String,
    pub is_halted: bool,
}

#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
pub struct InsertMarginTable {
    pub dex: String,
    pub margin_table: RawMarginTable,
}

#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
pub struct RawMarginTable {
    pub description: String,
    pub margin_tiers: Vec<RawMarginTier>,
}

#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
pub struct RawMarginTier {
    pub lower_bound: u64,
    pub max_leverage: u64,
}

#[derive(Deserialize, Serialize, Debug, Clone)]
pub struct SendAssetRequest {
    #[serde(rename = "signatureChainId")]
    pub sig_chain_id: String,
    #[serde(rename = "hyperliquidChain")]
    pub chain: String,
    #[serde(rename = "destination")]
    pub destination: String,
    #[serde(rename = "sourceDex")]
    pub source_dex: String,
    #[serde(rename = "destinationDex")]
    pub dst_dex: String,
    #[serde(rename = "token")]
    pub token: String,
    #[serde(rename = "amount")]
    pub amount: String,
    #[serde(rename = "fromSubAccount")]
    pub from_sub_account: String,
    #[serde(rename = "nonce")]
    pub nonce: u64,
}

#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
pub struct ConvertToMultiSigUserRequest {
    #[serde(rename = "signatureChainId")]
    pub sig_chain_id: String,
    #[serde(rename = "hyperliquidChain")]
    pub chain: String,
    pub signers: String,
    pub nonce: u64,
}

#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
pub struct MultiSigConfig {
    pub authorized_users: Vec<String>,
    pub threshold: u64,
}

#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
pub struct UsdSendRequest {
    #[serde(rename = "signatureChainId")]
    pub sig_chain_id: String,
    #[serde(rename = "hyperliquidChain")]
    pub chain: String,
    pub destination: String,
    pub amount: String,
    pub time: u64,
}

#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
pub struct MultiSigRequest {
    #[serde(rename = "signatureChainId")]
    pub sig_chain_id: String,
    pub signatures: Vec<SignedMessageHex>,
    pub payload: MultiSigPayload,
}

#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
pub struct MultiSigPayload {
    pub multi_sig_user: String,
    pub outer_signer: String,
    pub action: Box<Actions>,
}