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

Commit b55196c

Browse files
committed
Make stake integration tests aware of stake minimum delegation
1 parent 02cc056 commit b55196c

File tree

1 file changed

+38
-11
lines changed

1 file changed

+38
-11
lines changed

runtime/tests/stake.rs

Lines changed: 38 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -116,14 +116,20 @@ fn test_stake_create_and_split_single_signature() {
116116

117117
let staker_pubkey = staker_keypair.pubkey();
118118

119-
let bank_client = BankClient::new_shared(&Arc::new(Bank::new_for_tests(&genesis_config)));
119+
let bank = Arc::new(Bank::new_for_tests(&genesis_config));
120+
let bank_client = BankClient::new_shared(&bank);
120121

121122
let stake_address =
122123
Pubkey::create_with_seed(&staker_pubkey, "stake", &stake::program::id()).unwrap();
123124

124125
let authorized = Authorized::auto(&staker_pubkey);
125126

126-
let lamports = 1_000_000;
127+
let lamports = {
128+
let rent = &bank.rent_collector().rent;
129+
let rent_exempt_reserve = rent.minimum_balance(StakeState::size_of());
130+
let minimum_delegation = solana_stake_program::get_minimum_delegation(&bank.feature_set);
131+
2 * (rent_exempt_reserve + minimum_delegation)
132+
};
127133

128134
// Create stake account with seed
129135
let message = Message::new(
@@ -186,14 +192,20 @@ fn test_stake_create_and_split_to_existing_system_account() {
186192

187193
let staker_pubkey = staker_keypair.pubkey();
188194

189-
let bank_client = BankClient::new_shared(&Arc::new(Bank::new_for_tests(&genesis_config)));
195+
let bank = Arc::new(Bank::new_for_tests(&genesis_config));
196+
let bank_client = BankClient::new_shared(&bank);
190197

191198
let stake_address =
192199
Pubkey::create_with_seed(&staker_pubkey, "stake", &stake::program::id()).unwrap();
193200

194201
let authorized = Authorized::auto(&staker_pubkey);
195202

196-
let lamports = 1_000_000;
203+
let lamports = {
204+
let rent = &bank.rent_collector().rent;
205+
let rent_exempt_reserve = rent.minimum_balance(StakeState::size_of());
206+
let minimum_delegation = solana_stake_program::get_minimum_delegation(&bank.feature_set);
207+
2 * (rent_exempt_reserve + minimum_delegation)
208+
};
197209

198210
// Create stake account with seed
199211
let message = Message::new(
@@ -263,7 +275,7 @@ fn test_stake_account_lifetime() {
263275
} = create_genesis_config_with_leader(
264276
100_000_000_000,
265277
&solana_sdk::pubkey::new_rand(),
266-
1_000_000,
278+
2_000_000_000,
267279
);
268280
let bank = Bank::new_for_tests(&genesis_config);
269281
let mint_pubkey = mint_keypair.pubkey();
@@ -290,6 +302,14 @@ fn test_stake_account_lifetime() {
290302
.expect("failed to create vote account");
291303

292304
let authorized = Authorized::auto(&stake_pubkey);
305+
let minimum_delegation = {
306+
let rent = &bank.rent_collector().rent;
307+
let rent_exempt_reserve = rent.minimum_balance(StakeState::size_of());
308+
assert_eq!(rent_exempt_reserve, 0, "this test assumes rent is free");
309+
solana_stake_program::get_minimum_delegation(&bank.feature_set)
310+
};
311+
let starting_balance = 2 * minimum_delegation;
312+
293313
// Create stake account and delegate to vote account
294314
let message = Message::new(
295315
&stake_instruction::create_account_and_delegate_stake(
@@ -298,7 +318,7 @@ fn test_stake_account_lifetime() {
298318
&vote_pubkey,
299319
&authorized,
300320
&Lockup::default(),
301-
1_000_000,
321+
starting_balance,
302322
),
303323
Some(&mint_pubkey),
304324
);
@@ -310,7 +330,7 @@ fn test_stake_account_lifetime() {
310330
let account = bank.get_account(&stake_pubkey).expect("account not found");
311331
let stake_state = account.state().expect("couldn't unpack account data");
312332
if let StakeState::Stake(_meta, stake) = stake_state {
313-
assert_eq!(stake.delegation.stake, 1_000_000);
333+
assert_eq!(stake.delegation.stake, starting_balance);
314334
} else {
315335
panic!("wrong account type found")
316336
}
@@ -334,7 +354,7 @@ fn test_stake_account_lifetime() {
334354
let account = bank.get_account(&stake_pubkey).expect("account not found");
335355
let stake_state = account.state().expect("couldn't unpack account data");
336356
if let StakeState::Stake(_meta, stake) = stake_state {
337-
assert_eq!(stake.delegation.stake, 1_000_000);
357+
assert_eq!(stake.delegation.stake, starting_balance);
338358
} else {
339359
panic!("wrong account type found")
340360
}
@@ -372,7 +392,7 @@ fn test_stake_account_lifetime() {
372392
let staked = get_staked(&bank, &stake_pubkey);
373393
let lamports = bank.get_balance(&stake_pubkey);
374394
assert!(staked > pre_staked);
375-
assert!(lamports > 1_000_000);
395+
assert!(lamports > starting_balance);
376396

377397
// split the stake
378398
let split_stake_keypair = Keypair::new();
@@ -537,6 +557,13 @@ fn test_create_stake_account_from_seed() {
537557
.expect("failed to create vote account");
538558

539559
let authorized = Authorized::auto(&mint_pubkey);
560+
let (balance, delegation) = {
561+
let rent = &bank.rent_collector().rent;
562+
let rent_exempt_reserve = rent.minimum_balance(StakeState::size_of());
563+
let minimum_delegation = solana_stake_program::get_minimum_delegation(&bank.feature_set);
564+
(rent_exempt_reserve + minimum_delegation, minimum_delegation)
565+
};
566+
540567
// Create stake account and delegate to vote account
541568
let message = Message::new(
542569
&stake_instruction::create_account_with_seed_and_delegate_stake(
@@ -547,7 +574,7 @@ fn test_create_stake_account_from_seed() {
547574
&vote_pubkey,
548575
&authorized,
549576
&Lockup::default(),
550-
1_000_000,
577+
balance,
551578
),
552579
Some(&mint_pubkey),
553580
);
@@ -559,7 +586,7 @@ fn test_create_stake_account_from_seed() {
559586
let account = bank.get_account(&stake_pubkey).expect("account not found");
560587
let stake_state = account.state().expect("couldn't unpack account data");
561588
if let StakeState::Stake(_meta, stake) = stake_state {
562-
assert_eq!(stake.delegation.stake, 1_000_000);
589+
assert_eq!(stake.delegation.stake, delegation);
563590
} else {
564591
panic!("wrong account type found")
565592
}

0 commit comments

Comments
 (0)