@@ -6618,6 +6618,101 @@ pub(crate) impl FindSigmaMigrationIdxIsOneFlowImpl of MultiVersionFlowTrait<
66186618 }
66196619}
66206620
6621+ /// Flow:
6622+ /// Delegator from V0
6623+ /// Test claim rewards with no rewards
6624+ #[derive(Drop , Copy )]
6625+ pub (crate ) struct DelegatorV0FindSigmaZeroFlow {
6626+ pub (crate ) pool : Option <ContractAddress >,
6627+ pub (crate ) delegator : Option <Delegator >,
6628+ }
6629+ pub (crate ) impl DelegatorV0FindSigmaZeroFlowImpl of FlowTrait <DelegatorV0FindSigmaZeroFlow > {
6630+ fn setup (ref self : DelegatorV0FindSigmaZeroFlow , ref system : SystemState ) {
6631+ let amount = system . staking. get_min_stake ();
6632+ let staker = system . new_staker (: amount );
6633+ let commission = 200 ;
6634+ system . stake (: staker , : amount , pool_enabled : true , : commission );
6635+ let pool = system . staking. get_pool (: staker );
6636+ let delegator = system . new_delegator (amount : amount );
6637+ system . delegate (: delegator , : pool , amount : amount );
6638+ self . delegator = Option :: Some (delegator );
6639+ self . pool = Option :: Some (pool );
6640+ system . set_pool_for_upgrade (pool_address : pool );
6641+ system . set_staker_for_migration (staker_address : staker . staker. address);
6642+ }
6643+ fn test (self : DelegatorV0FindSigmaZeroFlow , ref system : SystemState ) {
6644+ let pool = self . pool. unwrap ();
6645+ let delegator = self . delegator. unwrap ();
6646+ let unclaimed_rewards = system . delegator_unclaimed_rewards (: delegator , : pool );
6647+ assert! (unclaimed_rewards . is_zero ());
6648+ system . advance_epoch ();
6649+ let unclaimed_rewards = system . delegator_unclaimed_rewards (: delegator , : pool );
6650+ assert! (unclaimed_rewards . is_zero ());
6651+ system . advance_epoch ();
6652+ let unclaimed_rewards = system . delegator_unclaimed_rewards (: delegator , : pool );
6653+ assert! (unclaimed_rewards . is_zero ());
6654+ let rewards = system . delegator_claim_rewards (: delegator , : pool );
6655+ assert! (rewards . is_zero ());
6656+ }
6657+ }
6658+
6659+ /// Flow:
6660+ /// Delegator from V0
6661+ /// Gets rewards in V0
6662+ /// Gets rewards in V3
6663+ /// Test delegator rewards - cover find sigma cases.
6664+ #[derive(Drop , Copy )]
6665+ pub (crate ) struct DelegatorRewardsV0FindSigmaFlow {
6666+ pub (crate ) staker : Option <Staker >,
6667+ pub (crate ) pool : Option <ContractAddress >,
6668+ pub (crate ) delegator : Option <Delegator >,
6669+ pub (crate ) expected_rewards : Option <Amount >,
6670+ }
6671+ pub (crate ) impl DelegatorRewardsV0FindSigmaFlowImpl of FlowTrait <DelegatorRewardsV0FindSigmaFlow > {
6672+ fn setup (ref self : DelegatorRewardsV0FindSigmaFlow , ref system : SystemState ) {
6673+ let amount = system . staking. get_min_stake ();
6674+ let staker = system . new_staker (: amount );
6675+ let commission = 200 ;
6676+ system . stake (: staker , : amount , pool_enabled : true , : commission );
6677+ let pool = system . staking. get_pool (: staker );
6678+ let delegator = system . new_delegator (amount : amount );
6679+ system . delegate (: delegator , : pool , amount : amount );
6680+ self . staker = Option :: Some (staker );
6681+ self . delegator = Option :: Some (delegator );
6682+ self . pool = Option :: Some (pool );
6683+ system . set_pool_for_upgrade (pool_address : pool );
6684+ system . set_staker_for_migration (staker_address : staker . staker. address);
6685+ let one_week = Time :: weeks (count : 1 );
6686+ system . advance_time (time : one_week );
6687+ system . staking. update_global_index_if_needed ();
6688+ self . expected_rewards = Option :: Some (system . delegator_unclaimed_rewards (: delegator , : pool ));
6689+ }
6690+ fn test (self : DelegatorRewardsV0FindSigmaFlow , ref system : SystemState ) {
6691+ let staker = self . staker. unwrap ();
6692+ let pool = self . pool. unwrap ();
6693+ let delegator = self . delegator. unwrap ();
6694+ let expected_rewards_v0 = self . expected_rewards. unwrap ();
6695+ let unclaimed_rewards = system . delegator_unclaimed_rewards (: delegator , : pool );
6696+ assert_eq! (unclaimed_rewards , expected_rewards_v0 );
6697+ system . advance_k_epochs_and_attest (: staker );
6698+ let expected_rewards = calculate_strk_pool_rewards_v2 (
6699+ staker_address : staker . staker. address,
6700+ staking_contract : system . staking. address,
6701+ minting_curve_contract : system . minting_curve. address,
6702+ );
6703+ let unclaimed_rewards = system . delegator_unclaimed_rewards (: delegator , : pool );
6704+ assert_eq! (unclaimed_rewards , expected_rewards_v0 );
6705+ system . advance_epoch ();
6706+ let unclaimed_rewards = system . delegator_unclaimed_rewards (: delegator , : pool );
6707+ assert_eq! (unclaimed_rewards , expected_rewards_v0 + expected_rewards );
6708+ system . advance_k_epochs_and_attest (: staker );
6709+ let unclaimed_rewards = system . delegator_unclaimed_rewards (: delegator , : pool );
6710+ assert_eq! (unclaimed_rewards , expected_rewards_v0 + expected_rewards );
6711+ system . advance_epoch ();
6712+ let unclaimed_rewards = system . delegator_unclaimed_rewards (: delegator , : pool );
6713+ assert_eq! (unclaimed_rewards , expected_rewards_v0 + 2 * expected_rewards );
6714+ }
6715+ }
66216716
66226717// TODO: Implement this flow test.
66236718// Stake
0 commit comments