use aspens::commands::config;
use aspens::commands::trading::{balance, deposit, send_order, withdraw};
use aspens::{AspensClient, AsyncExecutor, BlockingExecutor, Wallet};
use eyre::Result;
fn main() -> Result<()> {
let executor = BlockingExecutor::new();
let client = AspensClient::builder().build()?;
let stack_url = client.stack_url().to_string();
let privkey = client
.get_env("TRADER_PRIVKEY")
.expect("TRADER_PRIVKEY must be set in .env")
.clone();
let cfg = executor.execute(config::get_config(stack_url.clone()))?;
println!("Connected to {}", stack_url);
let cfg_clone = cfg.clone();
let pk = privkey.clone();
executor.execute(async move {
let wallet = Wallet::from_evm_hex(&pk)?;
let wallets: [&Wallet; 1] = [&wallet];
balance::balance_from_config_with_wallets(cfg_clone, &wallets).await
})?;
let cfg_clone = cfg.clone();
let pk = privkey.clone();
executor.execute(async move {
let wallet = Wallet::from_evm_hex(&pk)?;
deposit::call_deposit_from_config_with_wallet(
"anvil-1".into(),
"USDC".into(),
1000,
&wallet,
cfg_clone,
)
.await
})?;
println!("Deposit successful");
let market_id = "your-market-id"; let cfg_clone = cfg.clone();
let stack_url_clone = stack_url.clone();
let pk = privkey.clone();
let result = executor.execute(async move {
let wallet = Wallet::from_evm_hex(&pk)?;
send_order::send_order_with_wallet(
stack_url_clone,
market_id.into(),
1, "1.5".into(), Some("100.50".into()), &wallet,
cfg_clone,
false, )
.await
})?;
println!("Order placed (order_id: {})", result.order_id);
executor.execute(async move {
let wallet = Wallet::from_evm_hex(&privkey)?;
withdraw::call_withdraw_from_config_with_wallet(
"anvil-1".into(),
"USDC".into(),
500,
&wallet,
cfg,
)
.await
})?;
println!("Withdrawal successful");
Ok(())
}