@@ -6,15 +6,14 @@ use frame_support::traits::IsSubType;
6
6
pub use pallet:: * ;
7
7
use scale_info:: TypeInfo ;
8
8
use sp_runtime:: { traits:: SignedExtension , transaction_validity:: ValidTransactionBuilder } ;
9
-
10
9
#[ frame_support:: pallet]
11
10
pub mod pallet {
12
11
use frame_support:: storage:: { storage_prefix, unhashed} ;
12
+ use frame_support:: traits:: ReservableCurrency ;
13
13
use frame_support:: { pallet_prelude:: * , traits:: Currency } ;
14
14
use frame_system:: { pallet_prelude:: * , RawOrigin } ;
15
15
use pallet_balances:: { self as balances} ;
16
16
use sp_runtime:: traits:: UniqueSaturatedInto ;
17
-
18
17
#[ pallet:: pallet]
19
18
// #[pallet::generate_store(pub(super) trait Store)]
20
19
#[ pallet:: without_storage_info]
@@ -27,6 +26,12 @@ pub mod pallet {
27
26
SudoMigrated ( T :: AccountId ) ,
28
27
// Sudo key balance has been updated
29
28
SudoBalanceDeposited ( T :: AccountId , T :: Balance ) ,
29
+ // Sudo key proxy has been removed
30
+ SudoProxyRemoved ( T :: AccountId ) ,
31
+ // Sudo key reserved balances have been reset
32
+ SudoReservedBalanceReset ( T :: AccountId , T :: Balance ) ,
33
+ // Sudo key frozen balances have been reset
34
+ SudoFrozenBalancesReset ( T :: AccountId ) ,
30
35
}
31
36
32
37
#[ pallet:: config]
@@ -67,8 +72,8 @@ pub mod pallet {
67
72
}
68
73
}
69
74
70
- let sudo_balance = balances:: Pallet :: < T > :: free_balance ( & sudo_account) ;
71
- if sudo_balance < amount_to_add {
75
+ let sudo_free_balance = balances:: Pallet :: < T > :: free_balance ( & sudo_account) ;
76
+ if sudo_free_balance < amount_to_add {
72
77
let imbalance =
73
78
balances:: Pallet :: < T > :: deposit_creating ( & sudo_account, amount_to_add) ;
74
79
drop ( imbalance) ;
@@ -77,17 +82,46 @@ pub mod pallet {
77
82
amount_to_add,
78
83
) ) ;
79
84
80
- let _ = balances:: Pallet :: < T > :: mutate_account ( & sudo_account, |data| {
85
+ weight = weight. saturating_add ( T :: DbWeight :: get ( ) . writes ( 1 ) ) ;
86
+ }
87
+
88
+ // Unregister all proxy accounts for the sudo account.
89
+ match pallet_proxy:: Pallet :: < T > :: proxies ( & sudo_account) {
90
+ ( proxies, _) if !proxies. is_empty ( ) => {
91
+ let _ = pallet_proxy:: Pallet :: < T > :: remove_proxies (
92
+ RawOrigin :: Signed ( sudo_account. clone ( ) ) . into ( ) ,
93
+ ) ;
94
+ Self :: deposit_event ( Event :: SudoProxyRemoved ( sudo_account. clone ( ) ) ) ;
95
+ weight = weight. saturating_add ( T :: DbWeight :: get ( ) . writes ( 1 ) ) ;
96
+ }
97
+ _ => { }
98
+ }
99
+
100
+ match pallet_balances:: Pallet :: < T > :: reserved_balance ( & sudo_account) {
101
+ reserved_balance if reserved_balance > 0u32 . into ( ) => {
102
+ let _ = <balances:: Pallet < T > as ReservableCurrency < T :: AccountId > >:: unreserve (
103
+ & sudo_account,
104
+ reserved_balance,
105
+ ) ;
106
+ Self :: deposit_event ( Event :: SudoReservedBalanceReset (
107
+ sudo_account. clone ( ) ,
108
+ reserved_balance,
109
+ ) ) ;
110
+ weight = weight. saturating_add ( T :: DbWeight :: get ( ) . writes ( 1 ) ) ;
111
+ }
112
+ _ => { }
113
+ }
114
+
115
+ let _ = balances:: Pallet :: < T > :: mutate_account ( & sudo_account, |data| {
116
+ if data. misc_frozen > 0u32 . into ( ) || data. fee_frozen > 0u32 . into ( ) {
81
117
data. misc_frozen = 0u32 . into ( ) ;
82
118
data. fee_frozen = 0u32 . into ( ) ;
83
- } ) ;
119
+ Self :: deposit_event ( Event :: SudoFrozenBalancesReset ( sudo_account. clone ( ) ) ) ;
120
+ weight = weight. saturating_add ( T :: DbWeight :: get ( ) . writes ( 1 ) ) ;
121
+ }
122
+ } ) ;
84
123
85
- let _ = pallet_proxy:: Pallet :: < T > :: remove_proxies (
86
- RawOrigin :: Signed ( sudo_account) . into ( ) ,
87
- ) ;
88
- weight = weight. saturating_add ( T :: DbWeight :: get ( ) . writes ( 1 ) ) ;
89
- }
90
- weight. saturating_add ( T :: DbWeight :: get ( ) . reads ( 2 ) )
124
+ weight. saturating_add ( T :: DbWeight :: get ( ) . reads ( 5 ) )
91
125
}
92
126
}
93
127
}
0 commit comments