Skip to content

Commit 2ac7a0e

Browse files
committed
test: staker migration more flows
1 parent e565455 commit 2ac7a0e

File tree

3 files changed

+168
-5
lines changed

3 files changed

+168
-5
lines changed

src/flow_test/flow_ideas.md

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,6 @@ more ideas:
4040
- staker enter in V2, advance epoch, advance epoch, upgrade to V3, attest, update balance,advance epoch, attest, advance epoch, attest, test rewards
4141
- staker enter in V2, advance epoch, update balance, upgrade to V3, attest, advance epoch, attest, advance epoch, attest, test rewards
4242
- staker enter in V2, advance epoch, upgrade to V3, advance epoch, attest,
43-
- staker enter in V0, upgrade to V3, attest
44-
- staker enter in V0, advance epoch, update balance, upgrade to V3, attest, update balance, advance epoch, attest
45-
- staker enter in V1, advance epoch, update balance, upgrade to V3, attest, update balance, advance epoch, attest
46-
- staker enter in V0, advance epoch, update balance, advance epoch, update balance, upgrade to V3, attest
47-
- staker enter in V1, advance epoch, update balance, advance epoch, update balance, upgrade to V3, attest
4843
- staker in V2, update balance staker+update balance pool, upgrade, attest in current epoch, attest in next epoch, attest in next next epoch
4944
- 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
5045

src/flow_test/flows.cairo

Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8822,3 +8822,150 @@ pub(crate) impl BalancesDelayFlowImpl of FlowTrait<BalancesDelayFlow> {
88228822
assert!(btc_delegator_rewards == expected_btc_pool_rewards);
88238823
}
88248824
}
8825+
8826+
/// Flow:
8827+
/// Staker stake in V0
8828+
/// Upgrade
8829+
/// Advance Epoch
8830+
/// Attest
8831+
/// Increase stake
8832+
/// Advance Epoch
8833+
/// Attest
8834+
/// Advance K epochs
8835+
/// Attest
8836+
#[derive(Drop, Copy)]
8837+
pub(crate) struct StakerV0AttestFlow {
8838+
pub(crate) staker: Option<Staker>,
8839+
}
8840+
pub(crate) impl StakerV0AttestFlowImpl of FlowTrait<StakerV0AttestFlow> {
8841+
fn setup(ref self: StakerV0AttestFlow, ref system: SystemState) {
8842+
let amount = system.staking.get_min_stake();
8843+
let staker = system.new_staker(amount: 2 * amount);
8844+
system.stake(:staker, :amount, pool_enabled: false, commission: 0);
8845+
self.staker = Option::Some(staker);
8846+
system.set_staker_for_migration(staker_address: staker.staker.address);
8847+
}
8848+
fn test(self: StakerV0AttestFlow, ref system: SystemState) {
8849+
let staker = self.staker.unwrap();
8850+
let amount = system.staker_info_v1(:staker).amount_own;
8851+
system.advance_epoch();
8852+
system.advance_block_custom_and_attest(:staker, stake: amount);
8853+
let (expected_rewards, _) = calculate_staker_strk_rewards_with_balances_v2(
8854+
amount_own: amount,
8855+
pool_amount: 0,
8856+
commission: 0,
8857+
staking_contract: system.staking.address,
8858+
minting_curve_contract: system.minting_curve.address,
8859+
);
8860+
assert!(system.staker_claim_rewards(:staker) == expected_rewards);
8861+
system.increase_stake(:staker, :amount);
8862+
system.advance_epoch();
8863+
system.advance_block_custom_and_attest(:staker, stake: amount);
8864+
assert!(system.staker_claim_rewards(:staker) == expected_rewards);
8865+
system.advance_k_epochs_and_attest(:staker);
8866+
let (expected_rewards, _) = calculate_staker_strk_rewards_with_balances_v2(
8867+
amount_own: 2 * amount,
8868+
pool_amount: 0,
8869+
commission: 0,
8870+
staking_contract: system.staking.address,
8871+
minting_curve_contract: system.minting_curve.address,
8872+
);
8873+
assert!(system.staker_claim_rewards(:staker) == expected_rewards);
8874+
}
8875+
}
8876+
8877+
/// Flow:
8878+
/// Staker stake in V1
8879+
/// Advance Epoch
8880+
/// Increase stake
8881+
/// Advance Epoch
8882+
/// Upgrade
8883+
/// Attest
8884+
/// Increase stake
8885+
/// Advance Epoch
8886+
/// Attest
8887+
/// Advance K epochs
8888+
/// Attest
8889+
#[derive(Drop, Copy)]
8890+
pub(crate) struct StakerV1AttestFlow {
8891+
pub(crate) staker: Option<Staker>,
8892+
}
8893+
pub(crate) impl StakerV1AttestFlowImpl of FlowTrait<StakerV1AttestFlow> {
8894+
fn setup_v1(ref self: StakerV1AttestFlow, ref system: SystemState) {
8895+
let amount = system.staking.get_min_stake();
8896+
let staker = system.new_staker(amount: 3 * amount);
8897+
system.stake(:staker, :amount, pool_enabled: false, commission: 0);
8898+
system.advance_epoch();
8899+
system.increase_stake(:staker, :amount);
8900+
system.advance_epoch();
8901+
self.staker = Option::Some(staker);
8902+
system.set_staker_for_migration(staker_address: staker.staker.address);
8903+
}
8904+
fn test(self: StakerV1AttestFlow, ref system: SystemState) {
8905+
let staker = self.staker.unwrap();
8906+
let amount = system.staker_info_v1(:staker).amount_own / 2;
8907+
system.advance_block_custom_and_attest(:staker, stake: 2 * amount);
8908+
let (expected_rewards, _) = calculate_staker_strk_rewards_with_balances_v2(
8909+
amount_own: 2 * amount,
8910+
pool_amount: 0,
8911+
commission: 0,
8912+
staking_contract: system.staking.address,
8913+
minting_curve_contract: system.minting_curve.address,
8914+
);
8915+
assert!(system.staker_claim_rewards(:staker) == expected_rewards);
8916+
system.increase_stake(:staker, :amount);
8917+
system.advance_epoch();
8918+
system.advance_block_custom_and_attest(:staker, stake: 2 * amount);
8919+
assert!(system.staker_claim_rewards(:staker) == expected_rewards);
8920+
system.advance_k_epochs_and_attest(:staker);
8921+
let (expected_rewards, _) = calculate_staker_strk_rewards_with_balances_v2(
8922+
amount_own: 3 * amount,
8923+
pool_amount: 0,
8924+
commission: 0,
8925+
staking_contract: system.staking.address,
8926+
minting_curve_contract: system.minting_curve.address,
8927+
);
8928+
assert!(system.staker_claim_rewards(:staker) == expected_rewards);
8929+
}
8930+
}
8931+
8932+
/// Flow:
8933+
/// Staker stake in V1
8934+
/// Advance Epoch
8935+
/// Increase stake
8936+
/// Advance Epoch
8937+
/// Increase stake
8938+
/// Advance Epoch
8939+
/// Upgrade
8940+
/// Attest
8941+
#[derive(Drop, Copy)]
8942+
pub(crate) struct StakerV1ChangeBalanceAttestFlow {
8943+
pub(crate) staker: Option<Staker>,
8944+
}
8945+
pub(crate) impl StakerV1ChangeBalanceAttestFlowImpl of FlowTrait<StakerV1ChangeBalanceAttestFlow> {
8946+
fn setup_v1(ref self: StakerV1ChangeBalanceAttestFlow, ref system: SystemState) {
8947+
let amount = system.staking.get_min_stake();
8948+
let staker = system.new_staker(amount: 3 * amount);
8949+
system.stake(:staker, :amount, pool_enabled: false, commission: 0);
8950+
system.advance_epoch();
8951+
system.increase_stake(:staker, :amount);
8952+
system.advance_epoch();
8953+
system.increase_stake(:staker, :amount);
8954+
system.advance_epoch();
8955+
self.staker = Option::Some(staker);
8956+
system.set_staker_for_migration(staker_address: staker.staker.address);
8957+
}
8958+
fn test(self: StakerV1ChangeBalanceAttestFlow, ref system: SystemState) {
8959+
let staker = self.staker.unwrap();
8960+
let stake_amount = system.staker_info_v1(:staker).amount_own;
8961+
system.advance_block_custom_and_attest(:staker, stake: stake_amount);
8962+
let (expected_rewards, _) = calculate_staker_strk_rewards_with_balances_v2(
8963+
amount_own: stake_amount,
8964+
pool_amount: 0,
8965+
commission: 0,
8966+
staking_contract: system.staking.address,
8967+
minting_curve_contract: system.minting_curve.address,
8968+
);
8969+
assert!(system.staker_claim_rewards(:staker) == expected_rewards);
8970+
}
8971+
}

src/flow_test/fork_test.cairo

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -562,3 +562,24 @@ fn balances_delay_flow_test() {
562562
};
563563
test_flow_mainnet(ref :flow);
564564
}
565+
566+
#[test]
567+
#[fork("MAINNET_LATEST")]
568+
fn staker_v0_attest_flow_test() {
569+
let mut flow = flows::StakerV0AttestFlow { staker: Option::None };
570+
test_flow_mainnet(ref :flow);
571+
}
572+
573+
#[test]
574+
#[fork("MAINNET_LATEST")]
575+
fn staker_v1_attest_flow_test() {
576+
let mut flow = flows::StakerV1AttestFlow { staker: Option::None };
577+
test_flow_mainnet(ref :flow);
578+
}
579+
580+
#[test]
581+
#[fork("MAINNET_LATEST")]
582+
fn staker_v1_change_balance_attest_flow_test() {
583+
let mut flow = flows::StakerV1ChangeBalanceAttestFlow { staker: Option::None };
584+
test_flow_mainnet(ref :flow);
585+
}

0 commit comments

Comments
 (0)