performance optimization
This commit is contained in:
@@ -9,7 +9,8 @@
|
||||
/// * fee_basis_points = 10 -> 0.1% fee
|
||||
/// * fee_basis_points = 25 -> 0.25% fee (common exchange rate)
|
||||
/// * fee_basis_points = 100 -> 1% fee
|
||||
pub fn compute_fee(amount: u128, fee_basis_points: u128) -> u128 {
|
||||
#[inline(always)]
|
||||
pub const fn compute_fee(amount: u128, fee_basis_points: u128) -> u128 {
|
||||
ceil_div(amount * fee_basis_points, 10_000)
|
||||
}
|
||||
|
||||
@@ -22,7 +23,8 @@ pub fn compute_fee(amount: u128, fee_basis_points: u128) -> u128 {
|
||||
///
|
||||
/// # Returns
|
||||
/// Returns the ceiling result of a/b
|
||||
pub fn ceil_div(a: u128, b: u128) -> u128 {
|
||||
#[inline(always)]
|
||||
pub const fn ceil_div(a: u128, b: u128) -> u128 {
|
||||
(a + b - 1) / b
|
||||
}
|
||||
|
||||
@@ -35,10 +37,11 @@ pub fn ceil_div(a: u128, b: u128) -> u128 {
|
||||
///
|
||||
/// # Examples
|
||||
/// * basis_points = 1 -> 0.01% slippage
|
||||
/// * basis_points = 10 -> 0.1% slippage
|
||||
/// * basis_points = 10 -> 0.1% slippage
|
||||
/// * basis_points = 100 -> 1% slippage
|
||||
/// * basis_points = 500 -> 5% slippage
|
||||
pub fn calculate_with_slippage_buy(amount: u64, basis_points: u64) -> u64 {
|
||||
#[inline(always)]
|
||||
pub const fn calculate_with_slippage_buy(amount: u64, basis_points: u64) -> u64 {
|
||||
amount + (amount * basis_points / 10000)
|
||||
}
|
||||
|
||||
@@ -51,10 +54,11 @@ pub fn calculate_with_slippage_buy(amount: u64, basis_points: u64) -> u64 {
|
||||
///
|
||||
/// # Examples
|
||||
/// * basis_points = 1 -> 0.01% slippage
|
||||
/// * basis_points = 10 -> 0.1% slippage
|
||||
/// * basis_points = 10 -> 0.1% slippage
|
||||
/// * basis_points = 100 -> 1% slippage
|
||||
/// * basis_points = 500 -> 5% slippage
|
||||
pub fn calculate_with_slippage_sell(amount: u64, basis_points: u64) -> u64 {
|
||||
#[inline(always)]
|
||||
pub const fn calculate_with_slippage_sell(amount: u64, basis_points: u64) -> u64 {
|
||||
if amount <= basis_points / 10000 {
|
||||
1
|
||||
} else {
|
||||
|
||||
@@ -17,6 +17,7 @@ use crate::{
|
||||
///
|
||||
/// # Returns
|
||||
/// The amount of tokens that will be received (in token's smallest unit)
|
||||
#[inline]
|
||||
pub fn get_buy_token_amount_from_sol_amount(
|
||||
virtual_token_reserves: u128,
|
||||
virtual_sol_reserves: u128,
|
||||
@@ -74,6 +75,7 @@ pub fn get_buy_token_amount_from_sol_amount(
|
||||
///
|
||||
/// # Returns
|
||||
/// The amount of SOL that will be received after fees (in lamports)
|
||||
#[inline]
|
||||
pub fn get_sell_sol_amount_from_token_amount(
|
||||
virtual_token_reserves: u128,
|
||||
virtual_sol_reserves: u128,
|
||||
|
||||
@@ -10,6 +10,7 @@ use crate::instruction::utils::raydium_cpmm::accounts::{
|
||||
///
|
||||
/// # Returns
|
||||
/// The calculated trading fee
|
||||
#[inline(always)]
|
||||
fn compute_trading_fee(amount: u64, fee_rate: u64) -> u64 {
|
||||
let numerator = (amount as u128) * (fee_rate as u128);
|
||||
((numerator + FEE_RATE_DENOMINATOR_VALUE - 1) / FEE_RATE_DENOMINATOR_VALUE) as u64
|
||||
@@ -23,6 +24,7 @@ fn compute_trading_fee(amount: u64, fee_rate: u64) -> u64 {
|
||||
///
|
||||
/// # Returns
|
||||
/// The calculated protocol or fund fee
|
||||
#[inline(always)]
|
||||
fn compute_protocol_fund_fee(amount: u64, fee_rate: u64) -> u64 {
|
||||
let numerator = (amount as u128) * (fee_rate as u128);
|
||||
(numerator / FEE_RATE_DENOMINATOR_VALUE) as u64
|
||||
@@ -36,6 +38,7 @@ fn compute_protocol_fund_fee(amount: u64, fee_rate: u64) -> u64 {
|
||||
///
|
||||
/// # Returns
|
||||
/// The calculated creator fee
|
||||
#[inline(always)]
|
||||
fn compute_creator_fee_new(amount: u64, fee_rate: u64) -> u64 {
|
||||
let numerator = (amount as u128) * (fee_rate as u128);
|
||||
((numerator + FEE_RATE_DENOMINATOR_VALUE - 1) / FEE_RATE_DENOMINATOR_VALUE) as u64
|
||||
@@ -93,6 +96,7 @@ pub struct SwapResult {
|
||||
///
|
||||
/// # Returns
|
||||
/// A `SwapResult` containing all swap calculations and fees
|
||||
#[inline]
|
||||
fn swap_base_input(
|
||||
input_amount: u64,
|
||||
input_vault_amount: u64,
|
||||
@@ -155,6 +159,7 @@ fn swap_base_input(
|
||||
///
|
||||
/// # Returns
|
||||
/// A `ComputeSwapParams` struct containing all computed swap parameters
|
||||
#[inline]
|
||||
pub fn compute_swap_amount(
|
||||
base_reserve: u64,
|
||||
quote_reserve: u64,
|
||||
|
||||
Reference in New Issue
Block a user