rig-onchain-kit 1.0.0

Blockchain actions for AI agents
Documentation
use crate::solana::jup::Jupiter;
use anyhow::{anyhow, Result};
use solana_sdk::pubkey::Pubkey;
use solana_sdk::transaction::Transaction;

pub async fn create_trade_transaction(
    input_mint: String,
    input_amount: u64,
    output_mint: String,
    slippage_bps: u16,
    owner: &Pubkey,
) -> Result<Transaction> {
    let quote = Jupiter::fetch_quote(
        &input_mint,
        &output_mint,
        input_amount,
        slippage_bps,
    )
    .await
    .map_err(|e| anyhow!("Failed to fetch quote: {}", e.to_string()))?;

    let tx = Jupiter::swap(quote, owner)
        .await
        .map_err(|e| anyhow!("Failed to swap: {}", e.to_string()))?;

    Ok(tx)
}

#[cfg(test)]
mod tests {
    use crate::solana::{constants, util::load_keypair_for_tests};

    use super::*;
    use solana_sdk::native_token::sol_to_lamports;
    use solana_sdk::signer::Signer;

    #[tokio::test]
    async fn test_trade() {
        let keypair = load_keypair_for_tests();
        let result = create_trade_transaction(
            constants::WSOL.to_string(),
            sol_to_lamports(0.001),
            "FUAfBo2jgks6gB4Z4LfZkqSZgzNucisEHqnNebaRxM1P".to_string(),
            300,
            &keypair.pubkey(),
        )
        .await;
        tracing::debug!("{:?}", result);

        assert!(result.is_ok());
    }
}