@@ -16,7 +16,7 @@ use sp_runtime::{
1616} ;
1717use sp_std:: collections:: btree_set:: BTreeSet ;
1818use sp_std:: vec;
19- use substrate_fixed:: types:: U96F32 ;
19+ use substrate_fixed:: types:: { U64F64 , U96F32 } ;
2020use subtensor_runtime_common:: { AlphaBalance , NetUid , TaoBalance } ;
2121use subtensor_swap_interface:: SwapHandler ;
2222
@@ -57,6 +57,28 @@ mod pallet_benchmarks {
5757 Subtensor :: < T > :: add_balance_to_coldkey_account ( who, deposit. into ( ) ) ;
5858 }
5959
60+ /// Add a zero lock to a random hotkey just so that the lock records exist
61+ fn add_lock < T : Config > ( coldkey : & T :: AccountId , netuid : NetUid ) {
62+ let hotkey: T :: AccountId = account ( "RandomHotkey" , 0 , 999 ) ;
63+ Lock :: < T > :: insert (
64+ ( coldkey, netuid, hotkey. clone ( ) ) ,
65+ LockState {
66+ locked_mass : AlphaBalance :: ZERO ,
67+ conviction : U64F64 :: from_num ( 0 ) ,
68+ last_update : 0 ,
69+ } ,
70+ ) ;
71+ HotkeyLock :: < T > :: insert (
72+ netuid,
73+ hotkey,
74+ LockState {
75+ locked_mass : AlphaBalance :: ZERO ,
76+ conviction : U64F64 :: from_num ( 0 ) ,
77+ last_update : 0 ,
78+ } ,
79+ ) ;
80+ }
81+
6082 #[ benchmark]
6183 fn register ( ) {
6284 let netuid = NetUid :: from ( 1 ) ;
@@ -169,6 +191,7 @@ mod pallet_benchmarks {
169191
170192 seed_swap_reserves :: < T > ( netuid) ;
171193 Subtensor :: < T > :: add_balance_to_coldkey_account ( & coldkey, total_stake. into ( ) ) ;
194+ add_lock :: < T > ( & coldkey, netuid) ;
172195
173196 assert_ok ! ( Subtensor :: <T >:: burned_register(
174197 RawOrigin :: Signed ( coldkey. clone( ) ) . into( ) ,
@@ -876,6 +899,7 @@ mod pallet_benchmarks {
876899 let stake_tao = DefaultMinStake :: < T > :: get ( ) . saturating_mul ( 10 . into ( ) ) ;
877900 let deposit = burn_fee. saturating_mul ( 2 . into ( ) ) . saturating_add ( stake_tao) ;
878901 Subtensor :: < T > :: add_balance_to_coldkey_account ( & coldkey, deposit. into ( ) ) ;
902+ add_lock :: < T > ( & coldkey, netuid) ;
879903
880904 assert_ok ! ( Subtensor :: <T >:: burned_register(
881905 RawOrigin :: Signed ( coldkey. clone( ) ) . into( ) ,
@@ -938,6 +962,7 @@ mod pallet_benchmarks {
938962
939963 let wallet_bal = 1000000u32 . into ( ) ;
940964 Subtensor :: < T > :: add_balance_to_coldkey_account ( & coldkey. clone ( ) , wallet_bal) ;
965+ add_lock :: < T > ( & coldkey, netuid) ;
941966
942967 assert_ok ! ( Subtensor :: <T >:: burned_register(
943968 RawOrigin :: Signed ( coldkey. clone( ) ) . into( ) ,
@@ -1005,6 +1030,8 @@ mod pallet_benchmarks {
10051030 let amount_to_be_staked = TaoBalance :: from ( 440_000_000_000_u64 ) ;
10061031 let amount_swapped = AlphaBalance :: from ( 30_000_000_000_u64 ) ;
10071032 Subtensor :: < T > :: add_balance_to_coldkey_account ( & coldkey. clone ( ) , amount) ;
1033+ add_lock :: < T > ( & coldkey, netuid1) ;
1034+ add_lock :: < T > ( & coldkey, netuid2) ;
10081035
10091036 assert_ok ! ( Subtensor :: <T >:: burned_register(
10101037 RawOrigin :: Signed ( coldkey. clone( ) ) . into( ) ,
@@ -1055,6 +1082,7 @@ mod pallet_benchmarks {
10551082 let stake_tao = DefaultMinStake :: < T > :: get ( ) . saturating_mul ( 10 . into ( ) ) ;
10561083 let deposit = reg_fee. saturating_mul ( 2 . into ( ) ) . saturating_add ( stake_tao) ;
10571084 Subtensor :: < T > :: add_balance_to_coldkey_account ( & coldkey, deposit. into ( ) ) ;
1085+ add_lock :: < T > ( & coldkey, netuid) ;
10581086
10591087 assert_ok ! ( Subtensor :: <T >:: burned_register(
10601088 RawOrigin :: Signed ( coldkey. clone( ) ) . into( ) ,
@@ -1111,6 +1139,8 @@ mod pallet_benchmarks {
11111139 let stake_tao = DefaultMinStake :: < T > :: get ( ) . saturating_mul ( 10 . into ( ) ) ;
11121140 let deposit = reg_fee. saturating_mul ( 2 . into ( ) ) . saturating_add ( stake_tao) ;
11131141 Subtensor :: < T > :: add_balance_to_coldkey_account ( & coldkey, deposit. into ( ) ) ;
1142+ add_lock :: < T > ( & coldkey, netuid1) ;
1143+ add_lock :: < T > ( & coldkey, netuid2) ;
11141144
11151145 assert_ok ! ( Subtensor :: <T >:: burned_register(
11161146 RawOrigin :: Signed ( coldkey. clone( ) ) . into( ) ,
@@ -1520,6 +1550,7 @@ mod pallet_benchmarks {
15201550
15211551 let wallet_bal = 1000000u32 . into ( ) ;
15221552 Subtensor :: < T > :: add_balance_to_coldkey_account ( & coldkey. clone ( ) , wallet_bal) ;
1553+ add_lock :: < T > ( & coldkey, netuid) ;
15231554
15241555 assert_ok ! ( Subtensor :: <T >:: burned_register(
15251556 RawOrigin :: Signed ( coldkey. clone( ) ) . into( ) ,
@@ -1906,6 +1937,7 @@ mod pallet_benchmarks {
19061937 let limit = TaoBalance :: from ( 6_000_000_000_u64 ) ;
19071938 let amount = TaoBalance :: from ( 44_000_000_000_u64 ) ;
19081939 Subtensor :: < T > :: add_balance_to_coldkey_account ( & coldkey. clone ( ) , balance_update) ;
1940+ add_lock :: < T > ( & coldkey, netuid) ;
19091941
19101942 let tao_reserve = TaoBalance :: from ( 150_000_000_000_u64 ) ;
19111943 let alpha_in = AlphaBalance :: from ( 100_000_000_000_u64 ) ;
@@ -1937,6 +1969,105 @@ mod pallet_benchmarks {
19371969 assert_eq ! ( PendingChildKeyCooldown :: <T >:: get( ) , cooldown) ;
19381970 }
19391971
1972+ #[ benchmark]
1973+ fn lock_stake ( ) {
1974+ let netuid = NetUid :: from ( 1 ) ;
1975+ let tempo: u16 = 1 ;
1976+
1977+ Subtensor :: < T > :: init_new_network ( netuid, tempo) ;
1978+ SubtokenEnabled :: < T > :: insert ( netuid, true ) ;
1979+ Subtensor :: < T > :: set_burn ( netuid, benchmark_registration_burn ( ) ) ;
1980+ Subtensor :: < T > :: set_network_registration_allowed ( netuid, true ) ;
1981+ Subtensor :: < T > :: set_max_allowed_uids ( netuid, 4096 ) ;
1982+
1983+ let seed: u32 = 1 ;
1984+ let coldkey: T :: AccountId = account ( "Test" , 0 , seed) ;
1985+ let hotkey: T :: AccountId = account ( "Alice" , 0 , seed) ;
1986+ let total_stake = TaoBalance :: from ( 1_000_000_000 ) ;
1987+ let amount = AlphaBalance :: from ( 60_000_000 ) ;
1988+
1989+ seed_swap_reserves :: < T > ( netuid) ;
1990+ Subtensor :: < T > :: add_balance_to_coldkey_account ( & coldkey, total_stake. into ( ) ) ;
1991+
1992+ assert_ok ! ( Subtensor :: <T >:: add_stake(
1993+ RawOrigin :: Signed ( coldkey. clone( ) ) . into( ) ,
1994+ hotkey. clone( ) ,
1995+ netuid,
1996+ total_stake
1997+ ) ) ;
1998+
1999+ #[ extrinsic_call]
2000+ _ (
2001+ RawOrigin :: Signed ( coldkey. clone ( ) ) ,
2002+ hotkey. clone ( ) ,
2003+ netuid,
2004+ amount,
2005+ ) ;
2006+ }
2007+
2008+ #[ benchmark]
2009+ fn move_lock ( ) {
2010+ let netuid = NetUid :: from ( 1 ) ;
2011+ let tempo: u16 = 1 ;
2012+
2013+ Subtensor :: < T > :: init_new_network ( netuid, tempo) ;
2014+ SubtokenEnabled :: < T > :: insert ( netuid, true ) ;
2015+ Subtensor :: < T > :: set_burn ( netuid, benchmark_registration_burn ( ) ) ;
2016+ Subtensor :: < T > :: set_network_registration_allowed ( netuid, true ) ;
2017+ Subtensor :: < T > :: set_max_allowed_uids ( netuid, 4096 ) ;
2018+
2019+ let seed: u32 = 1 ;
2020+ let coldkey: T :: AccountId = account ( "Test" , 0 , seed) ;
2021+ let hotkey: T :: AccountId = account ( "Alice" , 0 , seed) ;
2022+ let hotkey_dest: T :: AccountId = account ( "Bob" , 0 , seed) ;
2023+ let total_stake = TaoBalance :: from ( 1_000_000_000 ) ;
2024+ let amount = AlphaBalance :: from ( 60_000_000 ) ;
2025+
2026+ seed_swap_reserves :: < T > ( netuid) ;
2027+ let burn = Subtensor :: < T > :: get_burn ( netuid) ;
2028+ Subtensor :: < T > :: add_balance_to_coldkey_account (
2029+ & coldkey,
2030+ total_stake
2031+ . saturating_add ( burn. saturating_mul ( 2 . into ( ) ) )
2032+ . into ( ) ,
2033+ ) ;
2034+
2035+ assert_ok ! ( Subtensor :: <T >:: burned_register(
2036+ RawOrigin :: Signed ( coldkey. clone( ) ) . into( ) ,
2037+ netuid,
2038+ hotkey. clone( )
2039+ ) ) ;
2040+
2041+ assert_ok ! ( Subtensor :: <T >:: burned_register(
2042+ RawOrigin :: Signed ( coldkey. clone( ) ) . into( ) ,
2043+ netuid,
2044+ hotkey_dest. clone( )
2045+ ) ) ;
2046+
2047+ assert_ok ! ( Subtensor :: <T >:: add_stake(
2048+ RawOrigin :: Signed ( coldkey. clone( ) ) . into( ) ,
2049+ hotkey. clone( ) ,
2050+ netuid,
2051+ total_stake
2052+ ) ) ;
2053+
2054+ assert_ok ! ( Subtensor :: <T >:: do_lock_stake(
2055+ & coldkey, netuid, & hotkey, amount,
2056+ ) ) ;
2057+
2058+ #[ extrinsic_call]
2059+ _ (
2060+ RawOrigin :: Signed ( coldkey. clone ( ) ) ,
2061+ hotkey_dest. clone ( ) ,
2062+ netuid,
2063+ ) ;
2064+
2065+ assert ! (
2066+ Lock :: <T >:: iter_prefix( ( coldkey, netuid) )
2067+ . any( |( locked_hotkey, _) | locked_hotkey == hotkey_dest)
2068+ ) ;
2069+ }
2070+
19402071 impl_benchmark_test_suite ! (
19412072 Subtensor ,
19422073 crate :: tests:: mock:: new_test_ext( 1 ) ,
0 commit comments