Skip to content

Commit cbdcf11

Browse files
authored
program: depend on v3 interface (#308)
1 parent 8b5dd8d commit cbdcf11

7 files changed

Lines changed: 62 additions & 17 deletions

File tree

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

program/Cargo.toml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ solana-program-error = "3.0.1"
2020
solana-pubkey = "4.2.0"
2121
solana-rent = "3.0.0"
2222
solana-security-txt = "1.1.2"
23-
solana-stake-interface = { version = "2", features = ["bincode", "borsh", "sysvar"] }
23+
solana-stake-interface = { path = "../interface", version = "3.1.0", features = ["bincode", "borsh", "sysvar"] }
2424
solana-sysvar = "3.0.0"
2525
solana-sysvar-id = "3.1.0"
2626
solana-vote-interface = { version = "5.0.0", features = ["bincode"] }
@@ -45,6 +45,9 @@ solana-pubkey = { version = "4.2.0", features = ["rand"] }
4545
solana-sdk-ids = "3.1.0"
4646
solana-signature = "3.4.0"
4747
solana-signer = "3.0.0"
48+
# TODO: Remove after agave/mollusk/stake-program depend on aligned StakeHistory version
49+
# Either solana-stake-interface v3 or new solana-stake-history crate
50+
solana-stake-interface-v2 = { package = "solana-stake-interface", version = "2.0.1" }
4851
solana-svm-log-collector = "3.0.0"
4952
solana-system-interface = { version = "2.0.0", features = ["bincode"] }
5053
solana-transaction = "3.0.2"

program/src/helpers/merge.rs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -307,13 +307,15 @@ mod tests {
307307
);
308308

309309
let mismatched_rent_exempt_reserve_ok = Meta {
310+
#[allow(deprecated)]
310311
rent_exempt_reserve: 42,
311312
..Meta::default()
312313
};
313-
assert_ne!(
314-
mismatched_rent_exempt_reserve_ok.rent_exempt_reserve,
315-
Meta::default().rent_exempt_reserve,
316-
);
314+
#[allow(deprecated)]
315+
let mismatched_rent_exempt_reserve = mismatched_rent_exempt_reserve_ok.rent_exempt_reserve;
316+
#[allow(deprecated)]
317+
let default_rent_exempt_reserve = Meta::default().rent_exempt_reserve;
318+
assert_ne!(mismatched_rent_exempt_reserve, default_rent_exempt_reserve,);
317319
assert!(MergeKind::metas_can_merge(
318320
&Meta::default(),
319321
&mismatched_rent_exempt_reserve_ok,
@@ -428,6 +430,7 @@ mod tests {
428430
let new_rate_activation_epoch = Some(0);
429431

430432
let meta = Meta {
433+
#[allow(deprecated)]
431434
rent_exempt_reserve,
432435
..Meta::auto(&authority_pubkey)
433436
};
@@ -658,6 +661,7 @@ mod tests {
658661
let activating_stake = 4242;
659662
let inactive_total_lamports = 424242;
660663
let meta = Meta {
664+
#[allow(deprecated)]
661665
rent_exempt_reserve,
662666
..Meta::default()
663667
};
@@ -742,6 +746,7 @@ mod tests {
742746
let credits_a = 124_521_000u64;
743747
let rent_exempt_reserve = 227_000_000u64;
744748
let meta = Meta {
749+
#[allow(deprecated)]
745750
rent_exempt_reserve,
746751
..Meta::default()
747752
};
@@ -858,6 +863,7 @@ mod tests {
858863
let credits_b = 100_000_000u64;
859864
let rent_exempt_reserve = 227_000_000u64;
860865
let meta = Meta {
866+
#[allow(deprecated)]
861867
rent_exempt_reserve,
862868
..Meta::default()
863869
};

program/src/processor.rs

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ fn do_initialize(
147147
let stake_state = StakeStateV2::Initialized(Meta {
148148
authorized,
149149
lockup,
150+
#[allow(deprecated)]
150151
rent_exempt_reserve: PSEUDO_RENT_EXEMPT_RESERVE,
151152
});
152153

@@ -544,8 +545,11 @@ impl Processor {
544545
let is_active_or_activating =
545546
source_status.effective > 0 || source_status.activating > 0;
546547

547-
let mut dest_meta = source_meta;
548-
dest_meta.rent_exempt_reserve = PSEUDO_RENT_EXEMPT_RESERVE;
548+
let dest_meta = Meta {
549+
#[allow(deprecated)]
550+
rent_exempt_reserve: PSEUDO_RENT_EXEMPT_RESERVE,
551+
..source_meta
552+
};
549553

550554
(is_active_or_activating, Some(dest_meta))
551555
}
@@ -555,8 +559,11 @@ impl Processor {
555559
.check(&signers, StakeAuthorize::Staker)
556560
.map_err(to_program_error)?;
557561

558-
let mut dest_meta = source_meta;
559-
dest_meta.rent_exempt_reserve = PSEUDO_RENT_EXEMPT_RESERVE;
562+
let dest_meta = Meta {
563+
#[allow(deprecated)]
564+
rent_exempt_reserve: PSEUDO_RENT_EXEMPT_RESERVE,
565+
..source_meta
566+
};
560567

561568
(false, Some(dest_meta))
562569
}

program/tests/interface.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,13 @@ use {
1616
solana_stake_interface::{
1717
instruction::{self, LockupArgs},
1818
stake_flags::StakeFlags,
19-
stake_history::{StakeHistory, StakeHistoryEntry},
19+
stake_history::StakeHistory,
2020
state::{
2121
warmup_cooldown_rate, Authorized, Delegation, Lockup, Meta, Stake, StakeAuthorize,
2222
StakeStateV2, NEW_WARMUP_COOLDOWN_RATE,
2323
},
2424
},
25+
solana_stake_interface_v2::stake_history::StakeHistoryEntry as MolluskStakeHistoryEntry,
2526
solana_stake_program::{get_minimum_delegation, id},
2627
solana_svm_log_collector::LogCollector,
2728
solana_sysvar_id::SysvarId,
@@ -166,7 +167,7 @@ impl Env {
166167
for epoch in 0..EXECUTION_EPOCH {
167168
mollusk.sysvars.stake_history.add(
168169
epoch,
169-
StakeHistoryEntry {
170+
MolluskStakeHistoryEntry {
170171
effective: PERSISTENT_ACTIVE_STAKE,
171172
activating: stake_delta_amount,
172173
deactivating: stake_delta_amount,
@@ -943,6 +944,7 @@ fn fully_configurable_stake(
943944
};
944945

945946
let meta = Meta {
947+
#[allow(deprecated)]
946948
rent_exempt_reserve: PSEUDO_RENT_EXEMPT_RESERVE,
947949
authorized,
948950
lockup,
@@ -1232,7 +1234,9 @@ fn test_all_success_non_default_rent(lamports_per_byte_year: u64) {
12321234

12331235
match account.deserialize_data::<StakeStateV2>().unwrap() {
12341236
StakeStateV2::Initialized(meta) | StakeStateV2::Stake(meta, _, _) => {
1235-
assert_eq!(meta.rent_exempt_reserve, PSEUDO_RENT_EXEMPT_RESERVE)
1237+
#[allow(deprecated)]
1238+
let rent_exempt_reserve = meta.rent_exempt_reserve;
1239+
assert_eq!(rent_exempt_reserve, PSEUDO_RENT_EXEMPT_RESERVE)
12361240
}
12371241
StakeStateV2::Uninitialized => (),
12381242
StakeStateV2::RewardsPool => unreachable!(),

program/tests/program_test.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -527,6 +527,7 @@ async fn program_test_stake_initialize() {
527527
stake_state,
528528
StakeStateV2::Initialized(Meta {
529529
authorized,
530+
#[allow(deprecated)]
530531
rent_exempt_reserve,
531532
lockup,
532533
}),

program/tests/stake_instruction.rs

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1098,6 +1098,7 @@ fn test_stake_initialize() {
10981098
from(&accounts[0]).unwrap(),
10991099
StakeStateV2::Initialized(Meta {
11001100
authorized: Authorized::auto(&stake_address),
1101+
#[allow(deprecated)]
11011102
rent_exempt_reserve,
11021103
lockup,
11031104
}),
@@ -2031,6 +2032,7 @@ fn test_redelegate_consider_balance_changes() {
20312032
let stake_account = AccountSharedData::new_data_with_space(
20322033
stake_lamports,
20332034
&StakeStateV2::Initialized(Meta {
2035+
#[allow(deprecated)]
20342036
rent_exempt_reserve,
20352037
..Meta::auto(&authority_address)
20362038
}),
@@ -2270,6 +2272,7 @@ fn test_split() {
22702272
];
22712273

22722274
let meta = Meta {
2275+
#[allow(deprecated)]
22732276
rent_exempt_reserve: default_stake_rent(),
22742277
..Meta::auto(&stake_address)
22752278
};
@@ -2620,6 +2623,7 @@ fn test_withdraw_stake() {
26202623
let stake_account = AccountSharedData::new_data_with_space(
26212624
1_000_000_000,
26222625
&StakeStateV2::Initialized(Meta {
2626+
#[allow(deprecated)]
26232627
rent_exempt_reserve,
26242628
authorized: Authorized {
26252629
staker: authority_address,
@@ -2930,6 +2934,7 @@ fn test_withdraw_rent_exempt() {
29302934
let stake_account = AccountSharedData::new_data_with_space(
29312935
stake_lamports + rent_exempt_reserve,
29322936
&StakeStateV2::Initialized(Meta {
2937+
#[allow(deprecated)]
29332938
rent_exempt_reserve,
29342939
..Meta::auto(&stake_address)
29352940
}),
@@ -3491,6 +3496,7 @@ fn test_delegate_minimum_stake_delegation() {
34913496
let rent_exempt_reserve = rent.minimum_balance(StakeStateV2::size_of());
34923497
let stake_address = solana_pubkey::new_rand();
34933498
let meta = Meta {
3499+
#[allow(deprecated)]
34943500
rent_exempt_reserve,
34953501
..Meta::auto(&stake_address)
34963502
};
@@ -3598,6 +3604,7 @@ fn test_split_minimum_stake_delegation() {
35983604
};
35993605
let source_address = Pubkey::new_unique();
36003606
let source_meta = Meta {
3607+
#[allow(deprecated)]
36013608
rent_exempt_reserve,
36023609
..Meta::auto(&source_address)
36033610
};
@@ -3708,6 +3715,7 @@ fn test_split_full_amount_minimum_stake_delegation() {
37083715
};
37093716
let source_address = Pubkey::new_unique();
37103717
let source_meta = Meta {
3718+
#[allow(deprecated)]
37113719
rent_exempt_reserve,
37123720
..Meta::auto(&source_address)
37133721
};
@@ -3844,6 +3852,7 @@ fn test_initialized_split_destination_minimum_balance() {
38443852
// balance meets all the requirements
38453853
let source_balance = rent_exempt_reserve + split_amount;
38463854
let source_meta = Meta {
3855+
#[allow(deprecated)]
38473856
rent_exempt_reserve,
38483857
..Meta::auto(&source_address)
38493858
};
@@ -3987,6 +3996,7 @@ fn test_staked_split_destination_minimum_balance() {
39873996
// balance meets all the requirements
39883997
let source_balance = rent_exempt_reserve + minimum_delegation + split_amount;
39893998
let source_meta = Meta {
3999+
#[allow(deprecated)]
39904000
rent_exempt_reserve,
39914001
..Meta::auto(&source_address)
39924002
};
@@ -4067,6 +4077,7 @@ fn test_withdraw_minimum_stake_delegation() {
40674077
let rent_exempt_reserve = default_stake_rent();
40684078
let stake_address = solana_pubkey::new_rand();
40694079
let meta = Meta {
4080+
#[allow(deprecated)]
40704081
rent_exempt_reserve,
40714082
..Meta::auto(&stake_address)
40724083
};
@@ -4903,6 +4914,7 @@ fn test_split_more_than_staked() {
49034914
stake_lamports,
49044915
&just_stake(
49054916
Meta {
4917+
#[allow(deprecated)]
49064918
rent_exempt_reserve,
49074919
..Meta::auto(&stake_address)
49084920
},
@@ -4998,6 +5010,7 @@ fn test_split_with_rent() {
49985010
];
49995011
let meta = Meta {
50005012
authorized: Authorized::auto(&stake_address),
5013+
#[allow(deprecated)]
50015014
rent_exempt_reserve,
50025015
..Meta::default()
50035016
};
@@ -5111,6 +5124,7 @@ fn test_split_to_account_with_rent_exempt_reserve() {
51115124
let stake_address = solana_pubkey::new_rand();
51125125
let meta = Meta {
51135126
authorized: Authorized::auto(&stake_address),
5127+
#[allow(deprecated)]
51145128
rent_exempt_reserve,
51155129
..Meta::default()
51165130
};
@@ -5286,6 +5300,7 @@ fn test_split_from_larger_sized_account() {
52865300
let stake_address = solana_pubkey::new_rand();
52875301
let meta = Meta {
52885302
authorized: Authorized::auto(&stake_address),
5303+
#[allow(deprecated)]
52895304
rent_exempt_reserve: source_larger_rent_exempt_reserve,
52905305
..Meta::default()
52915306
};
@@ -5394,6 +5409,7 @@ fn test_split_from_larger_sized_account() {
53945409
if let StakeStateV2::Stake(meta, stake, stake_flags) = state {
53955410
let expected_split_meta = Meta {
53965411
authorized: Authorized::auto(&stake_address),
5412+
#[allow(deprecated)]
53975413
rent_exempt_reserve: split_rent_exempt_reserve,
53985414
..Meta::default()
53995415
};
@@ -5451,6 +5467,7 @@ fn test_split_from_smaller_sized_account() {
54515467
let stake_address = solana_pubkey::new_rand();
54525468
let meta = Meta {
54535469
authorized: Authorized::auto(&stake_address),
5470+
#[allow(deprecated)]
54545471
rent_exempt_reserve: source_smaller_rent_exempt_reserve,
54555472
..Meta::default()
54565473
};
@@ -5549,6 +5566,7 @@ fn test_split_100_percent_of_source() {
55495566
let stake_address = solana_pubkey::new_rand();
55505567
let meta = Meta {
55515568
authorized: Authorized::auto(&stake_address),
5569+
#[allow(deprecated)]
55525570
rent_exempt_reserve,
55535571
..Meta::default()
55545572
};
@@ -5669,6 +5687,7 @@ fn test_split_100_percent_of_source_to_account_with_lamports() {
56695687
let stake_address = solana_pubkey::new_rand();
56705688
let meta = Meta {
56715689
authorized: Authorized::auto(&stake_address),
5690+
#[allow(deprecated)]
56725691
rent_exempt_reserve,
56735692
..Meta::default()
56745693
};
@@ -5790,6 +5809,7 @@ fn test_split_rent_exemptness() {
57905809
let stake_address = solana_pubkey::new_rand();
57915810
let meta = Meta {
57925811
authorized: Authorized::auto(&stake_address),
5812+
#[allow(deprecated)]
57935813
rent_exempt_reserve: source_rent_exempt_reserve,
57945814
..Meta::default()
57955815
};
@@ -5904,6 +5924,7 @@ fn test_split_rent_exemptness() {
59045924

59055925
let expected_split_meta = Meta {
59065926
authorized: Authorized::auto(&stake_address),
5927+
#[allow(deprecated)]
59075928
rent_exempt_reserve: split_rent_exempt_reserve,
59085929
..Meta::default()
59095930
};
@@ -5963,6 +5984,7 @@ fn test_split_require_rent_exempt_destination() {
59635984
let destination_address = Pubkey::new_unique();
59645985
let meta = Meta {
59655986
authorized: Authorized::auto(&source_address),
5987+
#[allow(deprecated)]
59665988
rent_exempt_reserve,
59675989
..Meta::default()
59685990
};
@@ -6246,14 +6268,14 @@ fn test_merge() {
62466268
assert_eq!(accounts[0].state(), Ok(StakeStateV2::Initialized(*meta)),);
62476269
}
62486270
StakeStateV2::Stake(meta, stake, stake_flags) => {
6271+
#[allow(deprecated)]
6272+
let merge_from_rent_exempt_reserve =
6273+
merge_from_state.meta().unwrap().rent_exempt_reserve;
62496274
let expected_stake = stake.delegation.stake
62506275
+ merge_from_state
62516276
.stake()
62526277
.map(|stake| stake.delegation.stake)
6253-
.unwrap_or_else(|| {
6254-
stake_lamports
6255-
- merge_from_state.meta().unwrap().rent_exempt_reserve
6256-
});
6278+
.unwrap_or(stake_lamports - merge_from_rent_exempt_reserve);
62576279
assert_eq!(
62586280
accounts[0].state(),
62596281
Ok(StakeStateV2::Stake(
@@ -6287,6 +6309,7 @@ fn test_merge_self_fails() {
62876309
let stake_amount = 4242424242;
62886310
let stake_lamports = rent_exempt_reserve + stake_amount;
62896311
let meta = Meta {
6312+
#[allow(deprecated)]
62906313
rent_exempt_reserve,
62916314
..Meta::auto(&authorized_address)
62926315
};
@@ -6626,6 +6649,7 @@ fn test_merge_active_stake() {
66266649
let merge_from_amount = base_lamports;
66276650
let merge_from_lamports = rent_exempt_reserve + merge_from_amount;
66286651
let meta = Meta {
6652+
#[allow(deprecated)]
66296653
rent_exempt_reserve,
66306654
..Meta::auto(&authorized_address)
66316655
};

0 commit comments

Comments
 (0)