Skip to content

Commit 5569d00

Browse files
test: add get stakers delegation undelegation flow
1 parent 59470a4 commit 5569d00

File tree

2 files changed

+83
-1
lines changed

2 files changed

+83
-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-
- Undelegate, get stakers.
43
- Enable / disable tokens, get stakers.
54
- Stake, get stakers, increase stake, get stakers.
65
- Stake with delegation, get stakers, switch pool, get stakers.

workspace/apps/staking/contracts/src/flow_test/test.cairo

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2093,3 +2093,86 @@ fn get_stakers_delegation_flow_test() {
20932093
.span();
20942094
assert!(stakers == expected_stakers);
20952095
}
2096+
2097+
/// Flow:
2098+
/// Staker 1 stake
2099+
/// Staker 2 stake
2100+
/// Advance K epochs
2101+
/// Delegator delegate to staker 1
2102+
/// Test get_stakers next few epochs
2103+
/// Delegator undelegate
2104+
/// Test get_stakers next few epochs
2105+
#[test]
2106+
fn get_stakers_delegation_undelegation_flow_test() {
2107+
let cfg: StakingInitConfig = Default::default();
2108+
let mut system = SystemConfigTrait::basic_stake_flow_cfg(:cfg).deploy();
2109+
let stake_amount = system.staking.get_min_stake();
2110+
let strk_delegation_amount = STRK_CONFIG.min_for_rewards;
2111+
let staker_1 = system.new_staker(amount: stake_amount);
2112+
let staker_2 = system.new_staker(amount: stake_amount);
2113+
let delegator = system.new_delegator(amount: strk_delegation_amount);
2114+
let staking_consensus = system.staking.consensus_dispatcher();
2115+
2116+
// Stake and delegate
2117+
system.stake(staker: staker_1, amount: stake_amount, pool_enabled: true, commission: 200);
2118+
system.stake(staker: staker_2, amount: stake_amount, pool_enabled: false, commission: 200);
2119+
let strk_pool = system.staking.get_pool(staker: staker_1);
2120+
system.advance_k_epochs();
2121+
system.delegate(:delegator, pool: strk_pool, amount: strk_delegation_amount);
2122+
2123+
// Test get_stakers
2124+
let stakers = staking_consensus.get_stakers(epoch_id: system.staking.get_current_epoch());
2125+
let expected_stakers = array![
2126+
(staker_1.staker.address, STRK_WEIGHT_FACTOR / 2, Option::None),
2127+
(staker_2.staker.address, STRK_WEIGHT_FACTOR / 2, Option::None),
2128+
]
2129+
.span();
2130+
assert!(stakers == expected_stakers);
2131+
2132+
// Test next epoch.
2133+
system.advance_epoch();
2134+
let stakers = staking_consensus.get_stakers(epoch_id: system.staking.get_current_epoch());
2135+
assert!(stakers == expected_stakers);
2136+
2137+
// Test next next epoch.
2138+
system.advance_epoch();
2139+
let stakers = staking_consensus.get_stakers(epoch_id: system.staking.get_current_epoch());
2140+
let expected_stakers = array![
2141+
(
2142+
staker_1.staker.address,
2143+
STRK_WEIGHT_FACTOR
2144+
* (stake_amount + strk_delegation_amount)
2145+
/ (stake_amount * 2 + strk_delegation_amount),
2146+
Option::None,
2147+
),
2148+
(
2149+
staker_2.staker.address,
2150+
STRK_WEIGHT_FACTOR * stake_amount / (stake_amount * 2 + strk_delegation_amount),
2151+
Option::None,
2152+
),
2153+
]
2154+
.span();
2155+
assert!(stakers == expected_stakers);
2156+
2157+
// Undelegate
2158+
system.delegator_exit_intent(:delegator, pool: strk_pool, amount: strk_delegation_amount);
2159+
2160+
// Test get_stakers
2161+
let stakers = staking_consensus.get_stakers(epoch_id: system.staking.get_current_epoch());
2162+
assert!(stakers == expected_stakers);
2163+
2164+
// Test next epoch.
2165+
system.advance_epoch();
2166+
let stakers = staking_consensus.get_stakers(epoch_id: system.staking.get_current_epoch());
2167+
assert!(stakers == expected_stakers);
2168+
2169+
// Test next next epoch.
2170+
system.advance_epoch();
2171+
let stakers = staking_consensus.get_stakers(epoch_id: system.staking.get_current_epoch());
2172+
let expected_stakers = array![
2173+
(staker_1.staker.address, STRK_WEIGHT_FACTOR / 2, Option::None),
2174+
(staker_2.staker.address, STRK_WEIGHT_FACTOR / 2, Option::None),
2175+
]
2176+
.span();
2177+
assert!(stakers == expected_stakers);
2178+
}

0 commit comments

Comments
 (0)