Skip to content

Commit dbfa1a6

Browse files
test: add accrue_rewards_across_versions flow
1 parent ee36d3b commit dbfa1a6

File tree

3 files changed

+114
-1
lines changed

3 files changed

+114
-1
lines changed

src/flow_test/flow_ideas.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ more ideas:
2828
- member from V1, pool gets rewards at V1, pool gets rewards at V3, test rewards.
2929

3030
## k=1 -> k=2 Migration Staker
31-
- staker enter in V0, attest in V1, update balance in V1, attest in V1, attest in V2, update balance in V2, attest in V2, attest in V3, update balance in V3, attest in V3, test rewards.
3231
- staker enter in V2, advance epoch, update balance in V2, upgrade to V3, update balance, attest, advance epoch, attest, advance epoch, attest, test rewards
3332
- staker enter in V2, advance epoch, update balance in V2, upgrade to V3, update balance, attest, advance epoch, update balance, attest, advance epoch, attest, test rewards
3433
- staker enter in V2, advance epoch, advance epoch, upgrade to V3, update balance, attest, advance epoch, attest, advance epoch, attest, test rewards

src/flow_test/flows.cairo

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9264,3 +9264,108 @@ pub(crate) impl EnableDisableTokenBeforeAfterUpgradeFlowImpl of FlowTrait<
92649264
assert!(rewards_b.is_zero());
92659265
}
92669266
}
9267+
9268+
/// Flow:
9269+
/// Staker stake
9270+
/// Accrue rewards
9271+
/// Upgrade to V1
9272+
/// Attest
9273+
/// Increase stake
9274+
/// Attest
9275+
/// Upgrade to V2
9276+
/// Attest
9277+
/// Increase stake
9278+
/// Attest
9279+
/// Upgrade to V3
9280+
/// Attest
9281+
/// Increase stake
9282+
/// Attest
9283+
/// Test rewards
9284+
#[derive(Drop, Copy)]
9285+
pub(crate) struct AccrueRewardsDifferentBalancesAcrossVersionsFlow {
9286+
pub(crate) staker: Option<Staker>,
9287+
pub(crate) stake_amount: Option<Amount>,
9288+
pub(crate) v2_rewards: Option<Amount>,
9289+
}
9290+
pub(crate) impl AccrueRewardsDifferentBalancesAcrossVersionsFlowImpl of FlowTrait<
9291+
AccrueRewardsDifferentBalancesAcrossVersionsFlow,
9292+
> {
9293+
fn setup(ref self: AccrueRewardsDifferentBalancesAcrossVersionsFlow, ref system: SystemState) {
9294+
let stake_amount = system.staking.get_min_stake();
9295+
let staker = system.new_staker(amount: stake_amount * 5);
9296+
9297+
system.stake(:staker, amount: stake_amount, pool_enabled: false, commission: 200);
9298+
system.accrue_rewards(:staker);
9299+
9300+
system.set_staker_for_migration(staker_address: staker.staker.address);
9301+
self.staker = Option::Some(staker);
9302+
self.stake_amount = Option::Some(stake_amount);
9303+
}
9304+
9305+
fn setup_v1(
9306+
ref self: AccrueRewardsDifferentBalancesAcrossVersionsFlow, ref system: SystemState,
9307+
) {
9308+
let staker = self.staker.unwrap();
9309+
let stake_amount = self.stake_amount.unwrap();
9310+
9311+
system.accrue_rewards(:staker);
9312+
system.increase_stake(:staker, amount: stake_amount);
9313+
system.accrue_rewards(:staker);
9314+
}
9315+
9316+
fn setup_v2(
9317+
ref self: AccrueRewardsDifferentBalancesAcrossVersionsFlow, ref system: SystemState,
9318+
) {
9319+
let staker = self.staker.unwrap();
9320+
let stake_amount = self.stake_amount.unwrap();
9321+
9322+
system.accrue_rewards(:staker);
9323+
system.increase_stake(:staker, amount: stake_amount);
9324+
system.accrue_rewards(:staker);
9325+
9326+
self.v2_rewards = Option::Some(system.staker_info_v1(:staker).unclaimed_rewards_own);
9327+
}
9328+
9329+
fn test(self: AccrueRewardsDifferentBalancesAcrossVersionsFlow, ref system: SystemState) {
9330+
let staker = self.staker.unwrap();
9331+
let stake_amount = self.stake_amount.unwrap();
9332+
let v2_rewards = self.v2_rewards.unwrap();
9333+
let mut v3_rewards = Zero::zero();
9334+
9335+
system.accrue_rewards(:staker);
9336+
let (expected_rewards, _) = calculate_staker_strk_rewards_with_balances_v2(
9337+
amount_own: stake_amount * 3,
9338+
pool_amount: Zero::zero(),
9339+
commission: 200,
9340+
staking_contract: system.staking.address,
9341+
minting_curve_contract: system.minting_curve.address,
9342+
);
9343+
v3_rewards += expected_rewards;
9344+
9345+
system.increase_stake(:staker, amount: stake_amount);
9346+
system.accrue_rewards(:staker);
9347+
let (expected_rewards, _) = calculate_staker_strk_rewards_with_balances_v2(
9348+
amount_own: stake_amount * 4,
9349+
pool_amount: Zero::zero(),
9350+
commission: 200,
9351+
staking_contract: system.staking.address,
9352+
minting_curve_contract: system.minting_curve.address,
9353+
);
9354+
v3_rewards += expected_rewards;
9355+
9356+
system.increase_stake(:staker, amount: stake_amount);
9357+
system.start_consensus_rewards();
9358+
system.update_rewards(:staker, disable_rewards: false);
9359+
let (expected_rewards, _) = calculate_staker_strk_rewards_with_balances_v3(
9360+
amount_own: stake_amount * 5,
9361+
pool_amount: Zero::zero(),
9362+
commission: 200,
9363+
staking_contract: system.staking.address,
9364+
minting_curve_contract: system.minting_curve.address,
9365+
);
9366+
v3_rewards += expected_rewards;
9367+
9368+
let staker_rewards = system.staker_claim_rewards(:staker);
9369+
assert!(staker_rewards == v2_rewards + v3_rewards);
9370+
}
9371+
}

src/flow_test/fork_test.cairo

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -627,3 +627,12 @@ fn enable_disable_token_before_after_upgrade_flow_test() {
627627
};
628628
test_flow_mainnet(ref :flow);
629629
}
630+
631+
#[test]
632+
#[fork("MAINNET_LATEST")]
633+
fn accrue_rewards_different_balances_across_versions_flow_test() {
634+
let mut flow = flows::AccrueRewardsDifferentBalancesAcrossVersionsFlow {
635+
staker: Option::None, stake_amount: Option::None, v2_rewards: Option::None,
636+
};
637+
test_flow_mainnet(ref :flow);
638+
}

0 commit comments

Comments
 (0)