Skip to main content

defituna_staking/implementation/
position.rs

1use crate::accounts::Position;
2use crate::{TunaStakingError as ErrorCode, REWARD_PER_SHARE_FRAC_BITS};
3
4impl Position {
5    pub fn get_current_unclaimed_reward(&self, acc_reward_per_share: u128) -> Result<u64, ErrorCode> {
6        let current_reward_debt: u64 = ((acc_reward_per_share * self.shares as u128) >> REWARD_PER_SHARE_FRAC_BITS)
7            .try_into()
8            .map_err(|_| ErrorCode::TypeCastOverflow)?;
9
10        let current_unclaimed_reward = self.unclaimed_reward + current_reward_debt.saturating_sub(self.reward_debt);
11        Ok(current_unclaimed_reward)
12    }
13}