Skip to content

Commit 5537730

Browse files
committed
Tests, comments, improvements
1 parent fcaa8d5 commit 5537730

File tree

3 files changed

+42
-70
lines changed

3 files changed

+42
-70
lines changed

pallets/dapp-staking-v3/src/test/mod.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,4 @@
1919
pub(crate) mod mock;
2020
mod testing_utils;
2121
mod tests;
22-
// TODO: return this later, and fix the type tests
23-
// mod tests_types;
22+
mod tests_types;

pallets/dapp-staking-v3/src/test/tests_types.rs

+35-62
Original file line numberDiff line numberDiff line change
@@ -1832,7 +1832,7 @@ fn era_info_unstake_works() {
18321832

18331833
// 1st scenario - unstake some amount, no overflow
18341834
let unstake_amount_1 = bep_stake_amount_1;
1835-
era_info.unstake_amount(unstake_amount_1, Subperiod::BuildAndEarn);
1835+
era_info.unstake_amount(unstake_amount_1);
18361836

18371837
// Current era
18381838
assert_eq!(
@@ -1859,7 +1859,7 @@ fn era_info_unstake_works() {
18591859
// 2nd scenario - unstake some more, but with overflow
18601860
let overflow = 2;
18611861
let unstake_amount_2 = bep_stake_amount_2 - unstake_amount_1 + overflow;
1862-
era_info.unstake_amount(unstake_amount_2, Subperiod::BuildAndEarn);
1862+
era_info.unstake_amount(unstake_amount_2);
18631863

18641864
// Current era
18651865
assert_eq!(
@@ -1972,58 +1972,49 @@ fn stake_amount_works() {
19721972
assert!(stake_amount.for_type(Subperiod::Voting).is_zero());
19731973
assert!(stake_amount.for_type(Subperiod::BuildAndEarn).is_zero());
19741974

1975-
// Stake some amount in voting period
1975+
// Stake some amount in voting subperiod
19761976
let vp_stake_1 = 11;
19771977
stake_amount.add(vp_stake_1, Subperiod::Voting);
19781978
assert_eq!(stake_amount.total(), vp_stake_1);
19791979
assert_eq!(stake_amount.for_type(Subperiod::Voting), vp_stake_1);
19801980
assert!(stake_amount.for_type(Subperiod::BuildAndEarn).is_zero());
19811981

1982-
// Stake some amount in build&earn period
1982+
// Stake some amount in build&earn subperiod
19831983
let bep_stake_1 = 13;
19841984
stake_amount.add(bep_stake_1, Subperiod::BuildAndEarn);
19851985
assert_eq!(stake_amount.total(), vp_stake_1 + bep_stake_1);
19861986
assert_eq!(stake_amount.for_type(Subperiod::Voting), vp_stake_1);
19871987
assert_eq!(stake_amount.for_type(Subperiod::BuildAndEarn), bep_stake_1);
19881988

1989-
// Unstake some amount from voting period
1990-
let vp_unstake_1 = 5;
1991-
stake_amount.subtract(5, Subperiod::Voting);
1992-
assert_eq!(
1993-
stake_amount.total(),
1994-
vp_stake_1 + bep_stake_1 - vp_unstake_1
1995-
);
1989+
// Unstake some amount, expect build&earn subperiod to be reduced
1990+
let unstake_1 = 5;
1991+
stake_amount.subtract(5);
1992+
assert_eq!(stake_amount.total(), vp_stake_1 + bep_stake_1 - unstake_1);
1993+
assert_eq!(stake_amount.for_type(Subperiod::Voting), vp_stake_1);
19961994
assert_eq!(
1997-
stake_amount.for_type(Subperiod::Voting),
1998-
vp_stake_1 - vp_unstake_1
1995+
stake_amount.for_type(Subperiod::BuildAndEarn),
1996+
bep_stake_1 - unstake_1
19991997
);
2000-
assert_eq!(stake_amount.for_type(Subperiod::BuildAndEarn), bep_stake_1);
20011998

2002-
// Unstake some amount from build&earn period
2003-
let bep_unstake_1 = 2;
2004-
stake_amount.subtract(bep_unstake_1, Subperiod::BuildAndEarn);
1999+
// Unstake some amount, once again expect build&earn subperiod to be reduced
2000+
let unstake_2 = 2;
2001+
stake_amount.subtract(unstake_2);
20052002
assert_eq!(
20062003
stake_amount.total(),
2007-
vp_stake_1 + bep_stake_1 - vp_unstake_1 - bep_unstake_1
2008-
);
2009-
assert_eq!(
2010-
stake_amount.for_type(Subperiod::Voting),
2011-
vp_stake_1 - vp_unstake_1
2004+
vp_stake_1 + bep_stake_1 - unstake_1 - unstake_2
20122005
);
2006+
assert_eq!(stake_amount.for_type(Subperiod::Voting), vp_stake_1);
20132007
assert_eq!(
20142008
stake_amount.for_type(Subperiod::BuildAndEarn),
2015-
bep_stake_1 - bep_unstake_1
2009+
bep_stake_1 - unstake_1 - unstake_2
20162010
);
20172011

2018-
// Unstake some more from build&earn period, and chip away from the voting period
2019-
let total_stake = vp_stake_1 + bep_stake_1 - vp_unstake_1 - bep_unstake_1;
2020-
let bep_unstake_2 = bep_stake_1 - bep_unstake_1 + 1;
2021-
stake_amount.subtract(bep_unstake_2, Subperiod::BuildAndEarn);
2022-
assert_eq!(stake_amount.total(), total_stake - bep_unstake_2);
2023-
assert_eq!(
2024-
stake_amount.for_type(Subperiod::Voting),
2025-
vp_stake_1 - vp_unstake_1 - 1
2026-
);
2012+
// Unstake even more, but this time expect voting subperiod amount to be reduced
2013+
let total_stake = vp_stake_1 + bep_stake_1 - unstake_1 - unstake_2;
2014+
let unstake_3 = bep_stake_1 - unstake_1 - unstake_2 + 1;
2015+
stake_amount.subtract(unstake_3);
2016+
assert_eq!(stake_amount.total(), total_stake - unstake_3);
2017+
assert_eq!(stake_amount.for_type(Subperiod::Voting), vp_stake_1 - 1);
20272018
assert!(stake_amount.for_type(Subperiod::BuildAndEarn).is_zero());
20282019
}
20292020

@@ -2093,7 +2084,7 @@ fn singular_staking_info_unstake_during_voting_is_ok() {
20932084
let unstake_amount_1 = 5;
20942085
assert_eq!(
20952086
staking_info.unstake(unstake_amount_1, era_1, Subperiod::Voting),
2096-
(era_1, Balance::zero())
2087+
vec![(era_1 + 1, vote_stake_amount_1 - unstake_amount_1)]
20972088
);
20982089
assert_eq!(
20992090
staking_info.total_staked_amount(),
@@ -2111,7 +2102,7 @@ fn singular_staking_info_unstake_during_voting_is_ok() {
21112102
let remaining_stake = staking_info.total_staked_amount();
21122103
assert_eq!(
21132104
staking_info.unstake(remaining_stake + 1, era_2, Subperiod::Voting),
2114-
(EraNumber::zero(), Balance::zero())
2105+
vec![(era_2, remaining_stake)]
21152106
);
21162107
assert!(staking_info.total_staked_amount().is_zero());
21172108
assert!(
@@ -2138,7 +2129,7 @@ fn singular_staking_info_unstake_during_bep_is_ok() {
21382129
let unstake_1 = 5;
21392130
assert_eq!(
21402131
staking_info.unstake(5, era_1, Subperiod::BuildAndEarn),
2141-
(era_1, Balance::zero())
2132+
vec![(era_1 + 1, bep_stake_amount_1 - unstake_1)]
21422133
);
21432134
assert_eq!(
21442135
staking_info.total_staked_amount(),
@@ -2169,7 +2160,10 @@ fn singular_staking_info_unstake_during_bep_is_ok() {
21692160

21702161
assert_eq!(
21712162
staking_info.unstake(unstake_2, era_2, Subperiod::BuildAndEarn),
2172-
(EraNumber::zero(), Balance::zero())
2163+
vec![
2164+
(era_2 - 1, voting_stake_overflow),
2165+
(era_2, current_bep_stake)
2166+
]
21732167
);
21742168
assert_eq!(
21752169
staking_info.total_staked_amount(),
@@ -2458,12 +2452,7 @@ fn contract_stake_amount_unstake_is_ok() {
24582452

24592453
// 1st scenario - unstake in the same era, from `Voting` subperiod
24602454
let amount_1 = 5;
2461-
contract_stake.unstake(
2462-
amount_1,
2463-
period_info,
2464-
era_1,
2465-
(EraNumber::zero(), Balance::zero()),
2466-
);
2455+
contract_stake.unstake(vec![(era_1, amount_1)], period_info, era_1);
24672456
assert_eq!(
24682457
contract_stake.total_staked_amount(period),
24692458
total_stake_amount - amount_1
@@ -2482,12 +2471,7 @@ fn contract_stake_amount_unstake_is_ok() {
24822471
next_subperiod_start_era: 40,
24832472
};
24842473

2485-
contract_stake.unstake(
2486-
amount_1,
2487-
period_info,
2488-
era_2,
2489-
(EraNumber::zero(), Balance::zero()),
2490-
);
2474+
contract_stake.unstake(vec![(era_2, amount_1)], period_info, era_2);
24912475
assert_eq!(
24922476
contract_stake.total_staked_amount(period),
24932477
total_stake_amount - amount_1 * 2
@@ -2510,12 +2494,7 @@ fn contract_stake_amount_unstake_is_ok() {
25102494
);
25112495

25122496
// 3rd scenario - same as previous scenario, but for `BuildAndEarn` subperiod
2513-
contract_stake.unstake(
2514-
amount_1,
2515-
period_info,
2516-
era_2,
2517-
(EraNumber::zero(), Balance::zero()),
2518-
);
2497+
contract_stake.unstake(vec![(era_2, amount_1)], period_info, era_2);
25192498
assert_eq!(
25202499
contract_stake.total_staked_amount(period),
25212500
total_stake_amount - amount_1 * 3
@@ -2532,12 +2511,7 @@ fn contract_stake_amount_unstake_is_ok() {
25322511
// 4th scenario - bump up unstake eras by more than 1, entries should be aligned to the current era
25332512
let era_3 = era_2 + 3;
25342513
let amount_2 = 7;
2535-
contract_stake.unstake(
2536-
amount_2,
2537-
period_info,
2538-
era_3,
2539-
(EraNumber::zero(), Balance::zero()),
2540-
);
2514+
contract_stake.unstake(vec![(era_3, amount_2)], period_info, era_3);
25412515
assert_eq!(
25422516
contract_stake.total_staked_amount(period),
25432517
total_stake_amount - amount_1 * 3 - amount_2
@@ -2563,10 +2537,9 @@ fn contract_stake_amount_unstake_is_ok() {
25632537
contract_stake.stake(total_stake_amount, period_info, era_3);
25642538

25652539
contract_stake.unstake(
2566-
contract_stake.total_staked_amount(period),
2540+
vec![(era_3, contract_stake.total_staked_amount(period))], // TODO: revisit this
25672541
period_info,
25682542
era_3,
2569-
(EraNumber::zero(), Balance::zero()),
25702543
);
25712544
assert!(contract_stake.staked.is_empty());
25722545
assert!(contract_stake.staked_future.is_none());

pallets/dapp-staking-v3/src/types.rs

+6-6
Original file line numberDiff line numberDiff line change
@@ -1023,29 +1023,27 @@ impl SingularStakingInfo {
10231023
) -> Vec<(EraNumber, Balance)> {
10241024
let mut result = Vec::new();
10251025

1026-
// Prepare values for further calculations
1026+
// 0. Prepare values for further calculations
10271027
let snapshot = self.staked;
10281028
let stake_delta = self
10291029
.staked
10301030
.total()
10311031
.saturating_sub(self.previous_staked.total());
10321032

1033-
// Modify current staked amount
1033+
// 1. Modify current staked amount
10341034
self.staked.subtract(amount);
10351035
let unstaked_amount = snapshot.total().saturating_sub(self.staked.total());
10361036
self.staked.era = self.staked.era.max(current_era);
1037-
1038-
// Push the result into result vector
10391037
result.push((self.staked.era, unstaked_amount));
10401038

1041-
// Update loyal staker flag accordingly
1039+
// 2. Update loyal staker flag accordingly
10421040
self.loyal_staker = self.loyal_staker
10431041
&& match subperiod {
10441042
Subperiod::Voting => !self.staked.voting.is_zero(),
10451043
Subperiod::BuildAndEarn => self.staked.voting == snapshot.voting,
10461044
};
10471045

1048-
// Move over the snapshot to the previous snapshot field and make sure
1046+
// 3. Move over the snapshot to the previous snapshot field and make sure
10491047
// to update era in case something was staked before.
10501048
if stake_delta.is_zero() {
10511049
self.previous_staked = Default::default();
@@ -1054,7 +1052,9 @@ impl SingularStakingInfo {
10541052
self.previous_staked.era = self.staked.era.saturating_sub(1);
10551053
}
10561054

1055+
// 4. If something was unstaked from the previous era, add it to the result
10571056
if unstaked_amount > stake_delta {
1057+
// Doesn't need to be at 0-th index, but we still add it for clarity
10581058
result.insert(
10591059
0,
10601060
(

0 commit comments

Comments
 (0)