Skip to content
This repository was archived by the owner on Mar 11, 2025. It is now read-only.

Commit 804a61e

Browse files
authored
stake-pool: Increase lower limit for increase-validator-stake (#1620)
* stake-pool: Increase lower limit for increase-validator-stake * Update test amounts in line with limit
1 parent 3613ffe commit 804a61e

File tree

4 files changed

+46
-15
lines changed

4 files changed

+46
-15
lines changed

stake-pool/program/src/processor.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1003,10 +1003,11 @@ impl Processor {
10031003
let mut validator_list_entry = maybe_validator_list_entry.unwrap();
10041004

10051005
let stake_rent = rent.minimum_balance(std::mem::size_of::<stake_program::StakeState>());
1006-
if lamports <= stake_rent {
1006+
let minimum_lamports = MINIMUM_ACTIVE_STAKE + stake_rent;
1007+
if lamports < minimum_lamports {
10071008
msg!(
1008-
"Need more than {} lamports for transient stake to be rent-exempt, {} provided",
1009-
stake_rent,
1009+
"Need more than {} lamports for transient stake to be rent-exempt and mergeable, {} provided",
1010+
minimum_lamports,
10101011
lamports
10111012
);
10121013
return Err(ProgramError::AccountNotRentExempt);

stake-pool/program/tests/helpers/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ use {
2323
},
2424
};
2525

26-
pub const TEST_STAKE_AMOUNT: u64 = 100_000_000;
26+
pub const TEST_STAKE_AMOUNT: u64 = 1_500_000_000;
2727
pub const MAX_TEST_VALIDATORS: u32 = 10_000;
2828

2929
pub fn program_test() -> ProgramTest {

stake-pool/program/tests/update_validator_list_balance.rs

Lines changed: 39 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use {
77
helpers::*,
88
solana_program::pubkey::Pubkey,
99
solana_program_test::*,
10-
solana_sdk::signature::Signer,
10+
solana_sdk::signature::{Keypair, Signer},
1111
spl_stake_pool::{
1212
stake_program, state::StakePool, MAX_VALIDATORS_TO_UPDATE, MINIMUM_ACTIVE_STAKE,
1313
},
@@ -21,24 +21,47 @@ async fn setup(
2121
Vec<ValidatorStakeAccount>,
2222
u64,
2323
u64,
24+
u64,
2425
) {
2526
let mut context = program_test().start_with_context().await;
2627
let first_normal_slot = context.genesis_config().epoch_schedule.first_normal_slot;
2728
let slots_per_epoch = context.genesis_config().epoch_schedule.slots_per_epoch;
2829
let mut slot = first_normal_slot;
2930
context.warp_to_slot(slot).unwrap();
3031

32+
let reserve_stake_amount = TEST_STAKE_AMOUNT * num_validators as u64;
3133
let stake_pool_accounts = StakePoolAccounts::new();
3234
stake_pool_accounts
3335
.initialize_stake_pool(
3436
&mut context.banks_client,
3537
&context.payer,
3638
&context.last_blockhash,
37-
TEST_STAKE_AMOUNT + 1,
39+
reserve_stake_amount + 1,
3840
)
3941
.await
4042
.unwrap();
4143

44+
// so warmups / cooldowns go faster
45+
let validator = Keypair::new();
46+
let vote = Keypair::new();
47+
create_vote(
48+
&mut context.banks_client,
49+
&context.payer,
50+
&context.last_blockhash,
51+
&validator,
52+
&vote,
53+
)
54+
.await;
55+
let deposit_account =
56+
DepositStakeAccount::new_with_vote(vote.pubkey(), validator.pubkey(), 100_000_000_000);
57+
deposit_account
58+
.create_and_delegate(
59+
&mut context.banks_client,
60+
&context.payer,
61+
&context.last_blockhash,
62+
)
63+
.await;
64+
4265
// Add several accounts with some stake
4366
let mut stake_accounts: Vec<ValidatorStakeAccount> = vec![];
4467
let mut deposit_accounts: Vec<DepositStakeAccount> = vec![];
@@ -141,6 +164,7 @@ async fn setup(
141164
stake_pool_accounts,
142165
stake_accounts,
143166
TEST_STAKE_AMOUNT,
167+
reserve_stake_amount,
144168
slot,
145169
)
146170
}
@@ -149,15 +173,21 @@ async fn setup(
149173
#[ignore]
150174
async fn success() {
151175
let num_validators = 5;
152-
let (mut context, stake_pool_accounts, stake_accounts, _, mut slot) =
153-
setup(num_validators).await;
176+
let (
177+
mut context,
178+
stake_pool_accounts,
179+
stake_accounts,
180+
validator_lamports,
181+
reserve_lamports,
182+
mut slot,
183+
) = setup(num_validators).await;
154184

155185
// Check current balance in the list
156186
let rent = context.banks_client.get_rent().await.unwrap();
157187
let stake_rent = rent.minimum_balance(std::mem::size_of::<stake_program::StakeState>());
158188
// initially, have all of the deposits plus their rent, and the reserve stake
159189
let initial_lamports =
160-
(TEST_STAKE_AMOUNT + stake_rent) * num_validators as u64 + TEST_STAKE_AMOUNT;
190+
(validator_lamports + stake_rent) * num_validators as u64 + reserve_lamports;
161191
assert_eq!(
162192
get_validator_list_sum(
163193
&mut context.banks_client,
@@ -211,7 +241,7 @@ async fn success() {
211241
#[tokio::test]
212242
#[ignore]
213243
async fn merge_into_reserve() {
214-
let (mut context, stake_pool_accounts, stake_accounts, lamports, mut slot) =
244+
let (mut context, stake_pool_accounts, stake_accounts, lamports, _, mut slot) =
215245
setup(MAX_VALIDATORS_TO_UPDATE).await;
216246

217247
let pre_lamports = get_validator_list_sum(
@@ -322,7 +352,7 @@ async fn merge_into_reserve() {
322352
#[tokio::test]
323353
#[ignore]
324354
async fn merge_into_validator_stake() {
325-
let (mut context, stake_pool_accounts, stake_accounts, lamports, mut slot) =
355+
let (mut context, stake_pool_accounts, stake_accounts, lamports, reserve_lamports, mut slot) =
326356
setup(MAX_VALIDATORS_TO_UPDATE).await;
327357

328358
let rent = context.banks_client.get_rent().await.unwrap();
@@ -342,7 +372,7 @@ async fn merge_into_validator_stake() {
342372
&context.last_blockhash,
343373
&stake_account.transient_stake_account,
344374
&stake_account.vote.pubkey(),
345-
lamports / stake_accounts.len() as u64,
375+
reserve_lamports / stake_accounts.len() as u64,
346376
)
347377
.await;
348378
assert!(error.is_none());
@@ -437,7 +467,7 @@ async fn merge_into_validator_stake() {
437467
// validator stake account minimum + deposited lamports + 2 rents + increased lamports
438468
let expected_lamports = MINIMUM_ACTIVE_STAKE
439469
+ lamports
440-
+ lamports / stake_accounts.len() as u64
470+
+ reserve_lamports / stake_accounts.len() as u64
441471
+ 2 * rent.minimum_balance(std::mem::size_of::<stake_program::StakeState>());
442472
for stake_account in &stake_accounts {
443473
let validator_stake =

stake-pool/program/tests/vsa_remove.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ async fn setup() -> (
3434
let (mut banks_client, payer, recent_blockhash) = program_test().start().await;
3535
let stake_pool_accounts = StakePoolAccounts::new();
3636
stake_pool_accounts
37-
.initialize_stake_pool(&mut banks_client, &payer, &recent_blockhash, 10_000_000)
37+
.initialize_stake_pool(&mut banks_client, &payer, &recent_blockhash, 10_000_000_000)
3838
.await
3939
.unwrap();
4040

@@ -392,7 +392,7 @@ async fn fail_with_activating_transient_stake() {
392392
&recent_blockhash,
393393
&user_stake.transient_stake_account,
394394
&user_stake.vote.pubkey(),
395-
5_000_000,
395+
2_000_000_000,
396396
)
397397
.await;
398398
assert!(error.is_none());

0 commit comments

Comments
 (0)