Skip to content

Commit 32dbbd3

Browse files
test: add get_stakers enable disable tokens flow
1 parent daaced7 commit 32dbbd3

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

0 commit comments

Comments
 (0)