Skip to content

Commit 6458ca4

Browse files
committed
test: staker_change_balance_twice_same_epoch_flow_test (#77)
1 parent 3ee5f59 commit 6458ca4

File tree

2 files changed

+149
-2
lines changed

2 files changed

+149
-2
lines changed

src/flow_test/flow_ideas.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,10 @@
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
2222
- delegate, advance epoch and get rewards for the pool, claim - zero rewards for the delegate
23-
- delegate, advance epoch, delegate, advance epoch, claim rewards - only for the first delegation, advance epoch, claim rewards - for all
2423
- delegator claim after claim
2524
- delegator claim after claim when exists checkpoint with the current epoch of the first claim
2625
- staker change balance in each epoch (increase, intent, delegate increase, delegate intent, delegate exit) and attest in each epoch - test rewards (also some epochs with no balance change and some epochs with no attest)
2726
- staker has multiple pool with multiple delegator each, change balance (staker, strk delegate, btc delegate) and attest in many epochs and test rewards both staker and members
28-
- test staker claim rewards with more than one balance change in an epoch.
2927
- member enter, in the same epoch or one epoch after claim (balance is zero).
3028

3129
## k=1 -> k=2 Migration Member

src/flow_test/test.cairo

Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3029,3 +3029,152 @@ fn enable_disable_btc_tokens_flow_test() {
30293029
.span();
30303030
assert!(tokens == expected_tokens);
30313031
}
3032+
3033+
/// Flow:
3034+
/// Staker stake
3035+
/// Advance K epochs
3036+
/// Staker increase stake
3037+
/// Staker increase stake again
3038+
/// Staker attest and claim rewards - test rewards.
3039+
/// Advance epoch
3040+
/// Staker attest and claim rewards - test rewards.
3041+
/// Advance epoch
3042+
/// Staker attest and claim rewards - test rewards.
3043+
/// Start consensus rewards
3044+
/// Staker increase stake
3045+
/// Staker increase stake again
3046+
/// Update rewards and claim rewards - test rewards.
3047+
/// Advance epoch
3048+
/// Update rewards and claim rewards - test rewards.
3049+
/// Advance epoch
3050+
/// Update rewards and claim rewards - test rewards.
3051+
#[test]
3052+
fn staker_change_balance_twice_same_epoch_flow_test() {
3053+
let cfg: StakingInitConfig = Default::default();
3054+
let mut system = SystemConfigTrait::basic_stake_flow_cfg(:cfg).deploy();
3055+
let staking_contract = system.staking.address;
3056+
let minting_curve_contract = system.minting_curve.address;
3057+
let stake_amount = system.staking.get_min_stake();
3058+
let staker = system.new_staker(amount: stake_amount * 3);
3059+
let commission = 200;
3060+
system.stake(:staker, amount: stake_amount, pool_enabled: true, :commission);
3061+
system.advance_k_epochs();
3062+
system.increase_stake(:staker, amount: stake_amount / 2);
3063+
system.increase_stake(:staker, amount: stake_amount / 2);
3064+
3065+
system.advance_block_custom_and_attest(:staker, stake: stake_amount);
3066+
let (expected_rewards, _) = calculate_staker_strk_rewards_with_balances_v2(
3067+
amount_own: stake_amount,
3068+
pool_amount: Zero::zero(),
3069+
:commission,
3070+
:staking_contract,
3071+
:minting_curve_contract,
3072+
);
3073+
assert!(expected_rewards.is_non_zero());
3074+
assert!(system.staker_claim_rewards(:staker) == expected_rewards);
3075+
3076+
system.advance_epoch();
3077+
system.advance_block_custom_and_attest(:staker, stake: stake_amount);
3078+
assert!(system.staker_claim_rewards(:staker) == expected_rewards);
3079+
3080+
system.advance_epoch();
3081+
system.advance_block_custom_and_attest(:staker, stake: stake_amount * 2);
3082+
let (expected_rewards, _) = calculate_staker_strk_rewards_with_balances_v2(
3083+
amount_own: stake_amount * 2,
3084+
pool_amount: Zero::zero(),
3085+
:commission,
3086+
:staking_contract,
3087+
:minting_curve_contract,
3088+
);
3089+
assert!(expected_rewards.is_non_zero());
3090+
assert!(system.staker_claim_rewards(:staker) == expected_rewards);
3091+
3092+
system.start_consensus_rewards();
3093+
system.increase_stake(:staker, amount: stake_amount / 2);
3094+
system.increase_stake(:staker, amount: stake_amount / 2);
3095+
3096+
system.update_rewards(:staker, disable_rewards: false);
3097+
let (expected_rewards, _) = calculate_staker_strk_rewards_with_balances_v3(
3098+
amount_own: stake_amount * 2,
3099+
pool_amount: Zero::zero(),
3100+
:commission,
3101+
:staking_contract,
3102+
:minting_curve_contract,
3103+
);
3104+
assert!(expected_rewards.is_non_zero());
3105+
assert!(system.staker_claim_rewards(:staker) == expected_rewards);
3106+
3107+
system.advance_epoch();
3108+
system.update_rewards(:staker, disable_rewards: false);
3109+
assert!(system.staker_claim_rewards(:staker) == expected_rewards);
3110+
3111+
system.advance_epoch();
3112+
system.update_rewards(:staker, disable_rewards: false);
3113+
let (expected_rewards, _) = calculate_staker_strk_rewards_with_balances_v3(
3114+
amount_own: stake_amount * 3,
3115+
pool_amount: Zero::zero(),
3116+
:commission,
3117+
:staking_contract,
3118+
:minting_curve_contract,
3119+
);
3120+
assert!(expected_rewards.is_non_zero());
3121+
assert!(system.staker_claim_rewards(:staker) == expected_rewards);
3122+
}
3123+
3124+
/// Flow:
3125+
/// Delegate
3126+
/// Advance epoch
3127+
/// Increase delegate
3128+
/// Advance epoch
3129+
/// Attest
3130+
/// Advance epoch
3131+
/// Claim rewards - only for the first delegation
3132+
/// Attest
3133+
/// Advance epoch
3134+
/// Claim rewards - for all
3135+
#[test]
3136+
fn test_delegate_increase_delegate_flow_test() {
3137+
let cfg: StakingInitConfig = Default::default();
3138+
let mut system = SystemConfigTrait::basic_stake_flow_cfg(:cfg).deploy();
3139+
let staking_contract = system.staking.address;
3140+
let minting_curve_contract = system.minting_curve.address;
3141+
let stake_amount = system.staking.get_min_stake();
3142+
let staker = system.new_staker(amount: stake_amount);
3143+
let commission = 200;
3144+
system.stake(:staker, amount: stake_amount, pool_enabled: true, :commission);
3145+
system.advance_k_epochs();
3146+
let pool = system.staking.get_pool(:staker);
3147+
let delegator = system.new_delegator(amount: 2 * stake_amount);
3148+
system.delegate(:delegator, :pool, amount: stake_amount);
3149+
system.advance_epoch();
3150+
system.increase_delegate(:delegator, :pool, amount: stake_amount);
3151+
system.advance_epoch();
3152+
system.advance_block_custom_and_attest(:staker, stake: 2 * stake_amount);
3153+
let (expected_staker_rewards, expected_pool_rewards) =
3154+
calculate_staker_strk_rewards_with_balances_v2(
3155+
amount_own: stake_amount,
3156+
pool_amount: stake_amount,
3157+
:commission,
3158+
:staking_contract,
3159+
:minting_curve_contract,
3160+
);
3161+
assert!(expected_staker_rewards.is_non_zero());
3162+
assert!(expected_pool_rewards.is_non_zero());
3163+
assert!(system.staker_claim_rewards(:staker) == expected_staker_rewards);
3164+
system.advance_epoch();
3165+
assert!(system.delegator_claim_rewards(:delegator, :pool) == expected_pool_rewards);
3166+
system.advance_block_custom_and_attest(:staker, stake: 3 * stake_amount);
3167+
let (expected_staker_rewards, expected_pool_rewards) =
3168+
calculate_staker_strk_rewards_with_balances_v2(
3169+
amount_own: stake_amount,
3170+
pool_amount: 2 * stake_amount,
3171+
:commission,
3172+
:staking_contract,
3173+
:minting_curve_contract,
3174+
);
3175+
assert!(expected_staker_rewards.is_non_zero());
3176+
assert!(expected_pool_rewards.is_non_zero());
3177+
assert!(system.staker_claim_rewards(:staker) == expected_staker_rewards);
3178+
system.advance_epoch();
3179+
assert!(system.delegator_claim_rewards(:delegator, :pool) == expected_pool_rewards);
3180+
}

0 commit comments

Comments
 (0)