Skip to content

Commit 49148e3

Browse files
test: add get stakers delegation undelegation flow
1 parent 53c0237 commit 49148e3

File tree

1 file changed

+88
-0
lines changed
  • workspace/apps/staking/contracts/src/flow_test

1 file changed

+88
-0
lines changed

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

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2111,3 +2111,91 @@ fn get_stakers_delegation_flow_test() {
21112111
let stakers = staking_consensus.get_stakers(:epoch_id);
21122112
assert!(stakers == expected_stakers);
21132113
}
2114+
2115+
/// Flow:
2116+
/// Staker 1 stake
2117+
/// Staker 2 stake
2118+
/// Advance K epochs
2119+
/// Delegator delegate to staker 1
2120+
/// Test get_stakers next few epochs
2121+
/// Delegator undelegate
2122+
/// Test get_stakers next few epochs
2123+
#[test]
2124+
fn get_stakers_delegation_undelegation_flow_test() {
2125+
let cfg: StakingInitConfig = Default::default();
2126+
let mut system = SystemConfigTrait::basic_stake_flow_cfg(:cfg).deploy();
2127+
let stake_amount = system.staking.get_min_stake();
2128+
let strk_delegation_amount = STRK_CONFIG.min_for_rewards;
2129+
let staker_1 = system.new_staker(amount: stake_amount);
2130+
let staker_2 = system.new_staker(amount: stake_amount);
2131+
let delegator = system.new_delegator(amount: strk_delegation_amount);
2132+
let staking_consensus = system.staking.consensus_dispatcher();
2133+
2134+
// Stake and delegate
2135+
system.stake(staker: staker_1, amount: stake_amount, pool_enabled: true, commission: 200);
2136+
system.stake(staker: staker_2, amount: stake_amount, pool_enabled: false, commission: 200);
2137+
let strk_pool = system.staking.get_pool(staker: staker_1);
2138+
system.advance_k_epochs();
2139+
system.delegate(:delegator, pool: strk_pool, amount: strk_delegation_amount);
2140+
2141+
// Test get_stakers
2142+
let stakers = staking_consensus.get_stakers(epoch_id: system.staking.get_current_epoch());
2143+
let expected_stakers = array![
2144+
(staker_1.staker.address, STRK_WEIGHT_FACTOR / 2, Option::None),
2145+
(staker_2.staker.address, STRK_WEIGHT_FACTOR / 2, Option::None),
2146+
]
2147+
.span();
2148+
assert!(stakers == expected_stakers);
2149+
2150+
// Test next epoch.
2151+
system.advance_epoch();
2152+
let stakers = staking_consensus.get_stakers(epoch_id: system.staking.get_current_epoch());
2153+
let expected_stakers = array![
2154+
(staker_1.staker.address, STRK_WEIGHT_FACTOR / 2, Option::None),
2155+
(staker_2.staker.address, STRK_WEIGHT_FACTOR / 2, Option::None),
2156+
]
2157+
.span();
2158+
assert!(stakers == expected_stakers);
2159+
2160+
// Test next next epoch.
2161+
system.advance_epoch();
2162+
let stakers = staking_consensus.get_stakers(epoch_id: system.staking.get_current_epoch());
2163+
let expected_stakers = array![
2164+
(
2165+
staker_1.staker.address,
2166+
STRK_WEIGHT_FACTOR
2167+
* (stake_amount + strk_delegation_amount)
2168+
/ (stake_amount * 2 + strk_delegation_amount),
2169+
Option::None,
2170+
),
2171+
(
2172+
staker_2.staker.address,
2173+
STRK_WEIGHT_FACTOR * stake_amount / (stake_amount * 2 + strk_delegation_amount),
2174+
Option::None,
2175+
),
2176+
]
2177+
.span();
2178+
assert!(stakers == expected_stakers);
2179+
2180+
// Undelegate
2181+
system.delegator_exit_intent(:delegator, pool: strk_pool, amount: strk_delegation_amount);
2182+
2183+
// Test get_stakers
2184+
let stakers = staking_consensus.get_stakers(epoch_id: system.staking.get_current_epoch());
2185+
assert!(stakers == expected_stakers);
2186+
2187+
// Test next epoch.
2188+
system.advance_epoch();
2189+
let stakers = staking_consensus.get_stakers(epoch_id: system.staking.get_current_epoch());
2190+
assert!(stakers == expected_stakers);
2191+
2192+
// Test next next epoch.
2193+
system.advance_epoch();
2194+
let stakers = staking_consensus.get_stakers(epoch_id: system.staking.get_current_epoch());
2195+
let expected_stakers = array![
2196+
(staker_1.staker.address, STRK_WEIGHT_FACTOR / 2, Option::None),
2197+
(staker_2.staker.address, STRK_WEIGHT_FACTOR / 2, Option::None),
2198+
]
2199+
.span();
2200+
assert!(stakers == expected_stakers);
2201+
}

0 commit comments

Comments
 (0)