Skip to content

Commit 9717b9d

Browse files
committed
Working solution
1 parent d97b936 commit 9717b9d

File tree

3 files changed

+44
-19
lines changed

3 files changed

+44
-19
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: uncomment this later, once tests are fixed
23-
// mod tests_types;
22+
mod tests_types;

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

+39-17
Original file line numberDiff line numberDiff line change
@@ -2093,7 +2093,7 @@ fn singular_staking_info_unstake_during_voting_is_ok() {
20932093
let unstake_amount_1 = 5;
20942094
assert_eq!(
20952095
staking_info.unstake(unstake_amount_1, era_1, Subperiod::Voting),
2096-
(unstake_amount_1, Balance::zero())
2096+
(era_1, Balance::zero())
20972097
);
20982098
assert_eq!(
20992099
staking_info.total_staked_amount(),
@@ -2111,7 +2111,7 @@ fn singular_staking_info_unstake_during_voting_is_ok() {
21112111
let remaining_stake = staking_info.total_staked_amount();
21122112
assert_eq!(
21132113
staking_info.unstake(remaining_stake + 1, era_2, Subperiod::Voting),
2114-
(remaining_stake, Balance::zero())
2114+
(EraNumber::zero(), Balance::zero())
21152115
);
21162116
assert!(staking_info.total_staked_amount().is_zero());
21172117
assert!(
@@ -2138,7 +2138,7 @@ fn singular_staking_info_unstake_during_bep_is_ok() {
21382138
let unstake_1 = 5;
21392139
assert_eq!(
21402140
staking_info.unstake(5, era_1, Subperiod::BuildAndEarn),
2141-
(Balance::zero(), unstake_1)
2141+
(era_1, Balance::zero())
21422142
);
21432143
assert_eq!(
21442144
staking_info.total_staked_amount(),
@@ -2169,7 +2169,7 @@ fn singular_staking_info_unstake_during_bep_is_ok() {
21692169

21702170
assert_eq!(
21712171
staking_info.unstake(unstake_2, era_2, Subperiod::BuildAndEarn),
2172-
(voting_stake_overflow, current_bep_stake)
2172+
(EraNumber::zero(), Balance::zero())
21732173
);
21742174
assert_eq!(
21752175
staking_info.total_staked_amount(),
@@ -2458,7 +2458,12 @@ fn contract_stake_amount_unstake_is_ok() {
24582458

24592459
// 1st scenario - unstake in the same era, from `Voting` subperiod
24602460
let amount_1 = 5;
2461-
contract_stake.unstake(amount_1, 0, period_info, era_1);
2461+
contract_stake.unstake(
2462+
amount_1,
2463+
period_info,
2464+
era_1,
2465+
(EraNumber::zero(), Balance::zero()),
2466+
);
24622467
assert_eq!(
24632468
contract_stake.total_staked_amount(period),
24642469
total_stake_amount - amount_1
@@ -2477,19 +2482,23 @@ fn contract_stake_amount_unstake_is_ok() {
24772482
next_subperiod_start_era: 40,
24782483
};
24792484

2480-
contract_stake.unstake(amount_1, 0, period_info, era_2);
2485+
contract_stake.unstake(
2486+
amount_1,
2487+
period_info,
2488+
era_2,
2489+
(EraNumber::zero(), Balance::zero()),
2490+
);
24812491
assert_eq!(
24822492
contract_stake.total_staked_amount(period),
24832493
total_stake_amount - amount_1 * 2
24842494
);
24852495
assert_eq!(
24862496
contract_stake.staked_amount(period, Subperiod::Voting),
2487-
vp_stake_amount - amount_1 * 2
2497+
vp_stake_amount - amount_1
24882498
);
24892499
assert_eq!(
24902500
contract_stake.staked_amount(period, Subperiod::BuildAndEarn),
2491-
bep_stake_amount,
2492-
"Must remain unchanged."
2501+
bep_stake_amount - amount_1,
24932502
);
24942503
assert!(
24952504
!contract_stake.staked.is_empty(),
@@ -2501,35 +2510,45 @@ fn contract_stake_amount_unstake_is_ok() {
25012510
);
25022511

25032512
// 3rd scenario - same as previous scenario, but for `BuildAndEarn` subperiod
2504-
contract_stake.unstake(0, amount_1, period_info, era_2);
2513+
contract_stake.unstake(
2514+
amount_1,
2515+
period_info,
2516+
era_2,
2517+
(EraNumber::zero(), Balance::zero()),
2518+
);
25052519
assert_eq!(
25062520
contract_stake.total_staked_amount(period),
25072521
total_stake_amount - amount_1 * 3
25082522
);
25092523
assert_eq!(
25102524
contract_stake.staked_amount(period, Subperiod::Voting),
2511-
vp_stake_amount - amount_1 * 2
2525+
vp_stake_amount - amount_1
25122526
);
25132527
assert_eq!(
25142528
contract_stake.staked_amount(period, Subperiod::BuildAndEarn),
2515-
bep_stake_amount - amount_1
2529+
bep_stake_amount - amount_1 * 2
25162530
);
25172531

25182532
// 4th scenario - bump up unstake eras by more than 1, entries should be aligned to the current era
25192533
let era_3 = era_2 + 3;
25202534
let amount_2 = 7;
2521-
contract_stake.unstake(0, amount_2, period_info, era_3);
2535+
contract_stake.unstake(
2536+
amount_2,
2537+
period_info,
2538+
era_3,
2539+
(EraNumber::zero(), Balance::zero()),
2540+
);
25222541
assert_eq!(
25232542
contract_stake.total_staked_amount(period),
25242543
total_stake_amount - amount_1 * 3 - amount_2
25252544
);
25262545
assert_eq!(
25272546
contract_stake.staked_amount(period, Subperiod::Voting),
2528-
vp_stake_amount - amount_1 * 2
2547+
vp_stake_amount - amount_1
25292548
);
25302549
assert_eq!(
25312550
contract_stake.staked_amount(period, Subperiod::BuildAndEarn),
2532-
bep_stake_amount - amount_1 - amount_2
2551+
bep_stake_amount - amount_1 * 2 - amount_2
25332552
);
25342553
assert_eq!(
25352554
contract_stake.staked.era, era_3,
@@ -2542,12 +2561,15 @@ fn contract_stake_amount_unstake_is_ok() {
25422561

25432562
// 5th scenario - do a full unstake with existing future entry, expect a cleanup
25442563
contract_stake.stake(total_stake_amount, period_info, era_3);
2564+
2565+
println!("{:?}", contract_stake);
25452566
contract_stake.unstake(
2546-
contract_stake.staked_amount(period, Subperiod::Voting),
2547-
contract_stake.staked_amount(period, Subperiod::BuildAndEarn),
2567+
contract_stake.total_staked_amount(period),
25482568
period_info,
25492569
era_3,
2570+
(EraNumber::zero(), Balance::zero()),
25502571
);
2572+
println!("Contract stake after: {:?}", contract_stake);
25512573
assert!(contract_stake.staked.is_empty());
25522574
assert!(contract_stake.staked_future.is_none());
25532575
}

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

+4
Original file line numberDiff line numberDiff line change
@@ -1252,13 +1252,17 @@ impl ContractStakeAmount {
12521252
self.staked.era = current_era;
12531253
}
12541254

1255+
// TODO: there should be a cleaner way to do this
1256+
12551257
// Subtract both amounts
12561258
if let Some(stake_amount) = self.staked_future.as_mut() {
12571259
stake_amount.subtract(amount, period_info.subperiod);
12581260

12591261
let (old_era, old_amount) = additional_unstake_info;
12601262
if self.staked.era == old_era {
12611263
self.staked.subtract(old_amount, period_info.subperiod);
1264+
} else if stake_amount.total().is_zero() {
1265+
self.staked = Default::default();
12621266
}
12631267
} else {
12641268
// No future entry exists, so only current one needs to be updated.

0 commit comments

Comments
 (0)