@@ -3854,3 +3854,77 @@ fn update_rewards_delegator_rewards_same_epoch_flow_test() {
38543854 let delegator_rewards = system . delegator_claim_rewards (: delegator , : pool );
38553855 assert! (delegator_rewards == expected_single_block_delegator_rewards * 4 );
38563856}
3857+
3858+ /// Flow:
3859+ /// Staker stake.
3860+ /// Advance K epochs
3861+ /// Attest - aggregate rewards
3862+ /// Increase stake
3863+ /// Advance K epochs
3864+ /// Attest - aggregate rewards
3865+ /// Start consensus rewards
3866+ /// Increase stake
3867+ /// Advance K epochs
3868+ /// update_rewards - aggregate rewards
3869+ /// Increase stake
3870+ /// Advance K epochs
3871+ /// update_rewards - aggregate rewards
3872+ /// Test rewards.
3873+ #[test]
3874+ fn update_rewards_transition_with_balance_change_flow_test () {
3875+ let cfg : StakingInitConfig = Default :: default ();
3876+ let mut system = SystemConfigTrait :: basic_stake_flow_cfg (: cfg ). deploy ();
3877+ let stake_amount = system . staking. get_min_stake ();
3878+ let staker = system . new_staker (amount : stake_amount * 4 );
3879+ let commission = 200 ;
3880+ let staking_contract = system . staking. address;
3881+ let minting_curve_contract = system . minting_curve. address;
3882+ let mut total_stake = Zero :: zero ();
3883+ let mut expected_total_rewards = Zero :: zero ();
3884+
3885+ system . stake (: staker , amount : stake_amount , pool_enabled : false , : commission );
3886+ total_stake += stake_amount ;
3887+ system . advance_k_epochs_and_attest (: staker );
3888+ let (expected_rewards , _ ) = calculate_staker_strk_rewards_with_balances_v2 (
3889+ amount_own : total_stake ,
3890+ pool_amount : Zero :: zero (),
3891+ : commission ,
3892+ : staking_contract ,
3893+ : minting_curve_contract ,
3894+ );
3895+ expected_total_rewards += expected_rewards ;
3896+
3897+ system . increase_stake (: staker , amount : stake_amount );
3898+ total_stake += stake_amount ;
3899+ system . advance_k_epochs_and_attest (: staker );
3900+ let (expected_rewards , _ ) = calculate_staker_strk_rewards_with_balances_v2 (
3901+ amount_own : total_stake ,
3902+ pool_amount : Zero :: zero (),
3903+ : commission ,
3904+ : staking_contract ,
3905+ : minting_curve_contract ,
3906+ );
3907+ expected_total_rewards += expected_rewards ;
3908+
3909+ system . start_consensus_rewards ();
3910+ system . increase_stake (: staker , amount : stake_amount );
3911+ total_stake += stake_amount ;
3912+ system . advance_k_epochs ();
3913+ system . update_rewards (: staker , disable_rewards : false );
3914+ let (expected_rewards , _ ) = calculate_staker_strk_rewards_with_balances_v3 (
3915+ amount_own : total_stake , pool_amount : Zero :: zero (), : commission , : minting_curve_contract ,
3916+ );
3917+ expected_total_rewards += expected_rewards ;
3918+
3919+ system . increase_stake (: staker , amount : stake_amount );
3920+ total_stake += stake_amount ;
3921+ system . advance_k_epochs ();
3922+ system . update_rewards (: staker , disable_rewards : false );
3923+ let (expected_rewards , _ ) = calculate_staker_strk_rewards_with_balances_v3 (
3924+ amount_own : total_stake , pool_amount : Zero :: zero (), : commission , : minting_curve_contract ,
3925+ );
3926+ expected_total_rewards += expected_rewards ;
3927+
3928+ let staker_rewards = system . staker_claim_rewards (: staker );
3929+ assert! (staker_rewards == expected_total_rewards );
3930+ }
0 commit comments