@@ -1671,6 +1671,70 @@ fn test_rate_limits_enforced_on_increase_take() {
1671
1671
} ) ;
1672
1672
}
1673
1673
1674
+ // Test rate-limiting on an increase take just after a decrease take
1675
+ // Prevents a Validator from decreasing take and then increasing it immediately after.
1676
+ #[ test]
1677
+ fn test_rate_limits_enforced_on_decrease_before_increase_take ( ) {
1678
+ new_test_ext ( 1 ) . execute_with ( || {
1679
+ // Make account
1680
+ let hotkey0 = U256 :: from ( 1 ) ;
1681
+ let coldkey0 = U256 :: from ( 3 ) ;
1682
+
1683
+ // Add balance
1684
+ SubtensorModule :: add_balance_to_coldkey_account ( & coldkey0, 100000 ) ;
1685
+
1686
+ // Register the neuron to a new network
1687
+ let netuid = 1 ;
1688
+ add_network ( netuid, 1 , 0 ) ;
1689
+ register_ok_neuron ( netuid, hotkey0, coldkey0, 124124 ) ;
1690
+
1691
+ // Coldkey / hotkey 0 become delegates with 9% take
1692
+ Delegates :: < Test > :: insert ( hotkey0, SubtensorModule :: get_min_delegate_take ( ) + 1 ) ;
1693
+ assert_eq ! (
1694
+ SubtensorModule :: get_hotkey_take( & hotkey0) ,
1695
+ SubtensorModule :: get_min_delegate_take( ) + 1
1696
+ ) ;
1697
+
1698
+ // Decrease take
1699
+ assert_ok ! ( SubtensorModule :: do_decrease_take(
1700
+ RuntimeOrigin :: signed( coldkey0) ,
1701
+ hotkey0,
1702
+ SubtensorModule :: get_min_delegate_take( )
1703
+ ) ) ; // Verify decrease
1704
+ assert_eq ! (
1705
+ SubtensorModule :: get_hotkey_take( & hotkey0) ,
1706
+ SubtensorModule :: get_min_delegate_take( )
1707
+ ) ;
1708
+
1709
+ // Increase take immediately after
1710
+ assert_eq ! (
1711
+ SubtensorModule :: do_increase_take(
1712
+ RuntimeOrigin :: signed( coldkey0) ,
1713
+ hotkey0,
1714
+ SubtensorModule :: get_min_delegate_take( ) + 1
1715
+ ) ,
1716
+ Err ( Error :: <Test >:: DelegateTxRateLimitExceeded . into( ) )
1717
+ ) ; // Verify no change
1718
+ assert_eq ! (
1719
+ SubtensorModule :: get_hotkey_take( & hotkey0) ,
1720
+ SubtensorModule :: get_min_delegate_take( )
1721
+ ) ;
1722
+
1723
+ step_block ( 1 + InitialTxDelegateTakeRateLimit :: get ( ) as u16 ) ;
1724
+
1725
+ // Can increase after waiting
1726
+ assert_ok ! ( SubtensorModule :: do_increase_take(
1727
+ RuntimeOrigin :: signed( coldkey0) ,
1728
+ hotkey0,
1729
+ SubtensorModule :: get_min_delegate_take( ) + 1
1730
+ ) ) ; // Verify increase
1731
+ assert_eq ! (
1732
+ SubtensorModule :: get_hotkey_take( & hotkey0) ,
1733
+ SubtensorModule :: get_min_delegate_take( ) + 1
1734
+ ) ;
1735
+ } ) ;
1736
+ }
1737
+
1674
1738
#[ test]
1675
1739
fn test_get_total_delegated_stake_after_unstaking ( ) {
1676
1740
new_test_ext ( 1 ) . execute_with ( || {
0 commit comments