Skip to content

Commit e48b02c

Browse files
test: add token state after upgrade flow
1 parent 5deab3b commit e48b02c

File tree

3 files changed

+127
-3
lines changed

3 files changed

+127
-3
lines changed

src/flow_test/flow_ideas.md

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,3 @@ more ideas:
6868
- Member from V0, change balance at V1, no action at V2, test curr balance
6969
- Member from V2, change balance, upgrade, test curr balance
7070
- Cover all ifs with migration from: V0, V1, V2.
71-
72-
## k=1 -> k=2 token
73-
- enable token A and disable token B, next epoch upgrade, test views and rewards.

src/flow_test/flows.cairo

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7915,3 +7915,114 @@ pub(crate) impl DelegatorRewardsMigrationSecondRegularCaseFlowImpl of MultiVersi
79157915
assert_eq!(actual_rewards, expected_rewards);
79167916
}
79177917
}
7918+
7919+
/// Flow:
7920+
/// Add tokens A and B
7921+
/// Delegate for both tokens
7922+
/// Enable token A, disable token B
7923+
/// Advance epoch
7924+
/// Upgrade - test views and rewards
7925+
#[derive(Drop, Copy)]
7926+
pub(crate) struct EnableDisableTokenBeforeAfterUpgradeFlow {
7927+
pub(crate) token_a: Option<Token>,
7928+
pub(crate) token_b: Option<Token>,
7929+
pub(crate) staker: Option<Staker>,
7930+
pub(crate) pool_a: Option<ContractAddress>,
7931+
pub(crate) pool_b: Option<ContractAddress>,
7932+
pub(crate) delegator_a: Option<Delegator>,
7933+
pub(crate) delegator_b: Option<Delegator>,
7934+
pub(crate) delegation_amount: Option<Amount>,
7935+
}
7936+
pub(crate) impl EnableDisableTokenBeforeAfterUpgradeFlowImpl of FlowTrait<
7937+
EnableDisableTokenBeforeAfterUpgradeFlow,
7938+
> {
7939+
fn setup_v2(ref self: EnableDisableTokenBeforeAfterUpgradeFlow, ref system: SystemState) {
7940+
let token_a = system.deploy_new_btc_token(name: "TOKEN_A", decimals: TEST_BTC_DECIMALS);
7941+
let token_b = system.deploy_new_btc_token(name: "TOKEN_B", decimals: TEST_BTC_DECIMALS);
7942+
system.staking.add_token(token_address: token_a.contract_address());
7943+
system.staking.add_token(token_address: token_b.contract_address());
7944+
system.staking.enable_token(token_address: token_b.contract_address());
7945+
7946+
let stake_amount = system.staking.get_min_stake();
7947+
let delegation_amount = TEST_MIN_BTC_FOR_REWARDS;
7948+
let staker = system.new_staker(amount: stake_amount);
7949+
system.stake(:staker, amount: stake_amount, pool_enabled: true, commission: 200);
7950+
let pool_a = system
7951+
.set_open_for_delegation(:staker, token_address: token_a.contract_address());
7952+
let pool_b = system
7953+
.set_open_for_delegation(:staker, token_address: token_b.contract_address());
7954+
let delegator_a = system.new_btc_delegator(amount: delegation_amount, token: token_a);
7955+
let delegator_b = system.new_btc_delegator(amount: delegation_amount, token: token_b);
7956+
system
7957+
.delegate_btc(
7958+
delegator: delegator_a, pool: pool_a, amount: delegation_amount, token: token_a,
7959+
);
7960+
system
7961+
.delegate_btc(
7962+
delegator: delegator_b, pool: pool_b, amount: delegation_amount, token: token_b,
7963+
);
7964+
7965+
system.advance_epoch();
7966+
system.staking.disable_token(token_address: token_b.contract_address());
7967+
system.staking.enable_token(token_address: token_a.contract_address());
7968+
7969+
system.advance_epoch();
7970+
system.set_staker_for_migration(staker_address: staker.staker.address);
7971+
self.token_a = Option::Some(token_a);
7972+
self.token_b = Option::Some(token_b);
7973+
self.staker = Option::Some(staker);
7974+
self.pool_a = Option::Some(pool_a);
7975+
self.pool_b = Option::Some(pool_b);
7976+
self.delegator_a = Option::Some(delegator_a);
7977+
self.delegator_b = Option::Some(delegator_b);
7978+
self.delegation_amount = Option::Some(delegation_amount);
7979+
}
7980+
7981+
fn test(self: EnableDisableTokenBeforeAfterUpgradeFlow, ref system: SystemState) {
7982+
let token_a = self.token_a.unwrap();
7983+
let token_b = self.token_b.unwrap();
7984+
let staker = self.staker.unwrap();
7985+
let pool_a = self.pool_a.unwrap();
7986+
let pool_b = self.pool_b.unwrap();
7987+
let delegator_a = self.delegator_a.unwrap();
7988+
let delegator_b = self.delegator_b.unwrap();
7989+
let delegation_amount = self.delegation_amount.unwrap();
7990+
7991+
// Test get_tokens view.
7992+
let tokens = system.staking.dispatcher().get_tokens();
7993+
let expected_tokens = array![
7994+
(STRK_TOKEN_ADDRESS, true), (system.btc_token.contract_address(), true),
7995+
(token_a.contract_address(), true), (token_b.contract_address(), false),
7996+
]
7997+
.span();
7998+
assert!(tokens == expected_tokens);
7999+
8000+
// Test rewards - only token A.
8001+
system.advance_block_into_attestation_window(:staker);
8002+
system.attest(:staker);
8003+
system.advance_epoch();
8004+
let staker_rewards = system.staker_claim_rewards(:staker);
8005+
let (expected_staker_rewards, _) = calculate_staker_strk_rewards_v2(
8006+
staker_info: system.staker_info_v1(:staker),
8007+
staking_contract: system.staking.address,
8008+
minting_curve_contract: system.minting_curve.address,
8009+
);
8010+
assert!(expected_staker_rewards.is_non_zero());
8011+
let rewards_a = system.delegator_claim_rewards(delegator: delegator_a, pool: pool_a);
8012+
let rewards_b = system.delegator_claim_rewards(delegator: delegator_b, pool: pool_b);
8013+
let (expected_commission_rewards, expected_pool_rewards) =
8014+
calculate_staker_btc_pool_rewards_v2(
8015+
pool_balance: delegation_amount,
8016+
commission: 200,
8017+
staking_contract: system.staking.address,
8018+
minting_curve_contract: system.minting_curve.address,
8019+
token_address: token_a.contract_address(),
8020+
);
8021+
assert!(expected_commission_rewards.is_non_zero());
8022+
assert!(expected_pool_rewards.is_non_zero());
8023+
8024+
assert!(staker_rewards == expected_staker_rewards + expected_commission_rewards);
8025+
assert!(rewards_a == expected_pool_rewards);
8026+
assert!(rewards_b.is_zero());
8027+
}
8028+
}

src/flow_test/fork_test.cairo

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -497,3 +497,19 @@ fn delegator_v0_rewards_v1_change_balance_before_rewards_flow_test() {
497497
};
498498
test_flow_mainnet(ref :flow);
499499
}
500+
501+
#[test]
502+
#[fork("MAINNET_LATEST")]
503+
fn enable_disable_token_before_after_upgrade_flow_test() {
504+
let mut flow = flows::EnableDisableTokenBeforeAfterUpgradeFlow {
505+
token_a: Option::None,
506+
token_b: Option::None,
507+
staker: Option::None,
508+
pool_a: Option::None,
509+
pool_b: Option::None,
510+
delegator_a: Option::None,
511+
delegator_b: Option::None,
512+
delegation_amount: Option::None,
513+
};
514+
test_flow_mainnet(ref :flow);
515+
}

0 commit comments

Comments
 (0)