From 0786a6eab66091cc2cbcd5aa1de4eccb2999d0fd Mon Sep 17 00:00:00 2001 From: Jon Cinque Date: Wed, 9 Nov 2022 20:54:09 +0100 Subject: [PATCH] stake-pool: Add lamports check for transient stake account on decrease --- stake-pool/program/src/processor.rs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/stake-pool/program/src/processor.rs b/stake-pool/program/src/processor.rs index 77fdb2b44a1..15d011b6885 100644 --- a/stake-pool/program/src/processor.rs +++ b/stake-pool/program/src/processor.rs @@ -1214,11 +1214,14 @@ impl Processor { &[transient_stake_bump_seed], ]; + let stake_minimum_delegation = stake::tools::get_minimum_delegation()?; let stake_rent = rent.minimum_balance(std::mem::size_of::()); - if lamports <= stake_rent { + let current_minimum_lamports = + stake_rent.saturating_add(minimum_delegation(stake_minimum_delegation)); + if lamports < current_minimum_lamports { msg!( - "Need more than {} lamports for transient stake to be rent-exempt, {} provided", - stake_rent, + "Need at least {} lamports for transient stake meet minimum delegation and rent-exempt requirements, {} provided", + current_minimum_lamports, lamports ); return Err(ProgramError::AccountNotRentExempt); @@ -1228,7 +1231,6 @@ impl Processor { .lamports() .checked_sub(lamports) .ok_or(ProgramError::InsufficientFunds)?; - let stake_minimum_delegation = stake::tools::get_minimum_delegation()?; let required_lamports = minimum_stake_lamports(&meta, stake_minimum_delegation); if remaining_lamports < required_lamports { msg!("Need at least {} lamports in the stake account after decrease, {} requested, {} is the current possible maximum",