listen_kit/
trade.rs

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}