7
7
helpers:: * ,
8
8
solana_program:: pubkey:: Pubkey ,
9
9
solana_program_test:: * ,
10
- solana_sdk:: signature:: Signer ,
10
+ solana_sdk:: signature:: { Keypair , Signer } ,
11
11
spl_stake_pool:: {
12
12
stake_program, state:: StakePool , MAX_VALIDATORS_TO_UPDATE , MINIMUM_ACTIVE_STAKE ,
13
13
} ,
@@ -21,24 +21,47 @@ async fn setup(
21
21
Vec < ValidatorStakeAccount > ,
22
22
u64 ,
23
23
u64 ,
24
+ u64 ,
24
25
) {
25
26
let mut context = program_test ( ) . start_with_context ( ) . await ;
26
27
let first_normal_slot = context. genesis_config ( ) . epoch_schedule . first_normal_slot ;
27
28
let slots_per_epoch = context. genesis_config ( ) . epoch_schedule . slots_per_epoch ;
28
29
let mut slot = first_normal_slot;
29
30
context. warp_to_slot ( slot) . unwrap ( ) ;
30
31
32
+ let reserve_stake_amount = TEST_STAKE_AMOUNT * num_validators as u64 ;
31
33
let stake_pool_accounts = StakePoolAccounts :: new ( ) ;
32
34
stake_pool_accounts
33
35
. initialize_stake_pool (
34
36
& mut context. banks_client ,
35
37
& context. payer ,
36
38
& context. last_blockhash ,
37
- TEST_STAKE_AMOUNT + 1 ,
39
+ reserve_stake_amount + 1 ,
38
40
)
39
41
. await
40
42
. unwrap ( ) ;
41
43
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
+
42
65
// Add several accounts with some stake
43
66
let mut stake_accounts: Vec < ValidatorStakeAccount > = vec ! [ ] ;
44
67
let mut deposit_accounts: Vec < DepositStakeAccount > = vec ! [ ] ;
@@ -141,6 +164,7 @@ async fn setup(
141
164
stake_pool_accounts,
142
165
stake_accounts,
143
166
TEST_STAKE_AMOUNT ,
167
+ reserve_stake_amount,
144
168
slot,
145
169
)
146
170
}
@@ -149,15 +173,21 @@ async fn setup(
149
173
#[ ignore]
150
174
async fn success ( ) {
151
175
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 ;
154
184
155
185
// Check current balance in the list
156
186
let rent = context. banks_client . get_rent ( ) . await . unwrap ( ) ;
157
187
let stake_rent = rent. minimum_balance ( std:: mem:: size_of :: < stake_program:: StakeState > ( ) ) ;
158
188
// initially, have all of the deposits plus their rent, and the reserve stake
159
189
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 ;
161
191
assert_eq ! (
162
192
get_validator_list_sum(
163
193
& mut context. banks_client,
@@ -211,7 +241,7 @@ async fn success() {
211
241
#[ tokio:: test]
212
242
#[ ignore]
213
243
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) =
215
245
setup ( MAX_VALIDATORS_TO_UPDATE ) . await ;
216
246
217
247
let pre_lamports = get_validator_list_sum (
@@ -322,7 +352,7 @@ async fn merge_into_reserve() {
322
352
#[ tokio:: test]
323
353
#[ ignore]
324
354
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) =
326
356
setup ( MAX_VALIDATORS_TO_UPDATE ) . await ;
327
357
328
358
let rent = context. banks_client . get_rent ( ) . await . unwrap ( ) ;
@@ -342,7 +372,7 @@ async fn merge_into_validator_stake() {
342
372
& context. last_blockhash ,
343
373
& stake_account. transient_stake_account ,
344
374
& stake_account. vote . pubkey ( ) ,
345
- lamports / stake_accounts. len ( ) as u64 ,
375
+ reserve_lamports / stake_accounts. len ( ) as u64 ,
346
376
)
347
377
. await ;
348
378
assert ! ( error. is_none( ) ) ;
@@ -437,7 +467,7 @@ async fn merge_into_validator_stake() {
437
467
// validator stake account minimum + deposited lamports + 2 rents + increased lamports
438
468
let expected_lamports = MINIMUM_ACTIVE_STAKE
439
469
+ lamports
440
- + lamports / stake_accounts. len ( ) as u64
470
+ + reserve_lamports / stake_accounts. len ( ) as u64
441
471
+ 2 * rent. minimum_balance ( std:: mem:: size_of :: < stake_program:: StakeState > ( ) ) ;
442
472
for stake_account in & stake_accounts {
443
473
let validator_stake =
0 commit comments