|
1 | 1 | use ReleaseVersion::{V0, V1, V2}; |
2 | 2 | use core::num::traits::Zero; |
3 | 3 | use core::num::traits::ops::pow::Pow; |
4 | | -use snforge_std::{TokenImpl, get_class_hash, start_cheat_block_number_global}; |
| 4 | +use snforge_std::{Token, TokenImpl, get_class_hash, start_cheat_block_number_global}; |
5 | 5 | use staking::attestation::attestation::Attestation::MIN_ATTESTATION_WINDOW; |
6 | | -use staking::constants::{ALPHA, ALPHA_DENOMINATOR, STRK_IN_FRIS}; |
| 6 | +use staking::constants::{ALPHA, ALPHA_DENOMINATOR, STRK_IN_FRIS, STRK_TOKEN_ADDRESS}; |
7 | 7 | use staking::errors::{GenericError, InternalError}; |
8 | 8 | use staking::flow_test::utils::MainnetClassHashes::{ |
9 | 9 | MAINNET_POOL_CLASS_HASH_V1, MAINNET_STAKING_CLASS_HASH_V0, MAINNET_STAKING_CLASS_HASH_V1, |
@@ -7063,3 +7063,83 @@ pub(crate) impl GetStakersAfterUpgradeFlowImpl of FlowTrait<GetStakersAfterUpgra |
7063 | 7063 | assert!(stakers == expected_stakers); |
7064 | 7064 | } |
7065 | 7065 | } |
| 7066 | + |
| 7067 | +/// Flow: |
| 7068 | +/// Add tokens A and B |
| 7069 | +/// Enable token B |
| 7070 | +/// Advance epoch |
| 7071 | +/// Enable token A, disable token B |
| 7072 | +/// Upgrade to V3 |
| 7073 | +/// Test tokens |
| 7074 | +/// Advance epoch |
| 7075 | +/// Test tokens |
| 7076 | +/// Disable token A, enable token B |
| 7077 | +/// Test tokens |
| 7078 | +/// Advance epoch |
| 7079 | +/// Test tokens |
| 7080 | +/// Advance epoch |
| 7081 | +/// Test tokens |
| 7082 | +#[derive(Drop, Copy)] |
| 7083 | +pub(crate) struct ToggleTokensBeforeAfterUpgradeFlow { |
| 7084 | + pub(crate) token_a: Option<Token>, |
| 7085 | + pub(crate) token_b: Option<Token>, |
| 7086 | +} |
| 7087 | +pub(crate) impl ToggleTokensBeforeAfterUpgradeFlowImpl of FlowTrait< |
| 7088 | + ToggleTokensBeforeAfterUpgradeFlow, |
| 7089 | +> { |
| 7090 | + fn setup_v2(ref self: ToggleTokensBeforeAfterUpgradeFlow, ref system: SystemState) { |
| 7091 | + let token_a = system.deploy_new_btc_token(name: "TOKEN_A", decimals: TEST_BTC_DECIMALS); |
| 7092 | + let token_b = system.deploy_new_btc_token(name: "TOKEN_B", decimals: TEST_BTC_DECIMALS); |
| 7093 | + system.staking.add_token(token_address: token_a.contract_address()); |
| 7094 | + system.staking.add_token(token_address: token_b.contract_address()); |
| 7095 | + system.staking.enable_token(token_address: token_b.contract_address()); |
| 7096 | + system.advance_epoch(); |
| 7097 | + |
| 7098 | + system.staking.disable_token(token_address: token_b.contract_address()); |
| 7099 | + system.staking.enable_token(token_address: token_a.contract_address()); |
| 7100 | + |
| 7101 | + self.token_a = Option::Some(token_a); |
| 7102 | + self.token_b = Option::Some(token_b); |
| 7103 | + } |
| 7104 | + |
| 7105 | + fn test(self: ToggleTokensBeforeAfterUpgradeFlow, ref system: SystemState) { |
| 7106 | + let token_a = self.token_a.unwrap(); |
| 7107 | + let token_b = self.token_b.unwrap(); |
| 7108 | + let tokens = system.staking.dispatcher().get_tokens(); |
| 7109 | + let expected_tokens = array![ |
| 7110 | + (STRK_TOKEN_ADDRESS, true), (system.btc_token.contract_address(), true), |
| 7111 | + (token_a.contract_address(), false), (token_b.contract_address(), true), |
| 7112 | + ] |
| 7113 | + .span(); |
| 7114 | + assert!(tokens == expected_tokens); |
| 7115 | + |
| 7116 | + system.advance_epoch(); |
| 7117 | + let tokens = system.staking.dispatcher().get_tokens(); |
| 7118 | + let expected_tokens = array![ |
| 7119 | + (STRK_TOKEN_ADDRESS, true), (system.btc_token.contract_address(), true), |
| 7120 | + (token_a.contract_address(), true), (token_b.contract_address(), false), |
| 7121 | + ] |
| 7122 | + .span(); |
| 7123 | + assert!(tokens == expected_tokens); |
| 7124 | + |
| 7125 | + system.staking.disable_token(token_address: token_a.contract_address()); |
| 7126 | + system.staking.enable_token(token_address: token_b.contract_address()); |
| 7127 | + let tokens = system.staking.dispatcher().get_tokens(); |
| 7128 | + assert!(tokens == expected_tokens); |
| 7129 | + |
| 7130 | + // Test after 1 epoch. |
| 7131 | + system.advance_epoch(); |
| 7132 | + let tokens = system.staking.dispatcher().get_tokens(); |
| 7133 | + assert!(tokens == expected_tokens); |
| 7134 | + |
| 7135 | + // Test after 2 epochs. |
| 7136 | + system.advance_epoch(); |
| 7137 | + let tokens = system.staking.dispatcher().get_tokens(); |
| 7138 | + let expected_tokens = array![ |
| 7139 | + (STRK_TOKEN_ADDRESS, true), (system.btc_token.contract_address(), true), |
| 7140 | + (token_a.contract_address(), false), (token_b.contract_address(), true), |
| 7141 | + ] |
| 7142 | + .span(); |
| 7143 | + assert!(tokens == expected_tokens); |
| 7144 | + } |
| 7145 | +} |
0 commit comments