Skip to content

Commit d8f66ad

Browse files
test: add toggle tokens before and after upgrade test
1 parent 411f3b9 commit d8f66ad

File tree

3 files changed

+90
-4
lines changed

3 files changed

+90
-4
lines changed

src/flow_test/flow_ideas.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,5 @@ more ideas:
9292
## k=1 -> k=2 token
9393
- enable token, update rewards, advance epoch, update rewards, advance epoch, update rewards - token does not get rewards until after 2 epochs
9494
- same as above with disable (can be implemented together as one test)
95-
- token enabled, upgrade, disable
96-
- token disabled, upgrade, enable
9795
- token A enabled, next epoch token B enabled, next epoch token A disabled, next epoch token B disabled
96+
- enable token A and disable token B, next epoch upgrade, test views and rewards.

src/flow_test/flows.cairo

Lines changed: 80 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,81 @@ 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 - test tokens
7073+
/// Advance epoch - test tokens
7074+
/// Disable token A, enable token B - test tokens
7075+
/// Advance epoch - test tokens
7076+
/// Advance epoch - 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_b.contract_address());
7091+
system.advance_epoch();
7092+
7093+
system.staking.disable_token(token_address: token_b.contract_address());
7094+
system.staking.enable_token(token_address: token_a.contract_address());
7095+
7096+
self.token_a = Option::Some(token_a);
7097+
self.token_b = Option::Some(token_b);
7098+
}
7099+
7100+
fn test(self: ToggleTokensBeforeAfterUpgradeFlow, ref system: SystemState) {
7101+
let token_a = self.token_a.unwrap();
7102+
let token_b = self.token_b.unwrap();
7103+
let tokens = system.staking.dispatcher().get_tokens();
7104+
let expected_tokens = array![
7105+
(STRK_TOKEN_ADDRESS, true), (system.btc_token.contract_address(), true),
7106+
(token_a.contract_address(), false), (token_b.contract_address(), true),
7107+
]
7108+
.span();
7109+
assert!(tokens == expected_tokens);
7110+
7111+
system.advance_epoch();
7112+
let tokens = system.staking.dispatcher().get_tokens();
7113+
let expected_tokens = array![
7114+
(STRK_TOKEN_ADDRESS, true), (system.btc_token.contract_address(), true),
7115+
(token_a.contract_address(), true), (token_b.contract_address(), false),
7116+
]
7117+
.span();
7118+
assert!(tokens == expected_tokens);
7119+
7120+
// Toggle tokens.
7121+
system.staking.disable_token(token_address: token_a.contract_address());
7122+
system.staking.enable_token(token_address: token_b.contract_address());
7123+
7124+
// Test same epoch.
7125+
let tokens = system.staking.dispatcher().get_tokens();
7126+
assert!(tokens == expected_tokens);
7127+
7128+
// Test after 1 epoch.
7129+
system.advance_epoch();
7130+
let tokens = system.staking.dispatcher().get_tokens();
7131+
assert!(tokens == expected_tokens);
7132+
7133+
// Test after 2 epochs.
7134+
system.advance_epoch();
7135+
let tokens = system.staking.dispatcher().get_tokens();
7136+
let expected_tokens = array![
7137+
(STRK_TOKEN_ADDRESS, true), (system.btc_token.contract_address(), true),
7138+
(token_a.contract_address(), false), (token_b.contract_address(), true),
7139+
]
7140+
.span();
7141+
assert!(tokens == expected_tokens);
7142+
}
7143+
}

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)