@@ -3366,3 +3366,61 @@ fn staker_multiple_pools_multiple_delegators_flow_test() {
33663366 assert! (system . token. balance_of (account : strk_pool ) < 10 );
33673367 assert! (system . token. balance_of (account : btc_pool ) < 10 );
33683368}
3369+
3370+ /// Flow:
3371+ /// Delegate
3372+ /// Advance epoch
3373+ /// Increase delegate
3374+ /// Advance epoch
3375+ /// Attest
3376+ /// Advance epoch
3377+ /// Claim rewards - only for the first delegation
3378+ /// Attest
3379+ /// Advance epoch
3380+ /// Claim rewards - for all
3381+ #[test]
3382+ fn delegate_increase_delegate_flow_test () {
3383+ let cfg : StakingInitConfig = Default :: default ();
3384+ let mut system = SystemConfigTrait :: basic_stake_flow_cfg (: cfg ). deploy ();
3385+ let staking_contract = system . staking. address;
3386+ let minting_curve_contract = system . minting_curve. address;
3387+ let stake_amount = system . staking. get_min_stake ();
3388+ let staker = system . new_staker (amount : stake_amount );
3389+ let commission = 200 ;
3390+ system . stake (: staker , amount : stake_amount , pool_enabled : true , : commission );
3391+ system . advance_k_epochs ();
3392+ let pool = system . staking. get_pool (: staker );
3393+ let delegator = system . new_delegator (amount : 2 * stake_amount );
3394+ system . delegate (: delegator , : pool , amount : stake_amount );
3395+ system . advance_epoch ();
3396+ system . increase_delegate (: delegator , : pool , amount : stake_amount );
3397+ system . advance_epoch ();
3398+ system . advance_block_custom_and_attest (: staker , stake : 2 * stake_amount );
3399+ let (expected_staker_rewards , expected_pool_rewards ) =
3400+ calculate_staker_strk_rewards_with_balances_v2 (
3401+ amount_own : stake_amount ,
3402+ pool_amount : stake_amount ,
3403+ : commission ,
3404+ : staking_contract ,
3405+ : minting_curve_contract ,
3406+ );
3407+ assert! (expected_staker_rewards . is_non_zero ());
3408+ assert! (expected_pool_rewards . is_non_zero ());
3409+ assert! (system . staker_claim_rewards (: staker ) == expected_staker_rewards );
3410+ system . advance_epoch ();
3411+ assert! (system . delegator_claim_rewards (: delegator , : pool ) == expected_pool_rewards );
3412+ system . advance_block_custom_and_attest (: staker , stake : 3 * stake_amount );
3413+ let (expected_staker_rewards , expected_pool_rewards ) =
3414+ calculate_staker_strk_rewards_with_balances_v2 (
3415+ amount_own : stake_amount ,
3416+ pool_amount : 2 * stake_amount ,
3417+ : commission ,
3418+ : staking_contract ,
3419+ : minting_curve_contract ,
3420+ );
3421+ assert! (expected_staker_rewards . is_non_zero ());
3422+ assert! (expected_pool_rewards . is_non_zero ());
3423+ assert! (system . staker_claim_rewards (: staker ) == expected_staker_rewards );
3424+ system . advance_epoch ();
3425+ assert! (system . delegator_claim_rewards (: delegator , : pool ) == expected_pool_rewards );
3426+ }
0 commit comments