@@ -1550,6 +1550,18 @@ pub mod pallet {
1550
1550
pub type RevealPeriodEpochs < T : Config > =
1551
1551
StorageMap < _ , Twox64Concat , u16 , u64 , ValueQuery , DefaultRevealPeriodEpochs < T > > ;
1552
1552
1553
+ #[ pallet:: storage]
1554
+ /// --- Map (coldkey, hotkey) --> u64 the last block at which stake was added/removed.
1555
+ pub type LastColdkeyHotkeyStakeBlock < T : Config > = StorageDoubleMap <
1556
+ _ ,
1557
+ Twox64Concat ,
1558
+ T :: AccountId ,
1559
+ Twox64Concat ,
1560
+ T :: AccountId ,
1561
+ u64 ,
1562
+ OptionQuery ,
1563
+ > ;
1564
+
1553
1565
/// ==================
1554
1566
/// ==== Genesis =====
1555
1567
/// ==================
@@ -1588,6 +1600,19 @@ pub mod pallet {
1588
1600
0
1589
1601
}
1590
1602
1603
+ /// Returns the transaction priority for stake operations.
1604
+ pub fn get_priority_staking ( coldkey : & T :: AccountId , hotkey : & T :: AccountId ) -> u64 {
1605
+ match LastColdkeyHotkeyStakeBlock :: < T > :: get ( coldkey, hotkey) {
1606
+ Some ( last_stake_block) => {
1607
+ let current_block_number = Self :: get_current_block_as_u64 ( ) ;
1608
+ let default_priority = current_block_number. saturating_sub ( last_stake_block) ;
1609
+
1610
+ default_priority. saturating_add ( u32:: MAX as u64 )
1611
+ }
1612
+ None => 0 ,
1613
+ }
1614
+ }
1615
+
1591
1616
/// Is the caller allowed to set weights
1592
1617
pub fn check_weights_min_stake ( hotkey : & T :: AccountId , netuid : u16 ) -> bool {
1593
1618
// Blacklist weights transactions for low stake peers.
@@ -1705,11 +1730,15 @@ where
1705
1730
Pallet :: < T > :: get_priority_set_weights ( who, netuid)
1706
1731
}
1707
1732
1733
+ pub fn get_priority_staking ( coldkey : & T :: AccountId , hotkey : & T :: AccountId ) -> u64 {
1734
+ Pallet :: < T > :: get_priority_staking ( coldkey, hotkey)
1735
+ }
1736
+
1708
1737
pub fn check_weights_min_stake ( who : & T :: AccountId , netuid : u16 ) -> bool {
1709
1738
Pallet :: < T > :: check_weights_min_stake ( who, netuid)
1710
1739
}
1711
1740
1712
- pub fn result_to_validity ( result : Result < ( ) , Error < T > > ) -> TransactionValidity {
1741
+ pub fn result_to_validity ( result : Result < ( ) , Error < T > > , priority : u64 ) -> TransactionValidity {
1713
1742
if let Err ( err) = result {
1714
1743
match err {
1715
1744
Error :: < T > :: AmountTooLow => Err ( InvalidTransaction :: Custom (
@@ -1750,7 +1779,7 @@ where
1750
1779
}
1751
1780
} else {
1752
1781
Ok ( ValidTransaction {
1753
- priority : Self :: get_priority_vanilla ( ) ,
1782
+ priority,
1754
1783
..Default :: default ( )
1755
1784
} )
1756
1785
}
@@ -1892,14 +1921,17 @@ where
1892
1921
. into ( ) ;
1893
1922
}
1894
1923
// Fully validate the user input
1895
- Self :: result_to_validity ( Pallet :: < T > :: validate_add_stake (
1896
- who,
1897
- hotkey,
1898
- * netuid,
1899
- * amount_staked,
1900
- * amount_staked,
1901
- false ,
1902
- ) )
1924
+ Self :: result_to_validity (
1925
+ Pallet :: < T > :: validate_add_stake (
1926
+ who,
1927
+ hotkey,
1928
+ * netuid,
1929
+ * amount_staked,
1930
+ * amount_staked,
1931
+ false ,
1932
+ ) ,
1933
+ Self :: get_priority_staking ( who, hotkey) ,
1934
+ )
1903
1935
}
1904
1936
Some ( Call :: add_stake_limit {
1905
1937
hotkey,
@@ -1919,29 +1951,35 @@ where
1919
1951
let max_amount = Pallet :: < T > :: get_max_amount_add ( * netuid, * limit_price) ;
1920
1952
1921
1953
// Fully validate the user input
1922
- Self :: result_to_validity ( Pallet :: < T > :: validate_add_stake (
1923
- who,
1924
- hotkey,
1925
- * netuid,
1926
- * amount_staked,
1927
- max_amount,
1928
- * allow_partial,
1929
- ) )
1954
+ Self :: result_to_validity (
1955
+ Pallet :: < T > :: validate_add_stake (
1956
+ who,
1957
+ hotkey,
1958
+ * netuid,
1959
+ * amount_staked,
1960
+ max_amount,
1961
+ * allow_partial,
1962
+ ) ,
1963
+ Self :: get_priority_staking ( who, hotkey) ,
1964
+ )
1930
1965
}
1931
1966
Some ( Call :: remove_stake {
1932
1967
hotkey,
1933
1968
netuid,
1934
1969
amount_unstaked,
1935
1970
} ) => {
1936
1971
// Fully validate the user input
1937
- Self :: result_to_validity ( Pallet :: < T > :: validate_remove_stake (
1938
- who,
1939
- hotkey,
1940
- * netuid,
1941
- * amount_unstaked,
1942
- * amount_unstaked,
1943
- false ,
1944
- ) )
1972
+ Self :: result_to_validity (
1973
+ Pallet :: < T > :: validate_remove_stake (
1974
+ who,
1975
+ hotkey,
1976
+ * netuid,
1977
+ * amount_unstaked,
1978
+ * amount_unstaked,
1979
+ false ,
1980
+ ) ,
1981
+ Self :: get_priority_staking ( who, hotkey) ,
1982
+ )
1945
1983
}
1946
1984
Some ( Call :: remove_stake_limit {
1947
1985
hotkey,
@@ -1954,14 +1992,17 @@ where
1954
1992
let max_amount = Pallet :: < T > :: get_max_amount_remove ( * netuid, * limit_price) ;
1955
1993
1956
1994
// Fully validate the user input
1957
- Self :: result_to_validity ( Pallet :: < T > :: validate_remove_stake (
1958
- who,
1959
- hotkey,
1960
- * netuid,
1961
- * amount_unstaked,
1962
- max_amount,
1963
- * allow_partial,
1964
- ) )
1995
+ Self :: result_to_validity (
1996
+ Pallet :: < T > :: validate_remove_stake (
1997
+ who,
1998
+ hotkey,
1999
+ * netuid,
2000
+ * amount_unstaked,
2001
+ max_amount,
2002
+ * allow_partial,
2003
+ ) ,
2004
+ Self :: get_priority_staking ( who, hotkey) ,
2005
+ )
1965
2006
}
1966
2007
Some ( Call :: move_stake {
1967
2008
origin_hotkey,
@@ -1978,18 +2019,21 @@ where
1978
2019
}
1979
2020
1980
2021
// Fully validate the user input
1981
- Self :: result_to_validity ( Pallet :: < T > :: validate_stake_transition (
1982
- who,
1983
- who,
1984
- origin_hotkey,
1985
- destination_hotkey,
1986
- * origin_netuid,
1987
- * destination_netuid,
1988
- * alpha_amount,
1989
- * alpha_amount,
1990
- None ,
1991
- false ,
1992
- ) )
2022
+ Self :: result_to_validity (
2023
+ Pallet :: < T > :: validate_stake_transition (
2024
+ who,
2025
+ who,
2026
+ origin_hotkey,
2027
+ destination_hotkey,
2028
+ * origin_netuid,
2029
+ * destination_netuid,
2030
+ * alpha_amount,
2031
+ * alpha_amount,
2032
+ None ,
2033
+ false ,
2034
+ ) ,
2035
+ Self :: get_priority_staking ( who, origin_hotkey) ,
2036
+ )
1993
2037
}
1994
2038
Some ( Call :: transfer_stake {
1995
2039
destination_coldkey,
@@ -2006,18 +2050,21 @@ where
2006
2050
}
2007
2051
2008
2052
// Fully validate the user input
2009
- Self :: result_to_validity ( Pallet :: < T > :: validate_stake_transition (
2010
- who,
2011
- destination_coldkey,
2012
- hotkey,
2013
- hotkey,
2014
- * origin_netuid,
2015
- * destination_netuid,
2016
- * alpha_amount,
2017
- * alpha_amount,
2018
- None ,
2019
- true ,
2020
- ) )
2053
+ Self :: result_to_validity (
2054
+ Pallet :: < T > :: validate_stake_transition (
2055
+ who,
2056
+ destination_coldkey,
2057
+ hotkey,
2058
+ hotkey,
2059
+ * origin_netuid,
2060
+ * destination_netuid,
2061
+ * alpha_amount,
2062
+ * alpha_amount,
2063
+ None ,
2064
+ true ,
2065
+ ) ,
2066
+ Self :: get_priority_staking ( who, hotkey) ,
2067
+ )
2021
2068
}
2022
2069
Some ( Call :: swap_stake {
2023
2070
hotkey,
@@ -2033,18 +2080,21 @@ where
2033
2080
}
2034
2081
2035
2082
// Fully validate the user input
2036
- Self :: result_to_validity ( Pallet :: < T > :: validate_stake_transition (
2037
- who,
2038
- who,
2039
- hotkey,
2040
- hotkey,
2041
- * origin_netuid,
2042
- * destination_netuid,
2043
- * alpha_amount,
2044
- * alpha_amount,
2045
- None ,
2046
- false ,
2047
- ) )
2083
+ Self :: result_to_validity (
2084
+ Pallet :: < T > :: validate_stake_transition (
2085
+ who,
2086
+ who,
2087
+ hotkey,
2088
+ hotkey,
2089
+ * origin_netuid,
2090
+ * destination_netuid,
2091
+ * alpha_amount,
2092
+ * alpha_amount,
2093
+ None ,
2094
+ false ,
2095
+ ) ,
2096
+ Self :: get_priority_staking ( who, hotkey) ,
2097
+ )
2048
2098
}
2049
2099
Some ( Call :: swap_stake_limit {
2050
2100
hotkey,
@@ -2069,18 +2119,21 @@ where
2069
2119
) ;
2070
2120
2071
2121
// Fully validate the user input
2072
- Self :: result_to_validity ( Pallet :: < T > :: validate_stake_transition (
2073
- who,
2074
- who,
2075
- hotkey,
2076
- hotkey,
2077
- * origin_netuid,
2078
- * destination_netuid,
2079
- * alpha_amount,
2080
- max_amount,
2081
- Some ( * allow_partial) ,
2082
- false ,
2083
- ) )
2122
+ Self :: result_to_validity (
2123
+ Pallet :: < T > :: validate_stake_transition (
2124
+ who,
2125
+ who,
2126
+ hotkey,
2127
+ hotkey,
2128
+ * origin_netuid,
2129
+ * destination_netuid,
2130
+ * alpha_amount,
2131
+ max_amount,
2132
+ Some ( * allow_partial) ,
2133
+ false ,
2134
+ ) ,
2135
+ Self :: get_priority_staking ( who, hotkey) ,
2136
+ )
2084
2137
}
2085
2138
Some ( Call :: register { netuid, .. } | Call :: burned_register { netuid, .. } ) => {
2086
2139
if ColdkeySwapScheduled :: < T > :: contains_key ( who) {
0 commit comments