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