Skip to content

Commit 5609a0f

Browse files
test: add get_stakers enable disable tokens flow
1 parent c460717 commit 5609a0f

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
@@ -2242,3 +2242,185 @@ fn get_stakers_delegation_undelegation_flow_test() {
22422242
let stakers = staking_consensus.get_stakers(epoch_id: system.staking.get_current_epoch());
22432243
assert!(stakers == expected_stakers);
22442244
}
2245+
2246+
/// Flow:
2247+
/// Staker 1 stake
2248+
/// Staker 2 stake
2249+
/// Delegator delegate strk
2250+
/// Delegator delegate btc 8 decimals to staker 1
2251+
/// Delegator delegate btc 18 decimals to staker 2
2252+
/// Advance K epochs
2253+
/// Test get_stakers
2254+
/// Disable btc 8 decimals
2255+
/// Test get_stakers
2256+
/// Enable btc 8 decimals and disable btc 18 decimals
2257+
/// Test get_stakers
2258+
/// Disable both btc tokens
2259+
/// Test get_stakers
2260+
/// Enable both btc tokens
2261+
/// Test get_stakers
2262+
#[test]
2263+
fn get_stakers_enable_disable_btc_tokens_flow_test() {
2264+
let cfg: StakingInitConfig = Default::default();
2265+
let mut system = SystemConfigTrait::basic_stake_flow_cfg(:cfg).deploy();
2266+
let stake_amount = system.staking.get_min_stake();
2267+
let staking_consensus = system.staking.consensus_dispatcher();
2268+
let strk_delegation_amount = STRK_CONFIG.min_for_rewards;
2269+
let btc_8d_delegation_amount = BTC_8D_CONFIG.min_for_rewards;
2270+
let btc_18d_delegation_amount = BTC_18D_CONFIG.min_for_rewards;
2271+
let staker_1 = system.new_staker(amount: stake_amount);
2272+
let staker_2 = system.new_staker(amount: stake_amount);
2273+
let strk_delegator = system.new_delegator(amount: strk_delegation_amount);
2274+
2275+
// Setup BTC tokens and delegators.
2276+
let btc_8d = system
2277+
.deploy_new_btc_token(name: "BTC 8D Token", decimals: BTC_8D_CONFIG.decimals);
2278+
let btc_18d = system
2279+
.deploy_new_btc_token(name: "BTC 18D Token", decimals: BTC_18D_CONFIG.decimals);
2280+
system.staking.add_token(token_address: btc_8d.contract_address());
2281+
system.staking.add_token(token_address: btc_18d.contract_address());
2282+
system.staking.enable_token(token_address: btc_8d.contract_address());
2283+
system.staking.enable_token(token_address: btc_18d.contract_address());
2284+
let btc_8d_delegator = system
2285+
.new_btc_delegator(amount: btc_8d_delegation_amount, token: btc_8d);
2286+
let btc_18d_delegator = system
2287+
.new_btc_delegator(amount: btc_18d_delegation_amount, token: btc_18d);
2288+
2289+
// Stake and delegate
2290+
system.stake(staker: staker_1, amount: stake_amount, pool_enabled: true, commission: 200);
2291+
system.stake(staker: staker_2, amount: stake_amount, pool_enabled: true, commission: 200);
2292+
let strk_pool = system.staking.get_pool(staker: staker_1);
2293+
let btc_8d_pool = system
2294+
.set_open_for_delegation(staker: staker_1, token_address: btc_8d.contract_address());
2295+
let btc_18d_pool = system
2296+
.set_open_for_delegation(staker: staker_2, token_address: btc_18d.contract_address());
2297+
system.delegate(delegator: strk_delegator, pool: strk_pool, amount: strk_delegation_amount);
2298+
system
2299+
.delegate_btc(
2300+
delegator: btc_8d_delegator,
2301+
pool: btc_8d_pool,
2302+
amount: btc_8d_delegation_amount,
2303+
token: btc_8d,
2304+
);
2305+
system
2306+
.delegate_btc(
2307+
delegator: btc_18d_delegator,
2308+
pool: btc_18d_pool,
2309+
amount: btc_18d_delegation_amount,
2310+
token: btc_18d,
2311+
);
2312+
system.advance_k_epochs();
2313+
2314+
// Test get_stakers
2315+
let stakers = staking_consensus.get_stakers(epoch_id: system.staking.get_current_epoch());
2316+
let first_staker_strk_staking_power = mul_wide_and_div(
2317+
lhs: STRK_WEIGHT_FACTOR,
2318+
rhs: stake_amount + strk_delegation_amount,
2319+
div: stake_amount * 2 + strk_delegation_amount,
2320+
)
2321+
.unwrap();
2322+
let second_staker_strk_staking_power = mul_wide_and_div(
2323+
lhs: STRK_WEIGHT_FACTOR, rhs: stake_amount, div: stake_amount * 2 + strk_delegation_amount,
2324+
)
2325+
.unwrap();
2326+
let expected_stakers = array![
2327+
(
2328+
staker_1.staker.address,
2329+
first_staker_strk_staking_power + BTC_WEIGHT_FACTOR / 2,
2330+
Option::None,
2331+
),
2332+
(
2333+
staker_2.staker.address,
2334+
second_staker_strk_staking_power + BTC_WEIGHT_FACTOR / 2,
2335+
Option::None,
2336+
),
2337+
]
2338+
.span();
2339+
assert!(stakers == expected_stakers);
2340+
2341+
// Disable btc 8 decimals
2342+
system.staking.disable_token(token_address: btc_8d.contract_address());
2343+
2344+
// Test same epoch.
2345+
let stakers = staking_consensus.get_stakers(epoch_id: system.staking.get_current_epoch());
2346+
assert!(stakers == expected_stakers);
2347+
2348+
// Test after K epochs.
2349+
system.advance_k_epochs();
2350+
let stakers = staking_consensus.get_stakers(epoch_id: system.staking.get_current_epoch());
2351+
let expected_stakers = array![
2352+
(staker_1.staker.address, first_staker_strk_staking_power, Option::None),
2353+
(
2354+
staker_2.staker.address,
2355+
second_staker_strk_staking_power + BTC_WEIGHT_FACTOR,
2356+
Option::None,
2357+
),
2358+
]
2359+
.span();
2360+
assert!(stakers == expected_stakers);
2361+
2362+
// Enable btc 8 decimals and disable btc 18 decimals
2363+
system.staking.enable_token(token_address: btc_8d.contract_address());
2364+
system.staking.disable_token(token_address: btc_18d.contract_address());
2365+
2366+
// Test same epoch.
2367+
let stakers = staking_consensus.get_stakers(epoch_id: system.staking.get_current_epoch());
2368+
assert!(stakers == expected_stakers);
2369+
2370+
// Test after K epochs.
2371+
system.advance_k_epochs();
2372+
let stakers = staking_consensus.get_stakers(epoch_id: system.staking.get_current_epoch());
2373+
let expected_stakers = array![
2374+
(
2375+
staker_1.staker.address,
2376+
first_staker_strk_staking_power + BTC_WEIGHT_FACTOR,
2377+
Option::None,
2378+
),
2379+
(staker_2.staker.address, second_staker_strk_staking_power, Option::None),
2380+
]
2381+
.span();
2382+
assert!(stakers == expected_stakers);
2383+
2384+
// Disable both btc tokens
2385+
system.staking.disable_token(token_address: btc_8d.contract_address());
2386+
2387+
// Test same epoch.
2388+
let stakers = staking_consensus.get_stakers(epoch_id: system.staking.get_current_epoch());
2389+
assert!(stakers == expected_stakers);
2390+
2391+
// Test after K epochs.
2392+
system.advance_k_epochs();
2393+
let stakers = staking_consensus.get_stakers(epoch_id: system.staking.get_current_epoch());
2394+
let expected_stakers = array![
2395+
(staker_1.staker.address, first_staker_strk_staking_power, Option::None),
2396+
(staker_2.staker.address, second_staker_strk_staking_power, Option::None),
2397+
]
2398+
.span();
2399+
assert!(stakers == expected_stakers);
2400+
2401+
// Enable both btc tokens
2402+
system.staking.enable_token(token_address: btc_8d.contract_address());
2403+
system.staking.enable_token(token_address: btc_18d.contract_address());
2404+
2405+
// Test same epoch.
2406+
let stakers = staking_consensus.get_stakers(epoch_id: system.staking.get_current_epoch());
2407+
assert!(stakers == expected_stakers);
2408+
2409+
// Test after K epochs.
2410+
system.advance_k_epochs();
2411+
let stakers = staking_consensus.get_stakers(epoch_id: system.staking.get_current_epoch());
2412+
let expected_stakers = array![
2413+
(
2414+
staker_1.staker.address,
2415+
first_staker_strk_staking_power + BTC_WEIGHT_FACTOR / 2,
2416+
Option::None,
2417+
),
2418+
(
2419+
staker_2.staker.address,
2420+
second_staker_strk_staking_power + BTC_WEIGHT_FACTOR / 2,
2421+
Option::None,
2422+
),
2423+
]
2424+
.span();
2425+
assert!(stakers == expected_stakers);
2426+
}

0 commit comments

Comments
 (0)