use std::{thread::sleep, time::Duration};
use alloy::signers::local::PrivateKeySigner;
use hyperliquid_rust_sdk_toaster::{
BaseUrl, ClientCancelRequest, ClientLimit, ClientOrder, ClientOrderRequest, ExchangeClient,
ExchangeDataStatus, ExchangeResponseStatus,
};
use log::info;
#[tokio::main]
async fn main() {
env_logger::init();
let wallet: PrivateKeySigner =
"e908f86dbb4d55ac876378565aafeabc187f6690f046459397b17d9b9a19688e"
.parse()
.unwrap();
let exchange_client = ExchangeClient::new(None, wallet, Some(BaseUrl::Testnet), None, None, None)
.await
.unwrap();
let order = ClientOrderRequest {
asset: "XYZTWO/USDC".to_string(),
is_buy: true,
reduce_only: false,
limit_px: 0.00002378,
sz: 1000000.0,
cloid: None,
order_type: ClientOrder::Limit(ClientLimit {
tif: "Gtc".to_string(),
}),
};
let response = exchange_client.order(order, None).await.unwrap();
info!("Order placed: {response:?}");
let response = match response {
ExchangeResponseStatus::Ok(exchange_response) => exchange_response,
ExchangeResponseStatus::Err(e) => panic!("error with exchange response: {e}"),
};
let status = response.data.unwrap().statuses[0].clone();
let oid = match status {
ExchangeDataStatus::Filled(order) => order.oid,
ExchangeDataStatus::Resting(order) => order.oid,
_ => panic!("Error: {status:?}"),
};
sleep(Duration::from_secs(10));
let cancel = ClientCancelRequest {
asset: "HFUN/USDC".to_string(),
oid,
};
let response = exchange_client.cancel(cancel, None).await.unwrap();
info!("Order potentially cancelled: {response:?}");
}