@@ -1660,35 +1660,22 @@ contract LiquidDelegationTest is BaseDelegationTest {
1660
1660
assertEq (totalStaked, 100 ether, "Incorrect total stake " );
1661
1661
}
1662
1662
1663
- function test_UnstakeNotTooMuch () public {
1663
+ function test_LargeUnstakeUndepositValidators () public {
1664
1664
uint256 depositAmount = 10_000_000 ether ;
1665
1665
depositFromPool (BaseDelegation (delegation), 2 * depositAmount, DepositMode.Bootstrapping);
1666
1666
joinPool (BaseDelegation (delegation), 2 * depositAmount, makeAddr ("2 " ), 2 );
1667
1667
joinPool (BaseDelegation (delegation), 2 * depositAmount, makeAddr ("3 " ), 3 );
1668
1668
joinPool (BaseDelegation (delegation), 2 * depositAmount, makeAddr ("4 " ), 4 );
1669
- vm.startPrank (makeAddr ("2 " ));
1670
- delegation.unstake (lst.balanceOf (makeAddr ("2 " )));
1671
- vm.stopPrank ();
1672
- assertEq (delegation.getDeposit (validator (1 )), 15 * depositAmount / 10 , "validator deposits are decreased equally " );
1673
- assertEq (delegation.getDeposit (validator (2 )), 15 * depositAmount / 10 , "validator deposits are decreased equally " );
1674
- assertEq (delegation.getDeposit (validator (3 )), 15 * depositAmount / 10 , "validator deposits are decreased equally " );
1675
- assertEq (delegation.getDeposit (validator (4 )), 15 * depositAmount / 10 , "validator deposits are decreased equally " );
1676
- vm.startPrank (makeAddr ("3 " ));
1677
- delegation.unstake (lst.balanceOf (makeAddr ("3 " )));
1669
+ joinPool (BaseDelegation (delegation), 2 * depositAmount, makeAddr ("5 " ), 5 );
1670
+ vm.startPrank (makeAddr ("5 " ));
1671
+ delegation.leavePool (validator (5 ));
1678
1672
vm.stopPrank ();
1679
- assertEq (delegation.getDeposit (validator (1 )), 10 * depositAmount / 10 , "validator deposits are decreased equally " );
1680
- assertEq (delegation.getDeposit (validator (2 )), 10 * depositAmount / 10 , "validator deposits are decreased equally " );
1681
- assertEq (delegation.getDeposit (validator (3 )), 10 * depositAmount / 10 , "validator deposits are decreased equally " );
1682
- assertEq (delegation.getDeposit (validator (4 )), 10 * depositAmount / 10 , "validator deposits are decreased equally " );
1683
- }
1684
-
1685
- function test_UnstakeTooMuchUndepositValidators () public {
1686
- uint256 depositAmount = 10_000_000 ether ;
1687
- depositFromPool (BaseDelegation (delegation), 2 * depositAmount, DepositMode.Bootstrapping);
1688
- joinPool (BaseDelegation (delegation), 2 * depositAmount, makeAddr ("2 " ), 2 );
1689
- joinPool (BaseDelegation (delegation), 2 * depositAmount, makeAddr ("3 " ), 3 );
1690
- joinPool (BaseDelegation (delegation), 2 * depositAmount, makeAddr ("4 " ), 4 );
1691
1673
assertEq (delegation.getStake (), 80 * depositAmount / 10 , "incorrect stake " );
1674
+ assertEq (delegation.validators ().length , 4 , "incorrect number of validators " );
1675
+ assertEq (delegation.getDeposit (validator (1 )), 20 * depositAmount / 10 , "validator deposits are decreased equally " );
1676
+ assertEq (delegation.getDeposit (validator (2 )), 20 * depositAmount / 10 , "validator deposits are decreased equally " );
1677
+ assertEq (delegation.getDeposit (validator (3 )), 20 * depositAmount / 10 , "validator deposits are decreased equally " );
1678
+ assertEq (delegation.getDeposit (validator (4 )), 20 * depositAmount / 10 , "validator deposits are decreased equally " );
1692
1679
vm.startPrank (makeAddr ("2 " ));
1693
1680
delegation.unstake (lst.balanceOf (makeAddr ("2 " )));
1694
1681
assertEq (delegation.getDeposit (validator (1 )), 15 * depositAmount / 10 , "validator deposits are decreased equally " );
@@ -1715,12 +1702,14 @@ contract LiquidDelegationTest is BaseDelegationTest {
1715
1702
assertEq (delegation.getStake (), 40 * depositAmount / 10 , "incorrect stake " );
1716
1703
assertEq (delegation.validators ().length , 4 , "incorrect number of validators " );
1717
1704
vm.stopPrank ();
1718
- uint256 lstBalance = lst.balanceOf (makeAddr ("4 " ));
1719
1705
vm.startPrank (makeAddr ("4 " ));
1720
- delegation.unstake (15 * lstBalance / 20 );
1706
+ delegation.unstake (15 * lst. balanceOf ( makeAddr ( " 4 " )) / 20 );
1721
1707
assertEq (delegation.getStake (), 25 * depositAmount / 10 , "incorrect stake " );
1708
+ assertEq (delegation.validators ().length , 4 , "incorrect number of validators " );
1722
1709
assertEq (delegation.getDeposit (validator (1 )), 10 * depositAmount / 10 , "validator deposit mismatch " );
1723
1710
assertEq (delegation.getDeposit (validator (2 )), 10 * depositAmount / 10 , "validator deposit mismatch " );
1711
+ assertEq (delegation.getDeposit (validator (3 )), 0 , "validator deposit mismatch " );
1712
+ assertEq (delegation.getDeposit (validator (4 )), 0 , "validator deposit mismatch " );
1724
1713
vm.roll (block .number + delegation.unbondingPeriod ());
1725
1714
balanceBefore = makeAddr ("4 " ).balance;
1726
1715
delegation.claim ();
@@ -1729,6 +1718,46 @@ contract LiquidDelegationTest is BaseDelegationTest {
1729
1718
assertEq (delegation.validators ().length , 2 , "incorrect number of validators " );
1730
1719
assertEq (delegation.getDeposit (validator (1 )), 125 * depositAmount / 100 , "validator deposit mismatch " );
1731
1720
assertEq (delegation.getDeposit (validator (2 )), 125 * depositAmount / 100 , "validator deposit mismatch " );
1721
+ assertEq (delegation.getDeposit (validator (3 )), 0 , "validator deposit mismatch " );
1722
+ assertEq (delegation.getDeposit (validator (4 )), 0 , "validator deposit mismatch " );
1723
+ vm.stopPrank ();
1724
+ vm.startPrank (owner);
1725
+ delegation.unstake (lst.balanceOf (owner));
1726
+ assertEq (delegation.getStake (), 5 * depositAmount / 10 , "incorrect stake " );
1727
+ assertEq (delegation.validators ().length , 2 , "incorrect number of validators " );
1728
+ assertEq (delegation.getDeposit (validator (1 )), 0 , "validator deposit mismatch " );
1729
+ assertEq (delegation.getDeposit (validator (2 )), 0 , "validator deposit mismatch " );
1730
+ assertEq (delegation.getDeposit (validator (3 )), 0 , "validator deposit mismatch " );
1731
+ assertEq (delegation.getDeposit (validator (4 )), 0 , "validator deposit mismatch " );
1732
+ vm.roll (block .number + delegation.unbondingPeriod ());
1733
+ balanceBefore = owner.balance;
1734
+ delegation.claim ();
1735
+ assertEq (owner.balance - balanceBefore, 20 * depositAmount / 10 , "unstaked vs claimed amount mismatch " );
1736
+ assertEq (delegation.getStake (), 5 * depositAmount / 10 , "incorrect stake " );
1737
+ assertEq (delegation.validators ().length , 0 , "incorrect number of validators " );
1738
+ assertEq (delegation.getDeposit (validator (1 )), 0 , "validator deposit mismatch " );
1739
+ assertEq (delegation.getDeposit (validator (2 )), 0 , "validator deposit mismatch " );
1740
+ assertEq (delegation.getDeposit (validator (3 )), 0 , "validator deposit mismatch " );
1741
+ assertEq (delegation.getDeposit (validator (4 )), 0 , "validator deposit mismatch " );
1742
+ vm.stopPrank ();
1743
+ vm.startPrank (makeAddr ("4 " ));
1744
+ delegation.unstake (lst.balanceOf (makeAddr ("4 " )));
1745
+ assertEq (delegation.getStake (), 0 , "incorrect stake " );
1746
+ assertEq (delegation.validators ().length , 0 , "incorrect number of validators " );
1747
+ assertEq (delegation.getDeposit (validator (1 )), 0 , "validator deposit mismatch " );
1748
+ assertEq (delegation.getDeposit (validator (2 )), 0 , "validator deposit mismatch " );
1749
+ assertEq (delegation.getDeposit (validator (3 )), 0 , "validator deposit mismatch " );
1750
+ assertEq (delegation.getDeposit (validator (4 )), 0 , "validator deposit mismatch " );
1751
+ vm.roll (block .number + delegation.unbondingPeriod ());
1752
+ balanceBefore = makeAddr ("4 " ).balance;
1753
+ delegation.claim ();
1754
+ assertEq (makeAddr ("4 " ).balance - balanceBefore, 5 * depositAmount / 10 , "unstaked vs claimed amount mismatch " );
1755
+ assertEq (delegation.getStake (), 0 , "incorrect stake " );
1756
+ assertEq (delegation.validators ().length , 0 , "incorrect number of validators " );
1757
+ assertEq (delegation.getDeposit (validator (1 )), 0 , "validator deposit mismatch " );
1758
+ assertEq (delegation.getDeposit (validator (2 )), 0 , "validator deposit mismatch " );
1759
+ assertEq (delegation.getDeposit (validator (3 )), 0 , "validator deposit mismatch " );
1760
+ assertEq (delegation.getDeposit (validator (4 )), 0 , "validator deposit mismatch " );
1732
1761
vm.stopPrank ();
1733
1762
}
1734
1763
0 commit comments