Skip to content

Commit 9ef4317

Browse files
test: add get_stakers enable disable tokens flow
1 parent 6165b21 commit 9ef4317

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

0 commit comments

Comments
 (0)