diff --git a/frame/proxy/src/lib.rs b/frame/proxy/src/lib.rs index 023d0253519f7..76ff2662bd0f4 100644 --- a/frame/proxy/src/lib.rs +++ b/frame/proxy/src/lib.rs @@ -40,7 +40,8 @@ use frame_support::{ traits::{Currency, Get, InstanceFilter, IsSubType, IsType, OriginTrait, ReservableCurrency}, RuntimeDebug, }; -use frame_system::{self as system}; +use frame_system::{self as system, ensure_signed}; +pub use pallet::*; use scale_info::TypeInfo; use sp_io::hashing::blake2_256; use sp_runtime::{ @@ -50,8 +51,6 @@ use sp_runtime::{ use sp_std::prelude::*; pub use weights::WeightInfo; -pub use pallet::*; - type CallHashOf = <::CallHasher as Hash>::Output; type BalanceOf = @@ -265,9 +264,7 @@ pub mod pallet { #[pallet::weight(T::WeightInfo::remove_proxies(T::MaxProxies::get()))] pub fn remove_proxies(origin: OriginFor) -> DispatchResult { let who = ensure_signed(origin)?; - let (_, old_deposit) = Proxies::::take(&who); - T::Currency::unreserve(&who, old_deposit); - + Self::remove_all_proxy_delegates(&who); Ok(()) } @@ -799,4 +796,13 @@ impl Pallet { let e = call.dispatch(origin); Self::deposit_event(Event::ProxyExecuted { result: e.map(|_| ()).map_err(|e| e.error) }); } + + /// Removes all proxy delegates for a given delegator. + /// + /// Parameters: + /// - `delegator`: The delegator account. + pub fn remove_all_proxy_delegates(delegator: &T::AccountId) { + let (_, old_deposit) = Proxies::::take(&delegator); + T::Currency::unreserve(&delegator, old_deposit); + } }