Skip to content

Commit 6b110ac

Browse files
test: add get_stakers enable disable tokens flow
1 parent 544506f commit 6b110ac

File tree

2 files changed

+166
-1
lines changed

2 files changed

+166
-1
lines changed

workspace/apps/staking/contracts/src/flow_test/flow_ideas.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
# Flow Ideas
22
## `get_stakers`
3-
- Enable / disable tokens, get stakers.
43
- Stake, get stakers, increase stake, get stakers.
54
- Stake with delegation, get stakers, switch pool, get stakers.
65
- Staker without public key.

workspace/apps/staking/contracts/src/flow_test/test.cairo

Lines changed: 166 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2181,3 +2181,169 @@ fn get_stakers_delegation_undelegation_flow_test() {
21812181
.span();
21822182
assert!(stakers == expected_stakers);
21832183
}
2184+
2185+
/// Flow:
2186+
/// Staker 1 stake
2187+
/// Staker 2 stake
2188+
/// Delegator delegate strk
2189+
/// Delegator delegate btc 8 decimals to staker 1
2190+
/// Delegator delegate btc 18 decimals to staker 2
2191+
/// Advance K epochs
2192+
/// Test get_stakers
2193+
/// Disable btc 8 decimals
2194+
/// Test get_stakers
2195+
/// Enable btc 8 decimals and disable btc 18 decimals
2196+
/// Test get_stakers
2197+
/// Disable both btc tokens
2198+
/// Test get_stakers
2199+
/// Enable both btc tokens
2200+
/// Test get_stakers
2201+
#[test]
2202+
fn get_stakers_enable_disable_btc_tokens_flow_test() {
2203+
let cfg: StakingInitConfig = Default::default();
2204+
let mut system = SystemConfigTrait::basic_stake_flow_cfg(:cfg).deploy();
2205+
let stake_amount = system.staking.get_min_stake();
2206+
let staking_consensus = system.staking.consensus_dispatcher();
2207+
let strk_delegation_amount = STRK_CONFIG.min_for_rewards;
2208+
let btc_8d_delegation_amount = BTC_8D_CONFIG.min_for_rewards;
2209+
let btc_18d_delegation_amount = BTC_18D_CONFIG.min_for_rewards;
2210+
let staker_1 = system.new_staker(amount: stake_amount);
2211+
let staker_2 = system.new_staker(amount: stake_amount);
2212+
let strk_delegator = system.new_delegator(amount: strk_delegation_amount);
2213+
2214+
// Setup BTC tokens and delegators.
2215+
let btc_8d = system
2216+
.deploy_new_btc_token(name: "BTC 8D Token", decimals: BTC_8D_CONFIG.decimals);
2217+
let btc_18d = system
2218+
.deploy_new_btc_token(name: "BTC 18D Token", decimals: BTC_18D_CONFIG.decimals);
2219+
system.staking.add_token(token_address: btc_8d.contract_address());
2220+
system.staking.add_token(token_address: btc_18d.contract_address());
2221+
system.staking.enable_token(token_address: btc_8d.contract_address());
2222+
system.staking.enable_token(token_address: btc_18d.contract_address());
2223+
let btc_8d_delegator = system
2224+
.new_btc_delegator(amount: btc_8d_delegation_amount, token: btc_8d);
2225+
let btc_18d_delegator = system
2226+
.new_btc_delegator(amount: btc_18d_delegation_amount, token: btc_18d);
2227+
2228+
// Stake and delegate
2229+
system.stake(staker: staker_1, amount: stake_amount, pool_enabled: true, commission: 200);
2230+
system.stake(staker: staker_2, amount: stake_amount, pool_enabled: true, commission: 200);
2231+
let strk_pool = system.staking.get_pool(staker: staker_1);
2232+
let btc_8d_pool = system
2233+
.set_open_for_delegation(staker: staker_1, token_address: btc_8d.contract_address());
2234+
let btc_18d_pool = system
2235+
.set_open_for_delegation(staker: staker_2, token_address: btc_18d.contract_address());
2236+
system.delegate(delegator: strk_delegator, pool: strk_pool, amount: strk_delegation_amount);
2237+
system
2238+
.delegate_btc(
2239+
delegator: btc_8d_delegator,
2240+
pool: btc_8d_pool,
2241+
amount: btc_8d_delegation_amount,
2242+
token: btc_8d,
2243+
);
2244+
system
2245+
.delegate_btc(
2246+
delegator: btc_18d_delegator,
2247+
pool: btc_18d_pool,
2248+
amount: btc_18d_delegation_amount,
2249+
token: btc_18d,
2250+
);
2251+
system.advance_k_epochs();
2252+
2253+
// Test get_stakers
2254+
let stakers = staking_consensus.get_stakers(epoch_id: system.staking.get_current_epoch());
2255+
let first_staker_strk_staking_power = mul_wide_and_div(
2256+
lhs: STRK_WEIGHT_FACTOR,
2257+
rhs: stake_amount + strk_delegation_amount,
2258+
div: stake_amount * 2 + strk_delegation_amount,
2259+
)
2260+
.unwrap();
2261+
let second_staker_strk_staking_power = mul_wide_and_div(
2262+
lhs: STRK_WEIGHT_FACTOR, rhs: stake_amount, div: stake_amount * 2 + strk_delegation_amount,
2263+
)
2264+
.unwrap();
2265+
let expected_stakers = array![
2266+
(
2267+
staker_1.staker.address,
2268+
first_staker_strk_staking_power + BTC_WEIGHT_FACTOR / 2,
2269+
Option::None,
2270+
),
2271+
(
2272+
staker_2.staker.address,
2273+
second_staker_strk_staking_power + BTC_WEIGHT_FACTOR / 2,
2274+
Option::None,
2275+
),
2276+
]
2277+
.span();
2278+
assert!(stakers == expected_stakers);
2279+
2280+
// Disable btc 8 decimals
2281+
system.staking.disable_token(token_address: btc_8d.contract_address());
2282+
system.advance_k_epochs();
2283+
2284+
// Test get_stakers
2285+
let stakers = staking_consensus.get_stakers(epoch_id: system.staking.get_current_epoch());
2286+
let expected_stakers = array![
2287+
(staker_1.staker.address, first_staker_strk_staking_power, Option::None),
2288+
(
2289+
staker_2.staker.address,
2290+
second_staker_strk_staking_power + BTC_WEIGHT_FACTOR,
2291+
Option::None,
2292+
),
2293+
]
2294+
.span();
2295+
assert!(stakers == expected_stakers);
2296+
2297+
// Enable btc 8 decimals and disable btc 18 decimals
2298+
system.staking.enable_token(token_address: btc_8d.contract_address());
2299+
system.staking.disable_token(token_address: btc_18d.contract_address());
2300+
system.advance_k_epochs();
2301+
2302+
// Test get_stakers
2303+
let stakers = staking_consensus.get_stakers(epoch_id: system.staking.get_current_epoch());
2304+
let expected_stakers = array![
2305+
(
2306+
staker_1.staker.address,
2307+
first_staker_strk_staking_power + BTC_WEIGHT_FACTOR,
2308+
Option::None,
2309+
),
2310+
(staker_2.staker.address, second_staker_strk_staking_power, Option::None),
2311+
]
2312+
.span();
2313+
assert!(stakers == expected_stakers);
2314+
2315+
// Disable both btc tokens
2316+
system.staking.disable_token(token_address: btc_8d.contract_address());
2317+
system.advance_k_epochs();
2318+
2319+
// Test get_stakers
2320+
let stakers = staking_consensus.get_stakers(epoch_id: system.staking.get_current_epoch());
2321+
let expected_stakers = array![
2322+
(staker_1.staker.address, first_staker_strk_staking_power, Option::None),
2323+
(staker_2.staker.address, second_staker_strk_staking_power, Option::None),
2324+
]
2325+
.span();
2326+
assert!(stakers == expected_stakers);
2327+
2328+
// Enable both btc tokens
2329+
system.staking.enable_token(token_address: btc_8d.contract_address());
2330+
system.staking.enable_token(token_address: btc_18d.contract_address());
2331+
system.advance_k_epochs();
2332+
2333+
// Test get_stakers
2334+
let stakers = staking_consensus.get_stakers(epoch_id: system.staking.get_current_epoch());
2335+
let expected_stakers = array![
2336+
(
2337+
staker_1.staker.address,
2338+
first_staker_strk_staking_power + BTC_WEIGHT_FACTOR / 2,
2339+
Option::None,
2340+
),
2341+
(
2342+
staker_2.staker.address,
2343+
second_staker_strk_staking_power + BTC_WEIGHT_FACTOR / 2,
2344+
Option::None,
2345+
),
2346+
]
2347+
.span();
2348+
assert!(stakers == expected_stakers);
2349+
}

0 commit comments

Comments
 (0)