Skip to content

Commit 95239a7

Browse files
test: add toggle tokens before and after upgrade test
1 parent d90bd02 commit 95239a7

File tree

3 files changed

+83
-4
lines changed

3 files changed

+83
-4
lines changed

src/flow_test/flow_ideas.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,4 @@ more ideas:
9898
## k=1 -> k=2 token
9999
- enable token, update rewards, advance epoch, update rewards, advance epoch, update rewards - token does not get rewards until after 2 epochs
100100
- same as above with disable (can be implemented together as one test)
101-
- token enabled, upgrade, disable
102-
- token disabled, upgrade, enable
103101
- token A enabled, next epoch token B enabled, next epoch token A disabled, next epoch token B disabled

src/flow_test/flows.cairo

Lines changed: 74 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
use ReleaseVersion::{V0, V1, V2};
22
use core::num::traits::Zero;
33
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};
55
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};
77
use staking::errors::{GenericError, InternalError};
88
use staking::flow_test::utils::MainnetClassHashes::{
99
MAINNET_POOL_CLASS_HASH_V1, MAINNET_STAKING_CLASS_HASH_V0, MAINNET_STAKING_CLASS_HASH_V1,
@@ -7063,3 +7063,75 @@ pub(crate) impl GetStakersAfterUpgradeFlowImpl of FlowTrait<GetStakersAfterUpgra
70637063
assert!(stakers == expected_stakers);
70647064
}
70657065
}
7066+
7067+
/// Flow:
7068+
/// Token A enabled, Token B disabled
7069+
/// Test tokens
7070+
/// Upgrade to V3
7071+
/// Disable Token A, enable Token B
7072+
/// Test tokens
7073+
/// Advance epoch
7074+
/// Test tokens
7075+
/// Advance epoch
7076+
/// Test tokens
7077+
#[derive(Drop, Copy)]
7078+
pub(crate) struct ToggleTokensBeforeAfterUpgradeFlow {
7079+
pub(crate) token_a: Option<Token>,
7080+
pub(crate) token_b: Option<Token>,
7081+
}
7082+
pub(crate) impl ToggleTokensBeforeAfterUpgradeFlowImpl of FlowTrait<
7083+
ToggleTokensBeforeAfterUpgradeFlow,
7084+
> {
7085+
fn setup_v2(ref self: ToggleTokensBeforeAfterUpgradeFlow, ref system: SystemState) {
7086+
let token_a = system.deploy_new_btc_token(name: "TOKEN_A", decimals: TEST_BTC_DECIMALS);
7087+
let token_b = system.deploy_new_btc_token(name: "TOKEN_B", decimals: TEST_BTC_DECIMALS);
7088+
system.staking.add_token(token_address: token_a.contract_address());
7089+
system.staking.add_token(token_address: token_b.contract_address());
7090+
system.staking.enable_token(token_address: token_a.contract_address());
7091+
let result = system.staking.safe_disable_token(token_address: token_b.contract_address());
7092+
assert_panic_with_error(result, StakingError::TOKEN_ALREADY_DISABLED.describe());
7093+
system.advance_epoch();
7094+
let tokens = system.staking.dispatcher().get_tokens();
7095+
let expected_tokens = array![
7096+
(STRK_TOKEN_ADDRESS, true), (system.btc_token.contract_address(), true),
7097+
(token_a.contract_address(), true), (token_b.contract_address(), false),
7098+
]
7099+
.span();
7100+
assert!(tokens == expected_tokens);
7101+
7102+
self.token_a = Option::Some(token_a);
7103+
self.token_b = Option::Some(token_b);
7104+
}
7105+
7106+
fn test(self: ToggleTokensBeforeAfterUpgradeFlow, ref system: SystemState) {
7107+
let token_a = self.token_a.unwrap();
7108+
let token_b = self.token_b.unwrap();
7109+
let tokens = system.staking.dispatcher().get_tokens();
7110+
let expected_tokens = array![
7111+
(STRK_TOKEN_ADDRESS, true), (system.btc_token.contract_address(), true),
7112+
(token_a.contract_address(), true), (token_b.contract_address(), false),
7113+
]
7114+
.span();
7115+
assert!(tokens == expected_tokens);
7116+
7117+
system.staking.disable_token(token_address: token_a.contract_address());
7118+
system.staking.enable_token(token_address: token_b.contract_address());
7119+
let tokens = system.staking.dispatcher().get_tokens();
7120+
assert!(tokens == expected_tokens);
7121+
7122+
// Test after 1 epoch.
7123+
system.advance_epoch();
7124+
let tokens = system.staking.dispatcher().get_tokens();
7125+
assert!(tokens == expected_tokens);
7126+
7127+
// Test after 2 epochs.
7128+
system.advance_epoch();
7129+
let tokens = system.staking.dispatcher().get_tokens();
7130+
let expected_tokens = array![
7131+
(STRK_TOKEN_ADDRESS, true), (system.btc_token.contract_address(), true),
7132+
(token_a.contract_address(), false), (token_b.contract_address(), true),
7133+
]
7134+
.span();
7135+
assert!(tokens == expected_tokens);
7136+
}
7137+
}

src/flow_test/fork_test.cairo

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -443,3 +443,12 @@ fn get_stakers_after_upgrade_flow_test() {
443443
let mut flow = flows::GetStakersAfterUpgradeFlow { staker: Option::None };
444444
test_flow_mainnet(ref :flow);
445445
}
446+
447+
#[test]
448+
#[fork("MAINNET_LATEST")]
449+
fn toggle_tokens_before_after_upgrade_flow_test() {
450+
let mut flow = flows::ToggleTokensBeforeAfterUpgradeFlow {
451+
token_a: Option::None, token_b: Option::None,
452+
};
453+
test_flow_mainnet(ref :flow);
454+
}

0 commit comments

Comments
 (0)