Skip to content

Commit e8d8780

Browse files
joncinqueHaoranYi
authored and
HaoranYi
committed
stake-pool: Remove lamport minimum for validator removal by staker (solana-labs#3999)
* stake-pool: Relax lamport minimum for validator removal by staker * Completely remove the lamport check
1 parent 76c0b71 commit e8d8780

File tree

2 files changed

+17
-39
lines changed

2 files changed

+17
-39
lines changed

stake-pool/program/src/processor.rs

+1-25
Original file line numberDiff line numberDiff line change
@@ -1167,7 +1167,7 @@ impl Processor {
11671167
return Err(StakePoolError::InvalidState.into());
11681168
}
11691169

1170-
let (meta, stake) = get_stake_state(stake_account_info)?;
1170+
let (_, stake) = get_stake_state(stake_account_info)?;
11711171
let vote_account_address = stake.delegation.voter_pubkey;
11721172
let maybe_validator_stake_info = validator_list.find_mut::<ValidatorStakeInfo, _>(|x| {
11731173
ValidatorStakeInfo::memcmp_pubkey(x, &vote_account_address)
@@ -1193,30 +1193,6 @@ impl Processor {
11931193
return Err(StakePoolError::ValidatorNotFound.into());
11941194
}
11951195

1196-
let stake_lamports = **stake_account_info.lamports.borrow();
1197-
let stake_minimum_delegation = stake::tools::get_minimum_delegation()?;
1198-
let required_lamports = minimum_stake_lamports(&meta, stake_minimum_delegation);
1199-
if stake_lamports > required_lamports {
1200-
msg!(
1201-
"Attempting to remove validator account with {} lamports, must have no more than {} lamports; \
1202-
reduce using DecreaseValidatorStake first",
1203-
stake_lamports,
1204-
required_lamports
1205-
);
1206-
return Err(StakePoolError::StakeLamportsNotEqualToMinimum.into());
1207-
}
1208-
1209-
let current_minimum_delegation = minimum_delegation(stake_minimum_delegation);
1210-
if stake.delegation.stake > current_minimum_delegation {
1211-
msg!(
1212-
"Error: attempting to remove stake with delegation of {} lamports, must have no more than {} lamports; \
1213-
reduce using DecreaseValidatorStake first",
1214-
stake.delegation.stake,
1215-
current_minimum_delegation
1216-
);
1217-
return Err(StakePoolError::StakeLamportsNotEqualToMinimum.into());
1218-
}
1219-
12201196
let new_status = if validator_stake_info.transient_stake_lamports > 0 {
12211197
check_transient_stake_address(
12221198
program_id,

stake-pool/program/tests/vsa_remove.rs

+16-14
Original file line numberDiff line numberDiff line change
@@ -212,18 +212,28 @@ async fn fail_with_wrong_validator_list_account() {
212212
}
213213

214214
#[tokio::test]
215-
async fn fail_not_at_minimum() {
215+
async fn success_at_large_value() {
216216
let (mut context, stake_pool_accounts, validator_stake) = setup().await;
217217

218-
transfer(
218+
let current_minimum_delegation = stake_pool_get_minimum_delegation(
219219
&mut context.banks_client,
220220
&context.payer,
221221
&context.last_blockhash,
222-
&validator_stake.stake_account,
223-
1_000_001,
224222
)
225223
.await;
226224

225+
let threshold_amount = current_minimum_delegation * 1_000;
226+
let _ = simple_deposit_stake(
227+
&mut context.banks_client,
228+
&context.payer,
229+
&context.last_blockhash,
230+
&stake_pool_accounts,
231+
&validator_stake,
232+
threshold_amount,
233+
)
234+
.await
235+
.unwrap();
236+
227237
let error = stake_pool_accounts
228238
.remove_validator_from_pool(
229239
&mut context.banks_client,
@@ -232,16 +242,8 @@ async fn fail_not_at_minimum() {
232242
&validator_stake.stake_account,
233243
&validator_stake.transient_stake_account,
234244
)
235-
.await
236-
.unwrap()
237-
.unwrap();
238-
assert_eq!(
239-
error,
240-
TransactionError::InstructionError(
241-
0,
242-
InstructionError::Custom(StakePoolError::StakeLamportsNotEqualToMinimum as u32)
243-
),
244-
);
245+
.await;
246+
assert!(error.is_none());
245247
}
246248

247249
#[tokio::test]

0 commit comments

Comments
 (0)