diff --git a/programs/marinade-finance/src/lib.rs b/programs/marinade-finance/src/lib.rs index 62c056f3..a2600f87 100644 --- a/programs/marinade-finance/src/lib.rs +++ b/programs/marinade-finance/src/lib.rs @@ -317,6 +317,7 @@ pub struct Initialize<'info> { pub liq_pool: LiqPoolInitialize<'info>, + #[account(constraint = treasury_msol_account.mint == msol_mint.key())] pub treasury_msol_account: Box>, pub clock: Sysvar<'info, Clock>, @@ -380,9 +381,6 @@ pub struct AddLiquidity<'info> { /// CHECK: PDA pub lp_mint_authority: UncheckedAccount<'info>, - // msol_mint to be able to compute current msol value in liq_pool - // not needed because we use memorized value - // pub msol_mint: Account<'info, Mint>, // liq_pool_msol_leg to be able to compute current msol value in liq_pool pub liq_pool_msol_leg: Box>, @@ -395,7 +393,8 @@ pub struct AddLiquidity<'info> { #[account(owner = system_program::ID)] pub transfer_from: Signer<'info>, - #[account(mut)] + // user SPL-Token account to send the newly minted LP tokens + #[account(mut, constraint = mint_to.mint == state.liq_pool.lp_mint)] pub mint_to: Box>, pub system_program: Program<'info, System>, @@ -410,14 +409,14 @@ pub struct RemoveLiquidity<'info> { #[account(mut)] pub lp_mint: Box>, - #[account(mut)] + #[account(mut, constraint = burn_from.mint == state.liq_pool.lp_mint)] pub burn_from: Box>, pub burn_from_authority: Signer<'info>, #[account(mut)] pub transfer_sol_to: SystemAccount<'info>, - #[account(mut)] + #[account(mut, constraint = transfer_msol_to.mint == state.msol_mint)] pub transfer_msol_to: Box>, // legs @@ -455,7 +454,8 @@ pub struct Deposit<'info> { #[account(owner = system_program::ID)] pub transfer_from: Signer<'info>, - #[account(mut)] + /// user mSOL Token account to send the mSOL + #[account(mut, constraint = mint_to.mint == state.msol_mint)] pub mint_to: Box>, /// CHECK: PDA @@ -490,7 +490,8 @@ pub struct DepositStakeAccount<'info> { #[account(mut)] pub msol_mint: Account<'info, Mint>, - #[account(mut)] + /// user mSOL Token account to send the mSOL + #[account(mut, constraint = mint_to.mint == state.msol_mint)] pub mint_to: Box>, /// CHECK: PDA @@ -522,7 +523,7 @@ pub struct LiquidUnstake<'info> { #[account(mut)] pub treasury_msol_account: UncheckedAccount<'info>, - #[account(mut)] + #[account(mut, constraint = get_msol_from.mint == state.msol_mint)] pub get_msol_from: Box>, pub get_msol_from_authority: Signer<'info>, //burn_msol_from owner or delegate_authority @@ -599,7 +600,7 @@ pub struct OrderUnstake<'info> { pub msol_mint: Box>, // Note: Ticket beneficiary is burn_msol_from.owner - #[account(mut)] + #[account(mut, constraint = burn_msol_from.mint == state.msol_mint)] pub burn_msol_from: Box>, pub burn_msol_authority: Signer<'info>, // burn_msol_from acc must be pre-delegated with enough amount to this key or input owner signature here diff --git a/programs/marinade-finance/src/liq_pool/add_liquidity.rs b/programs/marinade-finance/src/liq_pool/add_liquidity.rs index 4e819992..f4a50a9e 100644 --- a/programs/marinade-finance/src/liq_pool/add_liquidity.rs +++ b/programs/marinade-finance/src/liq_pool/add_liquidity.rs @@ -20,11 +20,6 @@ impl<'info> AddLiquidity<'info> { Ok(()) } - fn check_mint_to(&self) -> Result<()> { - check_token_mint(&self.mint_to, self.state.liq_pool.lp_mint, "mint_to")?; - Ok(()) - } - // fn add_liquidity() pub fn process(&mut self, lamports: u64) -> Result<()> { msg!("add-liq pre check"); @@ -41,7 +36,6 @@ impl<'info> AddLiquidity<'info> { self.state .liq_pool .check_liquidity_cap(lamports, self.liq_pool_sol_leg_pda.lamports())?; - self.check_mint_to()?; check_address( self.system_program.key, &system_program::ID, diff --git a/programs/marinade-finance/src/liq_pool/remove_liquidity.rs b/programs/marinade-finance/src/liq_pool/remove_liquidity.rs index bdcc39de..6dcf9b63 100644 --- a/programs/marinade-finance/src/liq_pool/remove_liquidity.rs +++ b/programs/marinade-finance/src/liq_pool/remove_liquidity.rs @@ -1,6 +1,6 @@ use crate::{ calc::proportional, - checks::{check_address, check_min_amount, check_token_mint}, + checks::{check_address, check_min_amount}, liq_pool::LiqPoolHelpers, RemoveLiquidity, }; @@ -10,7 +10,6 @@ use anchor_spl::token::{burn, transfer, Burn, Transfer, spl_token}; impl<'info> RemoveLiquidity<'info> { fn check_burn_from(&self, tokens: u64) -> Result<()> { - check_token_mint(&self.burn_from, self.state.liq_pool.lp_mint, "burn_from")?; // if delegated, check delegated amount if *self.burn_from_authority.key == self.burn_from.owner { if self.burn_from.amount < tokens { @@ -46,22 +45,12 @@ impl<'info> RemoveLiquidity<'info> { Ok(()) } - fn check_transfer_msol_to(&self) -> Result<()> { - check_token_mint( - &self.transfer_msol_to, - self.state.msol_mint, - "transfer_msol_to", - )?; - Ok(()) - } - pub fn process(&mut self, tokens: u64) -> Result<()> { msg!("rem-liq pre check"); self.state .liq_pool .check_lp_mint(self.lp_mint.to_account_info().key)?; self.check_burn_from(tokens)?; - self.check_transfer_msol_to()?; self.state .liq_pool .check_liq_pool_msol_leg(self.liq_pool_msol_leg.to_account_info().key)?; diff --git a/programs/marinade-finance/src/stake_system/deposit_stake_account.rs b/programs/marinade-finance/src/stake_system/deposit_stake_account.rs index 8f4c0db2..73a5ac5e 100644 --- a/programs/marinade-finance/src/stake_system/deposit_stake_account.rs +++ b/programs/marinade-finance/src/stake_system/deposit_stake_account.rs @@ -11,7 +11,7 @@ use anchor_spl::token::{mint_to, MintTo, spl_token}; use crate::checks::check_owner_program; use crate::error::CommonError; use crate::{ - checks::{check_address, check_token_mint}, + checks::{check_address}, stake_system::StakeSystemHelpers, state::StateHelpers, DepositStakeAccount, ID, @@ -27,7 +27,6 @@ impl<'info> DepositStakeAccount<'info> { self.state.stake_system.check_stake_list(&self.stake_list)?; self.state .check_msol_mint_authority(self.msol_mint_authority.key)?; - check_token_mint(&self.mint_to, self.state.msol_mint, "mint_to")?; check_address( self.system_program.key, diff --git a/programs/marinade-finance/src/state/deposit.rs b/programs/marinade-finance/src/state/deposit.rs index 7e5d8a3c..eb95afb0 100644 --- a/programs/marinade-finance/src/state/deposit.rs +++ b/programs/marinade-finance/src/state/deposit.rs @@ -3,7 +3,7 @@ use anchor_lang::solana_program::{program::invoke, system_instruction, system_pr use anchor_spl::token::{mint_to, transfer, MintTo, Transfer, spl_token}; use crate::{ - checks::{check_address, check_min_amount, check_token_mint}, + checks::{check_address, check_min_amount}, liq_pool::LiqPoolHelpers, state::StateHelpers, Deposit, @@ -17,11 +17,6 @@ impl<'info> Deposit<'info> { Ok(()) } - fn check_mint_to(&self) -> Result<()> { - check_token_mint(&self.mint_to, self.state.msol_mint, "mint_to")?; - Ok(()) - } - // fn deposit_sol() pub fn process(&mut self, lamports: u64) -> Result<()> { check_min_amount(lamports, self.state.min_deposit, "deposit SOL")?; @@ -29,7 +24,6 @@ impl<'info> Deposit<'info> { .liq_pool .check_liq_pool_msol_leg(self.liq_pool_msol_leg.to_account_info().key)?; self.check_transfer_from(lamports)?; - self.check_mint_to()?; self.state .check_msol_mint_authority(self.msol_mint_authority.key)?; check_address( diff --git a/programs/marinade-finance/src/state/initialize.rs b/programs/marinade-finance/src/state/initialize.rs index 3b1aeadb..21c2d39b 100644 --- a/programs/marinade-finance/src/state/initialize.rs +++ b/programs/marinade-finance/src/state/initialize.rs @@ -1,7 +1,6 @@ use crate::{ checks::{ - check_address, check_freeze_authority, check_mint_authority, check_mint_empty, - check_token_mint, + check_address, check_freeze_authority, check_mint_authority, check_mint_empty }, stake_system::StakeSystem, validator_system::ValidatorSystem, @@ -61,15 +60,6 @@ impl<'info> Initialize<'info> { Ok(()) } - fn check_treasury_accounts(&self) -> Result<()> { - check_token_mint( - &self.treasury_msol_account, - *self.msol_mint.to_account_info().key, - "treasury_msol_account", - )?; - Ok(()) - } - pub fn process(&mut self, data: InitializeData) -> Result<()> { check_address( self.creator_authority.key, @@ -84,7 +74,6 @@ impl<'info> Initialize<'info> { self.check_state()?; self.check_reserve_pda()?; self.check_msol_mint()?; - self.check_treasury_accounts()?; self.state.msol_mint = *self.msol_mint.to_account_info().key; self.state.admin_authority = data.admin_authority; diff --git a/programs/marinade-finance/src/state/liquid_unstake.rs b/programs/marinade-finance/src/state/liquid_unstake.rs index 82b09736..2a689ad3 100644 --- a/programs/marinade-finance/src/state/liquid_unstake.rs +++ b/programs/marinade-finance/src/state/liquid_unstake.rs @@ -4,14 +4,13 @@ use anchor_spl::token::{transfer, Transfer, spl_token}; use crate::checks::check_min_amount; use crate::{ - checks::{check_address, check_token_mint}, + checks::{check_address}, liq_pool::LiqPoolHelpers, CommonError, LiquidUnstake, }; impl<'info> LiquidUnstake<'info> { fn check_get_msol_from(&self, msol_amount: u64) -> Result<()> { - check_token_mint(&self.get_msol_from, self.state.msol_mint, "get_msol_from")?; // if delegated, check delegated amount if *self.get_msol_from_authority.key == self.get_msol_from.owner { if self.get_msol_from.amount < msol_amount { diff --git a/programs/marinade-finance/src/state/order_unstake.rs b/programs/marinade-finance/src/state/order_unstake.rs index 2d36d2d1..ea818233 100644 --- a/programs/marinade-finance/src/state/order_unstake.rs +++ b/programs/marinade-finance/src/state/order_unstake.rs @@ -2,13 +2,12 @@ use anchor_lang::prelude::*; use anchor_spl::token::{burn, Burn, spl_token}; use crate::{ - checks::{check_address, check_min_amount, check_token_mint}, + checks::{check_address, check_min_amount}, OrderUnstake, }; impl<'info> OrderUnstake<'info> { fn check_burn_msol_from(&self, msol_amount: u64) -> Result<()> { - check_token_mint(&self.burn_msol_from, self.state.msol_mint, "burn_msol_from")?; if msol_amount == 0 { return Err(Error::from(ProgramError::InvalidAccountData).with_source(source!()));