Skip to content

Commit 2278ae9

Browse files
test: add get_stakers enable disable tokens flow
1 parent a9d619f commit 2278ae9

File tree

2 files changed

+182
-1
lines changed

2 files changed

+182
-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: 182 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2213,3 +2213,185 @@ fn get_stakers_delegation_undelegation_flow_test() {
22132213
let stakers = staking_consensus.get_stakers(epoch_id: system.staking.get_current_epoch());
22142214
assert!(stakers == expected_stakers);
22152215
}
2216+
2217+
/// Flow:
2218+
/// Staker 1 stake
2219+
/// Staker 2 stake
2220+
/// Delegator delegate strk
2221+
/// Delegator delegate btc 8 decimals to staker 1
2222+
/// Delegator delegate btc 18 decimals to staker 2
2223+
/// Advance K epochs
2224+
/// Test get_stakers
2225+
/// Disable btc 8 decimals
2226+
/// Test get_stakers
2227+
/// Enable btc 8 decimals and disable btc 18 decimals
2228+
/// Test get_stakers
2229+
/// Disable both btc tokens
2230+
/// Test get_stakers
2231+
/// Enable both btc tokens
2232+
/// Test get_stakers
2233+
#[test]
2234+
fn get_stakers_enable_disable_btc_tokens_flow_test() {
2235+
let cfg: StakingInitConfig = Default::default();
2236+
let mut system = SystemConfigTrait::basic_stake_flow_cfg(:cfg).deploy();
2237+
let stake_amount = system.staking.get_min_stake();
2238+
let staking_consensus = system.staking.consensus_dispatcher();
2239+
let strk_delegation_amount = STRK_CONFIG.min_for_rewards;
2240+
let btc_8d_delegation_amount = BTC_8D_CONFIG.min_for_rewards;
2241+
let btc_18d_delegation_amount = BTC_18D_CONFIG.min_for_rewards;
2242+
let staker_1 = system.new_staker(amount: stake_amount);
2243+
let staker_2 = system.new_staker(amount: stake_amount);
2244+
let strk_delegator = system.new_delegator(amount: strk_delegation_amount);
2245+
2246+
// Setup BTC tokens and delegators.
2247+
let btc_8d = system
2248+
.deploy_new_btc_token(name: "BTC 8D Token", decimals: BTC_8D_CONFIG.decimals);
2249+
let btc_18d = system
2250+
.deploy_new_btc_token(name: "BTC 18D Token", decimals: BTC_18D_CONFIG.decimals);
2251+
system.staking.add_token(token_address: btc_8d.contract_address());
2252+
system.staking.add_token(token_address: btc_18d.contract_address());
2253+
system.staking.enable_token(token_address: btc_8d.contract_address());
2254+
system.staking.enable_token(token_address: btc_18d.contract_address());
2255+
let btc_8d_delegator = system
2256+
.new_btc_delegator(amount: btc_8d_delegation_amount, token: btc_8d);
2257+
let btc_18d_delegator = system
2258+
.new_btc_delegator(amount: btc_18d_delegation_amount, token: btc_18d);
2259+
2260+
// Stake and delegate
2261+
system.stake(staker: staker_1, amount: stake_amount, pool_enabled: true, commission: 200);
2262+
system.stake(staker: staker_2, amount: stake_amount, pool_enabled: true, commission: 200);
2263+
let strk_pool = system.staking.get_pool(staker: staker_1);
2264+
let btc_8d_pool = system
2265+
.set_open_for_delegation(staker: staker_1, token_address: btc_8d.contract_address());
2266+
let btc_18d_pool = system
2267+
.set_open_for_delegation(staker: staker_2, token_address: btc_18d.contract_address());
2268+
system.delegate(delegator: strk_delegator, pool: strk_pool, amount: strk_delegation_amount);
2269+
system
2270+
.delegate_btc(
2271+
delegator: btc_8d_delegator,
2272+
pool: btc_8d_pool,
2273+
amount: btc_8d_delegation_amount,
2274+
token: btc_8d,
2275+
);
2276+
system
2277+
.delegate_btc(
2278+
delegator: btc_18d_delegator,
2279+
pool: btc_18d_pool,
2280+
amount: btc_18d_delegation_amount,
2281+
token: btc_18d,
2282+
);
2283+
system.advance_k_epochs();
2284+
2285+
// Test get_stakers
2286+
let stakers = staking_consensus.get_stakers(epoch_id: system.staking.get_current_epoch());
2287+
let first_staker_strk_staking_power = mul_wide_and_div(
2288+
lhs: STRK_WEIGHT_FACTOR,
2289+
rhs: stake_amount + strk_delegation_amount,
2290+
div: stake_amount * 2 + strk_delegation_amount,
2291+
)
2292+
.unwrap();
2293+
let second_staker_strk_staking_power = mul_wide_and_div(
2294+
lhs: STRK_WEIGHT_FACTOR, rhs: stake_amount, div: stake_amount * 2 + strk_delegation_amount,
2295+
)
2296+
.unwrap();
2297+
let expected_stakers = array![
2298+
(
2299+
staker_1.staker.address,
2300+
first_staker_strk_staking_power + BTC_WEIGHT_FACTOR / 2,
2301+
Option::None,
2302+
),
2303+
(
2304+
staker_2.staker.address,
2305+
second_staker_strk_staking_power + BTC_WEIGHT_FACTOR / 2,
2306+
Option::None,
2307+
),
2308+
]
2309+
.span();
2310+
assert!(stakers == expected_stakers);
2311+
2312+
// Disable btc 8 decimals
2313+
system.staking.disable_token(token_address: btc_8d.contract_address());
2314+
2315+
// Test same epoch.
2316+
let stakers = staking_consensus.get_stakers(epoch_id: system.staking.get_current_epoch());
2317+
assert!(stakers == expected_stakers);
2318+
2319+
// Test after K epochs.
2320+
system.advance_k_epochs();
2321+
let stakers = staking_consensus.get_stakers(epoch_id: system.staking.get_current_epoch());
2322+
let expected_stakers = array![
2323+
(staker_1.staker.address, first_staker_strk_staking_power, Option::None),
2324+
(
2325+
staker_2.staker.address,
2326+
second_staker_strk_staking_power + BTC_WEIGHT_FACTOR,
2327+
Option::None,
2328+
),
2329+
]
2330+
.span();
2331+
assert!(stakers == expected_stakers);
2332+
2333+
// Enable btc 8 decimals and disable btc 18 decimals
2334+
system.staking.enable_token(token_address: btc_8d.contract_address());
2335+
system.staking.disable_token(token_address: btc_18d.contract_address());
2336+
2337+
// Test same epoch.
2338+
let stakers = staking_consensus.get_stakers(epoch_id: system.staking.get_current_epoch());
2339+
assert!(stakers == expected_stakers);
2340+
2341+
// Test after K epochs.
2342+
system.advance_k_epochs();
2343+
let stakers = staking_consensus.get_stakers(epoch_id: system.staking.get_current_epoch());
2344+
let expected_stakers = array![
2345+
(
2346+
staker_1.staker.address,
2347+
first_staker_strk_staking_power + BTC_WEIGHT_FACTOR,
2348+
Option::None,
2349+
),
2350+
(staker_2.staker.address, second_staker_strk_staking_power, Option::None),
2351+
]
2352+
.span();
2353+
assert!(stakers == expected_stakers);
2354+
2355+
// Disable both btc tokens
2356+
system.staking.disable_token(token_address: btc_8d.contract_address());
2357+
2358+
// Test same epoch.
2359+
let stakers = staking_consensus.get_stakers(epoch_id: system.staking.get_current_epoch());
2360+
assert!(stakers == expected_stakers);
2361+
2362+
// Test after K epochs.
2363+
system.advance_k_epochs();
2364+
let stakers = staking_consensus.get_stakers(epoch_id: system.staking.get_current_epoch());
2365+
let expected_stakers = array![
2366+
(staker_1.staker.address, first_staker_strk_staking_power, Option::None),
2367+
(staker_2.staker.address, second_staker_strk_staking_power, Option::None),
2368+
]
2369+
.span();
2370+
assert!(stakers == expected_stakers);
2371+
2372+
// Enable both btc tokens
2373+
system.staking.enable_token(token_address: btc_8d.contract_address());
2374+
system.staking.enable_token(token_address: btc_18d.contract_address());
2375+
2376+
// Test same epoch.
2377+
let stakers = staking_consensus.get_stakers(epoch_id: system.staking.get_current_epoch());
2378+
assert!(stakers == expected_stakers);
2379+
2380+
// Test after K epochs.
2381+
system.advance_k_epochs();
2382+
let stakers = staking_consensus.get_stakers(epoch_id: system.staking.get_current_epoch());
2383+
let expected_stakers = array![
2384+
(
2385+
staker_1.staker.address,
2386+
first_staker_strk_staking_power + BTC_WEIGHT_FACTOR / 2,
2387+
Option::None,
2388+
),
2389+
(
2390+
staker_2.staker.address,
2391+
second_staker_strk_staking_power + BTC_WEIGHT_FACTOR / 2,
2392+
Option::None,
2393+
),
2394+
]
2395+
.span();
2396+
assert!(stakers == expected_stakers);
2397+
}

0 commit comments

Comments
 (0)