solana-trading-sdk 1.0.6

A Rust SDK for trading on Solana
Documentation
pub fn amm_buy_get_sol_in(sol_reserve: u64, token_reserve: u64, token_out: u64) -> u64 {
    if token_out == 0 || sol_reserve == 0 || token_reserve == 0 || token_out >= token_reserve {
        return 0;
    }

    let sol_reserve = sol_reserve as u128;
    let token_reserve = token_reserve as u128;
    let token_in = token_out as u128;
    let numerator = sol_reserve.checked_mul(token_in).unwrap();
    let denominator = token_reserve.checked_sub(token_in).unwrap();
    let sol_out = numerator.checked_div(denominator).unwrap();

    sol_out as u64
}

pub fn amm_buy_get_token_out(sol_reserve: u64, token_reserve: u64, sol_in: u64) -> u64 {
    if sol_in == 0 || sol_reserve == 0 || token_reserve == 0 {
        return 0;
    }

    let invariant = sol_reserve as u128 * token_reserve as u128;
    let new_sol_reserve = sol_reserve as u128 + sol_in as u128;

    let new_token_reserve = invariant / new_sol_reserve;
    let token_out = token_reserve as u128 - new_token_reserve;

    token_out as u64
}

pub fn amm_sell_get_sol_out(sol_reserve: u64, token_reserve: u64, token_in: u64) -> u64 {
    if token_in == 0 || sol_reserve == 0 || token_reserve == 0 {
        return 0;
    }

    let sol_reserve = sol_reserve as u128;
    let token_reserve = token_reserve as u128;
    let token_in = token_in as u128;
    let numerator = sol_reserve.checked_mul(token_in).unwrap();
    let denominator = token_reserve.checked_add(token_in).unwrap();
    let sol_out = numerator.checked_div(denominator).unwrap();

    sol_out as u64
}

pub fn calculate_with_slippage_buy(amount: u64, basis_points: u64) -> u64 {
    amount + (amount * basis_points) / 10000
}

pub fn calculate_with_slippage_sell(amount: u64, basis_points: u64) -> u64 {
    amount - (amount * basis_points) / 10000
}