Skip to content

Commit 6303786

Browse files
test: add accrue_rewards_across_versions flow
1 parent 18cc23d commit 6303786

File tree

3 files changed

+130
-1
lines changed

3 files changed

+130
-1
lines changed

src/flow_test/flow_ideas.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
- with member from previous versions.
1717

1818
## k=1 -> k=2 Migration Staker
19-
- 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.
2019
- staker in V2, update balance staker+update balance pool, upgrade, attest in current epoch, attest in next epoch, attest in next next epoch
2120
- staker in V2, advance epoch, update balance staker+update balance pool, advance epoch, update balance staker+update balance pool, upgrade, update balance staker+update balance pool, attest in current epoch, attest in next epoch, attest in next next epoch
2221

src/flow_test/flows.cairo

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9946,3 +9946,124 @@ pub(crate) impl EnableDisableTokenBeforeAfterUpgradeFlowImpl of FlowTrait<
99469946
assert!(rewards_b.is_zero());
99479947
}
99489948
}
9949+
9950+
/// Flow:
9951+
/// Staker stake
9952+
/// Accrue rewards
9953+
/// Upgrade to V1
9954+
/// Attest
9955+
/// Increase stake
9956+
/// Attest
9957+
/// Upgrade to V2
9958+
/// Attest
9959+
/// Increase stake
9960+
/// Attest
9961+
/// Upgrade to V3
9962+
/// Attest
9963+
/// Increase stake
9964+
/// Attest
9965+
/// Start consensus rewards
9966+
/// update_rewards
9967+
/// Increase stake
9968+
/// update_rewards
9969+
/// Test rewards
9970+
#[derive(Drop, Copy)]
9971+
pub(crate) struct AccrueRewardsDifferentBalancesAcrossVersionsFlow {
9972+
pub(crate) staker: Option<Staker>,
9973+
pub(crate) stake_amount: Option<Amount>,
9974+
pub(crate) rewards: Option<Amount>,
9975+
}
9976+
pub(crate) impl AccrueRewardsDifferentBalancesAcrossVersionsFlowImpl of FlowTrait<
9977+
AccrueRewardsDifferentBalancesAcrossVersionsFlow,
9978+
> {
9979+
fn setup(ref self: AccrueRewardsDifferentBalancesAcrossVersionsFlow, ref system: SystemState) {
9980+
let stake_amount = system.staking.get_min_stake();
9981+
let staker = system.new_staker(amount: stake_amount * 6);
9982+
9983+
system.stake(:staker, amount: stake_amount, pool_enabled: false, commission: Zero::zero());
9984+
system.accrue_rewards(:staker);
9985+
9986+
system.set_staker_for_migration(staker_address: staker.staker.address);
9987+
self.staker = Option::Some(staker);
9988+
self.stake_amount = Option::Some(stake_amount);
9989+
}
9990+
9991+
fn setup_v1(
9992+
ref self: AccrueRewardsDifferentBalancesAcrossVersionsFlow, ref system: SystemState,
9993+
) {
9994+
let staker = self.staker.unwrap();
9995+
let stake_amount = self.stake_amount.unwrap();
9996+
9997+
system.accrue_rewards(:staker);
9998+
system.increase_stake(:staker, amount: stake_amount);
9999+
system.accrue_rewards(:staker);
10000+
}
10001+
10002+
fn setup_v2(
10003+
ref self: AccrueRewardsDifferentBalancesAcrossVersionsFlow, ref system: SystemState,
10004+
) {
10005+
let staker = self.staker.unwrap();
10006+
let stake_amount = self.stake_amount.unwrap();
10007+
10008+
system.accrue_rewards(:staker);
10009+
system.increase_stake(:staker, amount: stake_amount);
10010+
system.accrue_rewards(:staker);
10011+
10012+
let rewards = system.staker_info_v1(:staker).unclaimed_rewards_own;
10013+
assert!(rewards.is_non_zero());
10014+
self.rewards = Option::Some(rewards);
10015+
}
10016+
10017+
fn test(self: AccrueRewardsDifferentBalancesAcrossVersionsFlow, ref system: SystemState) {
10018+
let staker = self.staker.unwrap();
10019+
let stake_amount = self.stake_amount.unwrap();
10020+
let mut total_expected_rewards = self.rewards.unwrap();
10021+
10022+
system.accrue_rewards(:staker);
10023+
let (expected_rewards, _) = calculate_staker_strk_rewards_with_balances_v2(
10024+
amount_own: stake_amount * 3,
10025+
pool_amount: Zero::zero(),
10026+
commission: Zero::zero(),
10027+
staking_contract: system.staking.address,
10028+
minting_curve_contract: system.minting_curve.address,
10029+
);
10030+
total_expected_rewards += expected_rewards;
10031+
10032+
system.increase_stake(:staker, amount: stake_amount);
10033+
system.accrue_rewards(:staker);
10034+
let (expected_rewards, _) = calculate_staker_strk_rewards_with_balances_v2(
10035+
amount_own: stake_amount * 4,
10036+
pool_amount: Zero::zero(),
10037+
commission: Zero::zero(),
10038+
staking_contract: system.staking.address,
10039+
minting_curve_contract: system.minting_curve.address,
10040+
);
10041+
total_expected_rewards += expected_rewards;
10042+
10043+
system.start_consensus_rewards();
10044+
system.update_rewards(:staker, disable_rewards: false);
10045+
let (expected_rewards, _) = calculate_staker_strk_rewards_with_balances_v3(
10046+
amount_own: stake_amount * 5,
10047+
pool_amount: Zero::zero(),
10048+
commission: Zero::zero(),
10049+
staking_contract: system.staking.address,
10050+
minting_curve_contract: system.minting_curve.address,
10051+
);
10052+
total_expected_rewards += expected_rewards;
10053+
10054+
system.increase_stake(:staker, amount: stake_amount);
10055+
system.advance_k_epochs();
10056+
system.update_rewards(:staker, disable_rewards: false);
10057+
let (expected_rewards, _) = calculate_staker_strk_rewards_with_balances_v3(
10058+
amount_own: stake_amount * 6,
10059+
pool_amount: Zero::zero(),
10060+
commission: Zero::zero(),
10061+
staking_contract: system.staking.address,
10062+
minting_curve_contract: system.minting_curve.address,
10063+
);
10064+
total_expected_rewards += expected_rewards;
10065+
10066+
let staker_rewards = system.staker_claim_rewards(:staker);
10067+
assert!(staker_rewards == total_expected_rewards);
10068+
}
10069+
}

src/flow_test/fork_test.cairo

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -741,3 +741,12 @@ fn enable_disable_token_before_after_upgrade_flow_test() {
741741
};
742742
test_flow_mainnet(ref :flow);
743743
}
744+
745+
#[test]
746+
#[fork("MAINNET_LATEST")]
747+
fn accrue_rewards_different_balances_across_versions_flow_test() {
748+
let mut flow = flows::AccrueRewardsDifferentBalancesAcrossVersionsFlow {
749+
staker: Option::None, stake_amount: Option::None, rewards: Option::None,
750+
};
751+
test_flow_mainnet(ref :flow);
752+
}

0 commit comments

Comments
 (0)