Skip to content

Commit 4a7e18c

Browse files
test: add toggle tokens before and after upgrade test
1 parent f1a3f80 commit 4a7e18c

File tree

3 files changed

+91
-4
lines changed

3 files changed

+91
-4
lines changed

src/flow_test/flow_ideas.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,4 @@ more ideas:
9999
## k=1 -> k=2 token
100100
- enable token, update rewards, advance epoch, update rewards, advance epoch, update rewards - token does not get rewards until after 2 epochs
101101
- same as above with disable (can be implemented together as one test)
102-
- token enabled, upgrade, disable
103-
- token disabled, upgrade, enable
104102
- 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: 82 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,83 @@ pub(crate) impl GetStakersAfterUpgradeFlowImpl of FlowTrait<GetStakersAfterUpgra
70637063
assert!(stakers == expected_stakers);
70647064
}
70657065
}
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+
}

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)