@@ -1832,7 +1832,7 @@ fn era_info_unstake_works() {
1832
1832
1833
1833
// 1st scenario - unstake some amount, no overflow
1834
1834
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) ;
1836
1836
1837
1837
// Current era
1838
1838
assert_eq ! (
@@ -1859,7 +1859,7 @@ fn era_info_unstake_works() {
1859
1859
// 2nd scenario - unstake some more, but with overflow
1860
1860
let overflow = 2 ;
1861
1861
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) ;
1863
1863
1864
1864
// Current era
1865
1865
assert_eq ! (
@@ -1972,58 +1972,49 @@ fn stake_amount_works() {
1972
1972
assert ! ( stake_amount. for_type( Subperiod :: Voting ) . is_zero( ) ) ;
1973
1973
assert ! ( stake_amount. for_type( Subperiod :: BuildAndEarn ) . is_zero( ) ) ;
1974
1974
1975
- // Stake some amount in voting period
1975
+ // Stake some amount in voting subperiod
1976
1976
let vp_stake_1 = 11 ;
1977
1977
stake_amount. add ( vp_stake_1, Subperiod :: Voting ) ;
1978
1978
assert_eq ! ( stake_amount. total( ) , vp_stake_1) ;
1979
1979
assert_eq ! ( stake_amount. for_type( Subperiod :: Voting ) , vp_stake_1) ;
1980
1980
assert ! ( stake_amount. for_type( Subperiod :: BuildAndEarn ) . is_zero( ) ) ;
1981
1981
1982
- // Stake some amount in build&earn period
1982
+ // Stake some amount in build&earn subperiod
1983
1983
let bep_stake_1 = 13 ;
1984
1984
stake_amount. add ( bep_stake_1, Subperiod :: BuildAndEarn ) ;
1985
1985
assert_eq ! ( stake_amount. total( ) , vp_stake_1 + bep_stake_1) ;
1986
1986
assert_eq ! ( stake_amount. for_type( Subperiod :: Voting ) , vp_stake_1) ;
1987
1987
assert_eq ! ( stake_amount. for_type( Subperiod :: BuildAndEarn ) , bep_stake_1) ;
1988
1988
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) ;
1996
1994
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
1999
1997
) ;
2000
- assert_eq ! ( stake_amount. for_type( Subperiod :: BuildAndEarn ) , bep_stake_1) ;
2001
1998
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 ) ;
2005
2002
assert_eq ! (
2006
2003
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
2012
2005
) ;
2006
+ assert_eq ! ( stake_amount. for_type( Subperiod :: Voting ) , vp_stake_1) ;
2013
2007
assert_eq ! (
2014
2008
stake_amount. for_type( Subperiod :: BuildAndEarn ) ,
2015
- bep_stake_1 - bep_unstake_1
2009
+ bep_stake_1 - unstake_1 - unstake_2
2016
2010
) ;
2017
2011
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 ) ;
2027
2018
assert ! ( stake_amount. for_type( Subperiod :: BuildAndEarn ) . is_zero( ) ) ;
2028
2019
}
2029
2020
@@ -2093,7 +2084,7 @@ fn singular_staking_info_unstake_during_voting_is_ok() {
2093
2084
let unstake_amount_1 = 5 ;
2094
2085
assert_eq ! (
2095
2086
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 ) ]
2097
2088
) ;
2098
2089
assert_eq ! (
2099
2090
staking_info. total_staked_amount( ) ,
@@ -2111,7 +2102,7 @@ fn singular_staking_info_unstake_during_voting_is_ok() {
2111
2102
let remaining_stake = staking_info. total_staked_amount ( ) ;
2112
2103
assert_eq ! (
2113
2104
staking_info. unstake( remaining_stake + 1 , era_2, Subperiod :: Voting ) ,
2114
- ( EraNumber :: zero ( ) , Balance :: zero ( ) )
2105
+ vec! [ ( era_2 , remaining_stake ) ]
2115
2106
) ;
2116
2107
assert ! ( staking_info. total_staked_amount( ) . is_zero( ) ) ;
2117
2108
assert ! (
@@ -2138,7 +2129,7 @@ fn singular_staking_info_unstake_during_bep_is_ok() {
2138
2129
let unstake_1 = 5 ;
2139
2130
assert_eq ! (
2140
2131
staking_info. unstake( 5 , era_1, Subperiod :: BuildAndEarn ) ,
2141
- ( era_1, Balance :: zero ( ) )
2132
+ vec! [ ( era_1 + 1 , bep_stake_amount_1 - unstake_1 ) ]
2142
2133
) ;
2143
2134
assert_eq ! (
2144
2135
staking_info. total_staked_amount( ) ,
@@ -2169,7 +2160,10 @@ fn singular_staking_info_unstake_during_bep_is_ok() {
2169
2160
2170
2161
assert_eq ! (
2171
2162
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
+ ]
2173
2167
) ;
2174
2168
assert_eq ! (
2175
2169
staking_info. total_staked_amount( ) ,
@@ -2458,12 +2452,7 @@ fn contract_stake_amount_unstake_is_ok() {
2458
2452
2459
2453
// 1st scenario - unstake in the same era, from `Voting` subperiod
2460
2454
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) ;
2467
2456
assert_eq ! (
2468
2457
contract_stake. total_staked_amount( period) ,
2469
2458
total_stake_amount - amount_1
@@ -2482,12 +2471,7 @@ fn contract_stake_amount_unstake_is_ok() {
2482
2471
next_subperiod_start_era : 40 ,
2483
2472
} ;
2484
2473
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) ;
2491
2475
assert_eq ! (
2492
2476
contract_stake. total_staked_amount( period) ,
2493
2477
total_stake_amount - amount_1 * 2
@@ -2510,12 +2494,7 @@ fn contract_stake_amount_unstake_is_ok() {
2510
2494
) ;
2511
2495
2512
2496
// 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) ;
2519
2498
assert_eq ! (
2520
2499
contract_stake. total_staked_amount( period) ,
2521
2500
total_stake_amount - amount_1 * 3
@@ -2532,12 +2511,7 @@ fn contract_stake_amount_unstake_is_ok() {
2532
2511
// 4th scenario - bump up unstake eras by more than 1, entries should be aligned to the current era
2533
2512
let era_3 = era_2 + 3 ;
2534
2513
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) ;
2541
2515
assert_eq ! (
2542
2516
contract_stake. total_staked_amount( period) ,
2543
2517
total_stake_amount - amount_1 * 3 - amount_2
@@ -2563,10 +2537,9 @@ fn contract_stake_amount_unstake_is_ok() {
2563
2537
contract_stake. stake ( total_stake_amount, period_info, era_3) ;
2564
2538
2565
2539
contract_stake. unstake (
2566
- contract_stake. total_staked_amount ( period) ,
2540
+ vec ! [ ( era_3 , contract_stake. total_staked_amount( period) ) ] , // TODO: revisit this
2567
2541
period_info,
2568
2542
era_3,
2569
- ( EraNumber :: zero ( ) , Balance :: zero ( ) ) ,
2570
2543
) ;
2571
2544
assert ! ( contract_stake. staked. is_empty( ) ) ;
2572
2545
assert ! ( contract_stake. staked_future. is_none( ) ) ;
0 commit comments