Skip to content

Commit d077709

Browse files
test: add update_rewards strk pool flow
1 parent d90bd02 commit d077709

File tree

3 files changed

+71
-6
lines changed

3 files changed

+71
-6
lines changed

src/flow_test/flow_ideas.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
- Get staker info while staker has zero balance.
44

55
## `update_rewards`
6-
- staker with only strk pool.
76
- staker with only btc pool.
87
- staker with empty pool (STRK + BTC).
98
- staker with 2 btc pools with different decimals.

src/flow_test/test.cairo

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ use staking::test_utils::constants::{
1717
};
1818
use staking::test_utils::{
1919
StakingInitConfig, calculate_staker_btc_pool_rewards_v2,
20-
calculate_staker_strk_rewards_with_balances_v2,
20+
calculate_staker_strk_rewards_with_balances_v2, calculate_staker_strk_rewards_with_balances_v3,
2121
calculate_strk_pool_rewards_with_pool_balance_v2, compute_rewards_per_unit,
2222
custom_decimals_token, deploy_mock_erc20_decimals_contract,
2323
};
@@ -2619,3 +2619,47 @@ fn get_stakers_staking_power_100_flow_test() {
26192619
.span();
26202620
assert!(stakers == expected_stakers);
26212621
}
2622+
2623+
/// Flow:
2624+
/// Start consensus rewards.
2625+
/// Staker stake with STRK pool.
2626+
/// Delegator delegate STRK.
2627+
/// Advance K epochs.
2628+
/// update_rewards.
2629+
/// Test staker rewards.
2630+
/// Test delegator rewards.
2631+
/// Advance epoch.
2632+
/// Test delegator rewards.
2633+
#[test]
2634+
fn update_rewards_strk_pool_flow_test() {
2635+
let cfg: StakingInitConfig = Default::default();
2636+
let mut system = SystemConfigTrait::basic_stake_flow_cfg(:cfg).deploy();
2637+
system.start_consensus_rewards();
2638+
let stake_amount = system.staking.get_min_stake();
2639+
let delegation_amount = STRK_CONFIG.min_for_rewards;
2640+
let staker = system.new_staker(amount: stake_amount);
2641+
let commission = 200;
2642+
system.stake(:staker, amount: stake_amount, pool_enabled: true, :commission);
2643+
let pool = system.staking.get_pool(:staker);
2644+
let delegator = system.new_delegator(amount: delegation_amount);
2645+
system.delegate(:delegator, :pool, amount: delegation_amount);
2646+
system.advance_k_epochs();
2647+
2648+
system.update_rewards(:staker);
2649+
let (expected_staker_rewards, expected_pool_rewards) =
2650+
calculate_staker_strk_rewards_with_balances_v3(
2651+
amount_own: stake_amount,
2652+
pool_amount: delegation_amount,
2653+
:commission,
2654+
staking_contract: system.staking.address,
2655+
minting_curve_contract: system.minting_curve.address,
2656+
);
2657+
let staker_rewards = system.staker_claim_rewards(:staker);
2658+
let delegator_rewards = system.delegator_claim_rewards(:delegator, :pool);
2659+
assert!(staker_rewards == expected_staker_rewards);
2660+
assert!(delegator_rewards == Zero::zero());
2661+
2662+
system.advance_epoch();
2663+
let delegator_rewards = system.delegator_claim_rewards(:delegator, :pool);
2664+
assert!(delegator_rewards == expected_pool_rewards);
2665+
}

src/flow_test/utils.cairo

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,11 @@ use staking::staking::interface::{
3939
IStakingConsensusDispatcher, IStakingConsensusSafeDispatcher, IStakingDispatcher,
4040
IStakingDispatcherTrait, IStakingMigrationDispatcher, IStakingMigrationDispatcherTrait,
4141
IStakingMigrationSafeDispatcher, IStakingPauseDispatcher, IStakingPauseDispatcherTrait,
42-
IStakingPoolDispatcher, IStakingPoolSafeDispatcher, IStakingSafeDispatcher,
43-
IStakingSafeDispatcherTrait, IStakingTokenManagerDispatcher,
44-
IStakingTokenManagerDispatcherTrait, IStakingTokenManagerSafeDispatcher,
45-
IStakingTokenManagerSafeDispatcherTrait, StakerInfoV1, StakerInfoV1Trait, StakerPoolInfoV2,
42+
IStakingPoolDispatcher, IStakingPoolSafeDispatcher, IStakingRewardsManagerDispatcher,
43+
IStakingRewardsManagerDispatcherTrait, IStakingSafeDispatcher, IStakingSafeDispatcherTrait,
44+
IStakingTokenManagerDispatcher, IStakingTokenManagerDispatcherTrait,
45+
IStakingTokenManagerSafeDispatcher, IStakingTokenManagerSafeDispatcherTrait, StakerInfoV1,
46+
StakerInfoV1Trait, StakerPoolInfoV2,
4647
};
4748
use staking::staking::objects::{
4849
EpochInfo, EpochInfoTrait, NormalizedAmount, StakerVersion, StakerVersionTrait,
@@ -338,6 +339,10 @@ pub(crate) impl StakingImpl of StakingTrait {
338339
IStakingPoolSafeDispatcher { contract_address: self.address }
339340
}
340341

342+
fn rewards_manager_dispatcher(self: StakingState) -> IStakingRewardsManagerDispatcher nopanic {
343+
IStakingRewardsManagerDispatcher { contract_address: self.address }
344+
}
345+
341346
fn set_roles(self: StakingState) {
342347
set_account_as_upgrade_governor(
343348
contract: self.address,
@@ -1492,6 +1497,23 @@ pub(crate) impl SystemStakerImpl of SystemStakerTrait {
14921497
self.attestation.unwrap().dispatcher().attest(:block_hash);
14931498
}
14941499

1500+
fn start_consensus_rewards(self: SystemState) {
1501+
let epoch_id = self.staking.get_current_epoch() + K.into();
1502+
cheat_caller_address_once(
1503+
contract_address: self.staking.address, caller_address: self.staking.roles.app_governor,
1504+
);
1505+
let config_dispatcher = IStakingConfigDispatcher { contract_address: self.staking.address };
1506+
config_dispatcher.set_consensus_rewards_first_epoch(:epoch_id);
1507+
self.advance_k_epochs();
1508+
}
1509+
1510+
fn update_rewards(self: SystemState, staker: Staker) {
1511+
self
1512+
.staking
1513+
.rewards_manager_dispatcher()
1514+
.update_rewards(staker_address: staker.staker.address, disable_rewards: false);
1515+
}
1516+
14951517
#[feature("safe_dispatcher")]
14961518
fn safe_attest(self: SystemState, staker: Staker) -> Result<(), Array<felt252>> {
14971519
let block_hash = Zero::zero();

0 commit comments

Comments
 (0)