Skip to content

Commit 53bea2b

Browse files
test: delegate claim rewards with zero rewards flows (#76)
1 parent 73c593a commit 53bea2b

File tree

2 files changed

+147
-4
lines changed

2 files changed

+147
-4
lines changed

src/flow_test/flow_ideas.md

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,6 @@
1919
## k=1 -> k=2 balances
2020
- delegator claim rewards when last change is in epoch + 2, then advance epochs and claim again to see no missing rewards
2121
- same as above, also when there is change in epoch + 1
22-
- delegate, advance epoch and get rewards for the pool, claim - zero rewards for the delegate
23-
- delegator claim after claim
24-
- delegator claim after claim when exists checkpoint with the current epoch of the first claim
25-
- member enter, in the same epoch or one epoch after claim (balance is zero).
2622

2723
## k=1 -> k=2 Migration Member
2824
- find sigma: Enter V0, change in V1, catch all ifs.

src/flow_test/test.cairo

Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3424,3 +3424,150 @@ fn delegate_increase_delegate_flow_test() {
34243424
system.advance_epoch();
34253425
assert!(system.delegator_claim_rewards(:delegator, :pool) == expected_pool_rewards);
34263426
}
3427+
3428+
/// Flow:
3429+
/// Delegate
3430+
/// update_rewards
3431+
/// Claim rewards - Zero rewards
3432+
/// Advance epoch
3433+
/// Claim rewards - Zero rewards
3434+
/// Advance epoch
3435+
/// Claim rewards - Zero rewards
3436+
#[test]
3437+
fn delegate_claim_rewards_same_epoch_flow_test() {
3438+
let cfg: StakingInitConfig = Default::default();
3439+
let mut system = SystemConfigTrait::basic_stake_flow_cfg(:cfg).deploy();
3440+
let min_stake = system.staking.get_min_stake();
3441+
let stake_amount = min_stake * 2;
3442+
let staker = system.new_staker(amount: stake_amount);
3443+
let commission = 200;
3444+
system.stake(:staker, amount: stake_amount, pool_enabled: true, :commission);
3445+
system.start_consensus_rewards();
3446+
let pool = system.staking.get_pool(:staker);
3447+
let delegator = system.new_delegator(amount: stake_amount);
3448+
system.delegate(:delegator, :pool, amount: stake_amount);
3449+
system.update_rewards(:staker, disable_rewards: false);
3450+
assert!(system.staker_claim_rewards(:staker).is_non_zero());
3451+
assert!(system.delegator_claim_rewards(:delegator, :pool).is_zero());
3452+
system.advance_epoch();
3453+
assert!(system.delegator_claim_rewards(:delegator, :pool).is_zero());
3454+
system.advance_epoch();
3455+
assert!(system.delegator_claim_rewards(:delegator, :pool).is_zero());
3456+
}
3457+
3458+
/// Flow:
3459+
/// Delegate
3460+
/// Advance epoch
3461+
/// update_rewards
3462+
/// Claim rewards - Zero rewards
3463+
/// Advance epoch
3464+
/// Claim rewards - Zero rewards
3465+
#[test]
3466+
fn delegate_claim_rewards_next_epoch_flow_test() {
3467+
let cfg: StakingInitConfig = Default::default();
3468+
let mut system = SystemConfigTrait::basic_stake_flow_cfg(:cfg).deploy();
3469+
let min_stake = system.staking.get_min_stake();
3470+
let stake_amount = min_stake * 2;
3471+
let staker = system.new_staker(amount: stake_amount);
3472+
let commission = 200;
3473+
system.stake(:staker, amount: stake_amount, pool_enabled: true, :commission);
3474+
system.start_consensus_rewards();
3475+
let pool = system.staking.get_pool(:staker);
3476+
let delegator = system.new_delegator(amount: stake_amount);
3477+
system.delegate(:delegator, :pool, amount: stake_amount);
3478+
system.advance_epoch();
3479+
system.update_rewards(:staker, disable_rewards: false);
3480+
assert!(system.staker_claim_rewards(:staker).is_non_zero());
3481+
assert!(system.delegator_claim_rewards(:delegator, :pool).is_zero());
3482+
system.advance_epoch();
3483+
assert!(system.delegator_claim_rewards(:delegator, :pool).is_zero());
3484+
}
3485+
3486+
/// Flow:
3487+
/// Delegate
3488+
/// Advance K epochs
3489+
/// update_rewards
3490+
/// Claim rewards - Zero
3491+
/// Advance epoch
3492+
/// Claim rewards - Non zero
3493+
/// Claim rewards - Zero
3494+
/// Update rewards
3495+
/// Advance block
3496+
/// Claim rewards - Zero
3497+
/// Advance epoch
3498+
/// Claim rewards - Non zero
3499+
#[test]
3500+
fn delegate_claim_after_claim_flow_test() {
3501+
let cfg: StakingInitConfig = Default::default();
3502+
let mut system = SystemConfigTrait::basic_stake_flow_cfg(:cfg).deploy();
3503+
let min_stake = system.staking.get_min_stake();
3504+
let stake_amount = min_stake * 2;
3505+
let staker = system.new_staker(amount: stake_amount);
3506+
let commission = 200;
3507+
system.stake(:staker, amount: stake_amount, pool_enabled: true, :commission);
3508+
system.start_consensus_rewards();
3509+
let pool = system.staking.get_pool(:staker);
3510+
let delegator = system.new_delegator(amount: stake_amount);
3511+
system.delegate(:delegator, :pool, amount: stake_amount);
3512+
system.advance_k_epochs();
3513+
system.update_rewards(:staker, disable_rewards: false);
3514+
assert!(system.staker_claim_rewards(:staker).is_non_zero());
3515+
assert!(system.delegator_claim_rewards(:delegator, :pool).is_zero());
3516+
system.advance_epoch();
3517+
assert!(system.delegator_claim_rewards(:delegator, :pool).is_non_zero());
3518+
assert!(system.delegator_claim_rewards(:delegator, :pool).is_zero());
3519+
system.update_rewards(:staker, disable_rewards: false);
3520+
advance_block_number_global(blocks: 1);
3521+
assert!(system.delegator_claim_rewards(:delegator, :pool).is_zero());
3522+
system.advance_epoch();
3523+
assert!(system.delegator_claim_rewards(:delegator, :pool).is_non_zero());
3524+
}
3525+
3526+
3527+
/// Flow:
3528+
/// Delegate
3529+
/// Advance K epochs
3530+
/// update_rewards
3531+
/// Claim rewards - Zero
3532+
/// Advance epoch
3533+
/// update_rewards
3534+
/// Advance block
3535+
/// update_rewards
3536+
/// Claim rewards - For prev epoch
3537+
/// Advance epoch
3538+
/// Claim rewards - For prev epoch
3539+
/// Advance epoch
3540+
/// Claim rewards - Zero
3541+
#[test]
3542+
fn delegate_claim_after_claim_with_rewards_flow_test() {
3543+
let cfg: StakingInitConfig = Default::default();
3544+
let mut system = SystemConfigTrait::basic_stake_flow_cfg(:cfg).deploy();
3545+
let min_stake = system.staking.get_min_stake();
3546+
let stake_amount = min_stake * 2;
3547+
let staker = system.new_staker(amount: stake_amount);
3548+
let commission = 200;
3549+
system.stake(:staker, amount: stake_amount, pool_enabled: true, :commission);
3550+
system.start_consensus_rewards();
3551+
let pool = system.staking.get_pool(:staker);
3552+
let delegator = system.new_delegator(amount: stake_amount);
3553+
system.delegate(:delegator, :pool, amount: stake_amount);
3554+
system.advance_k_epochs();
3555+
system.update_rewards(:staker, disable_rewards: false);
3556+
let (_, expected_rewards) = calculate_staker_strk_rewards_with_balances_v3(
3557+
amount_own: stake_amount,
3558+
pool_amount: stake_amount,
3559+
:commission,
3560+
staking_contract: system.staking.address,
3561+
minting_curve_contract: system.minting_curve.address,
3562+
);
3563+
assert!(system.delegator_claim_rewards(:delegator, :pool).is_zero());
3564+
system.advance_epoch();
3565+
system.update_rewards(:staker, disable_rewards: false);
3566+
advance_block_number_global(blocks: 1);
3567+
system.update_rewards(:staker, disable_rewards: false);
3568+
assert!(system.delegator_claim_rewards(:delegator, :pool) == expected_rewards);
3569+
system.advance_epoch();
3570+
assert!(system.delegator_claim_rewards(:delegator, :pool) == 2 * expected_rewards);
3571+
system.advance_epoch();
3572+
assert!(system.delegator_claim_rewards(:delegator, :pool).is_zero());
3573+
}

0 commit comments

Comments
 (0)