1use crate::jup::Jupiter;
2use solana_sdk::signature::Keypair;
3use std::error::Error;
4
5pub async fn trade(
6 input_mint: String,
7 input_amount: u64,
8 output_mint: String,
9 slippage_bps: u16,
10 keypair: &Keypair,
11) -> Result<String, Box<dyn Error>> {
12 let quote = Jupiter::fetch_quote(
13 &input_mint,
14 &output_mint,
15 input_amount,
16 slippage_bps,
17 )
18 .await?;
19
20 let result = Jupiter::swap(quote, keypair).await?;
21
22 Ok(result)
23}
24
25#[cfg(test)]
26mod tests {
27 use crate::constants;
28 use crate::util::load_keypair_for_tests;
29
30 use super::*;
31 use solana_sdk::native_token::sol_to_lamports;
32
33 #[tokio::test]
34 async fn test_trade() {
35 let keypair = load_keypair_for_tests();
36 let result = trade(
37 constants::WSOL.to_string(),
38 sol_to_lamports(0.0001),
39 "Cn5Ne1vmR9ctMGY9z5NC71A3NYFvopjXNyxYtfVYpump".to_string(),
40 100,
41 &keypair,
42 )
43 .await;
44
45 assert!(result.is_ok());
46 }
47}