lb_clmm 0.1.1

Created with Anchor
Documentation
use super::add_liquidity::ModifyLiquidity;
use crate::constants::BASIS_POINT_MAX;
use crate::{errors::LBError, math::safe_math::SafeMath, state::position::PositionV2};
use anchor_lang::prelude::*;
use ruint::aliases::U256;
#[derive(AnchorSerialize, AnchorDeserialize, Debug, Clone)]
pub struct BinLiquidityReduction {
    pub bin_id: i32,
    pub bps_to_remove: u16,
}

pub fn calculate_shares_to_remove(bps: u16, bin_id: i32, position: &PositionV2) -> Result<u128> {
    let share_in_bin = U256::from(position.get_liquidity_share_in_bin(bin_id)?);

    let share_to_remove: u128 = U256::from(bps)
        .safe_mul(share_in_bin)?
        .safe_div(U256::from(BASIS_POINT_MAX))?
        .try_into()
        .map_err(|_| LBError::TypeCastFailed)?;
    Ok(share_to_remove)
}

pub fn handle<'a, 'b, 'c, 'info>(
    ctx: Context<'a, 'b, 'c, 'info, ModifyLiquidity<'info>>,
    bin_liquidity_reduction: Vec<BinLiquidityReduction>,
) -> Result<()> {
    Ok(())
}