Skip to content

Commit 4346593

Browse files
test: add get_stakers enable disable tokens flow
1 parent 53d30f3 commit 4346593

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

0 commit comments

Comments
 (0)