Skip to content

Commit 73c593a

Browse files
test: find sigma - cover all branches with member from V0 (#72)
1 parent a26081a commit 73c593a

File tree

3 files changed

+116
-1
lines changed

3 files changed

+116
-1
lines changed

src/flow_test/flow_ideas.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626

2727
## k=1 -> k=2 Migration Member
2828
- find sigma: Enter V0, change in V1, catch all ifs.
29-
- find sigma - cover all branches with member from V0.
3029
more ideas:
3130
- member from V1, pool gets rewards at V1, update balance at V1, update balance at V3, pool gets rewards at V3, test rewards.
3231
- member from V1, pool gets rewards at V1, pool gets rewards at V3, update balance at V3, test rewards.

src/flow_test/flows.cairo

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

src/flow_test/fork_test.cairo

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -583,3 +583,24 @@ fn staker_v1_change_balance_attest_flow_test() {
583583
let mut flow = flows::StakerV1ChangeBalanceAttestFlow { staker: Option::None };
584584
test_flow_mainnet(ref :flow);
585585
}
586+
587+
#[test]
588+
#[fork("MAINNET_LATEST")]
589+
fn delegator_v0_find_sigma_zero_flow_test() {
590+
let mut flow = flows::DelegatorV0FindSigmaZeroFlow {
591+
pool: Option::None, delegator: Option::None,
592+
};
593+
test_flow_mainnet(ref :flow);
594+
}
595+
596+
#[test]
597+
#[fork("MAINNET_LATEST")]
598+
fn delegator_rewards_v0_find_sigma_flow_test() {
599+
let mut flow = flows::DelegatorRewardsV0FindSigmaFlow {
600+
staker: Option::None,
601+
pool: Option::None,
602+
delegator: Option::None,
603+
expected_rewards: Option::None,
604+
};
605+
test_flow_mainnet(ref :flow);
606+
}

0 commit comments

Comments
 (0)