From 4d045166d6ec7519a92975c12c5476093a38af41 Mon Sep 17 00:00:00 2001 From: vjgaur Date: Wed, 16 Nov 2022 12:10:47 +0530 Subject: [PATCH 01/13] Open Add remove_proxies API for pallet-proxies #7557 --- frame/proxy/src/lib.rs | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/frame/proxy/src/lib.rs b/frame/proxy/src/lib.rs index 5c07a2b012243..50a556c977370 100644 --- a/frame/proxy/src/lib.rs +++ b/frame/proxy/src/lib.rs @@ -250,11 +250,23 @@ pub mod pallet { proxy_type: T::ProxyType, delay: T::BlockNumber, ) -> DispatchResult { - let who = ensure_signed(origin)?; - let delegate = T::Lookup::lookup(delegate)?; - Self::remove_proxy_delegate(&who, delegate, proxy_type, delay) + + Self::remove_all_proxy_delegates(&who, delegate, proxy_type, delay) + } + + + #[pallet::weight(T::WeightInfo::remove_all_proxy_delegates(T::MaxProxies::get()))] + pub fn pub remove_all_proxy_delegates(origin: OriginFor, + delegate: AccountIdLookupOf, + proxy_type: T::ProxyType, + delay: T::BlockNumber, + )-> DispatchResult{ + let who = ensure_signed(origin)?; + let delegate = T::Lookup::lookup(delegate)?; + Self::remove_proxy_delegate(&who, delegate, proxy_type, delay) } + /// Unregister all proxy accounts for the sender. /// /// The dispatch origin for this call must be _Signed_. From 2cb0eba5cf0dec419e05adb6ec53b82302f2f9cb Mon Sep 17 00:00:00 2001 From: vjgaur Date: Thu, 8 Dec 2022 16:20:41 +0530 Subject: [PATCH 02/13] added remove_all_proxy_delegates method --- frame/proxy/src/lib.rs | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/frame/proxy/src/lib.rs b/frame/proxy/src/lib.rs index 50a556c977370..88bc7e80e0a42 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 = @@ -250,23 +249,11 @@ pub mod pallet { proxy_type: T::ProxyType, delay: T::BlockNumber, ) -> DispatchResult { - + let who = ensure_signed(origin)?; + let delegate = T::Lookup::lookup(delegate)?; Self::remove_all_proxy_delegates(&who, delegate, proxy_type, delay) } - - #[pallet::weight(T::WeightInfo::remove_all_proxy_delegates(T::MaxProxies::get()))] - pub fn pub remove_all_proxy_delegates(origin: OriginFor, - delegate: AccountIdLookupOf, - proxy_type: T::ProxyType, - delay: T::BlockNumber, - )-> DispatchResult{ - let who = ensure_signed(origin)?; - let delegate = T::Lookup::lookup(delegate)?; - Self::remove_proxy_delegate(&who, delegate, proxy_type, delay) - } - - /// Unregister all proxy accounts for the sender. /// /// The dispatch origin for this call must be _Signed_. @@ -804,4 +791,14 @@ impl Pallet { let e = call.dispatch(origin); Self::deposit_event(Event::ProxyExecuted { result: e.map(|_| ()).map_err(|e| e.error) }); } + + pub fn remove_all_proxy_delegates( + delegator: &T::AccountId, + delegatee: T::AccountId, + proxy_type: T::ProxyType, + delay: T::BlockNumber, + ) -> DispatchResult { + ensure!(delegator != &delegatee, Error::::NoSelfProxy); + Self::remove_proxy_delegate(delegator, delegatee, proxy_type, delay) + } } From 22aee935a959596953b91135dbaf3e0301afcc9c Mon Sep 17 00:00:00 2001 From: vjgaur Date: Thu, 9 Feb 2023 21:41:32 +0530 Subject: [PATCH 03/13] remove all proxy implementation --- frame/proxy/src/lib.rs | 45 +++++++++++++++++++++++++++++------------- 1 file changed, 31 insertions(+), 14 deletions(-) diff --git a/frame/proxy/src/lib.rs b/frame/proxy/src/lib.rs index 88bc7e80e0a42..8b6b6376fd942 100644 --- a/frame/proxy/src/lib.rs +++ b/frame/proxy/src/lib.rs @@ -94,10 +94,11 @@ pub struct Announcement { height: BlockNumber, } + #[frame_support::pallet] pub mod pallet { use super::{DispatchResult, *}; - use frame_support::pallet_prelude::*; + use frame_support::{pallet_prelude::*, traits}; use frame_system::pallet_prelude::*; #[pallet::pallet] @@ -177,6 +178,28 @@ pub mod pallet { type AnnouncementDepositFactor: Get>; } + /// A trait for removing all proxies. + pub trait RemoveAllProxies { + /// Removes all proxies associated with the given account `who`. + fn remove_all_proxy_delegates(who: T::AccountId) -> DispatchResult; + } + + impl RemoveAllProxies for Pallet { + fn remove_all_proxy_delegates(who: T::AccountId) -> DispatchResult { + // Get the current proxies stored in storage. + let mut proxies = Proxies::::get(); + + // Remove the proxy associated with the given account `who`. + let old_deposit = proxies.remove(&who); + + // Unreserve the deposit associated with the removed proxy. + T::Currency::unreserve(&who, old_deposit.unwrap_or_else(Zero::zero)); + + // Return success. + Ok(()) + } + } + #[pallet::call] impl Pallet { /// Dispatch the given `call` from an account that the sender is authorised for through @@ -251,7 +274,7 @@ pub mod pallet { ) -> DispatchResult { let who = ensure_signed(origin)?; let delegate = T::Lookup::lookup(delegate)?; - Self::remove_all_proxy_delegates(&who, delegate, proxy_type, delay) + Self::remove_proxy_delegate(&who, delegate, proxy_type, delay) } /// Unregister all proxy accounts for the sender. @@ -262,10 +285,14 @@ pub mod pallet { /// the unreserved fees will be inaccessible. **All access to this account will be lost.** #[pallet::weight(T::WeightInfo::remove_proxies(T::MaxProxies::get()))] pub fn remove_proxies(origin: OriginFor) -> DispatchResult { + // Ensure that the origin is a signed account. let who = ensure_signed(origin)?; - let (_, old_deposit) = Proxies::::take(&who); - T::Currency::unreserve(&who, old_deposit); + // Call the `remove_all_proxy_delegates` method to remove all proxies associated with + // `who`. + >::remove_all_proxy_delegates(who)?; + + // Return success. Ok(()) } @@ -791,14 +818,4 @@ impl Pallet { let e = call.dispatch(origin); Self::deposit_event(Event::ProxyExecuted { result: e.map(|_| ()).map_err(|e| e.error) }); } - - pub fn remove_all_proxy_delegates( - delegator: &T::AccountId, - delegatee: T::AccountId, - proxy_type: T::ProxyType, - delay: T::BlockNumber, - ) -> DispatchResult { - ensure!(delegator != &delegatee, Error::::NoSelfProxy); - Self::remove_proxy_delegate(delegator, delegatee, proxy_type, delay) - } } From 1e29ace0fc4ca6f5b243bb3a4182186f8d89d0b7 Mon Sep 17 00:00:00 2001 From: vjgaur Date: Sat, 18 Feb 2023 22:26:44 +0530 Subject: [PATCH 04/13] remove_all_proxy_delegate --- frame/proxy/src/lib.rs | 44 +++++++++++++++--------------------------- 1 file changed, 16 insertions(+), 28 deletions(-) diff --git a/frame/proxy/src/lib.rs b/frame/proxy/src/lib.rs index 7317708a0d03f..8dbc5e1557b72 100644 --- a/frame/proxy/src/lib.rs +++ b/frame/proxy/src/lib.rs @@ -94,11 +94,10 @@ pub struct Announcement { height: BlockNumber, } - #[frame_support::pallet] pub mod pallet { use super::{DispatchResult, *}; - use frame_support::{pallet_prelude::*, traits}; + use frame_support::{pallet_prelude::*}; use frame_system::pallet_prelude::*; #[pallet::pallet] @@ -178,28 +177,6 @@ pub mod pallet { type AnnouncementDepositFactor: Get>; } - /// A trait for removing all proxies. - pub trait RemoveAllProxies { - /// Removes all proxies associated with the given account `who`. - fn remove_all_proxy_delegates(who: T::AccountId) -> DispatchResult; - } - - impl RemoveAllProxies for Pallet { - fn remove_all_proxy_delegates(who: T::AccountId) -> DispatchResult { - // Get the current proxies stored in storage. - let mut proxies = Proxies::::get(); - - // Remove the proxy associated with the given account `who`. - let old_deposit = proxies.remove(&who); - - // Unreserve the deposit associated with the removed proxy. - T::Currency::unreserve(&who, old_deposit.unwrap_or_else(Zero::zero)); - - // Return success. - Ok(()) - } - } - #[pallet::call] impl Pallet { /// Dispatch the given `call` from an account that the sender is authorised for through @@ -287,14 +264,11 @@ pub mod pallet { #[pallet::call_index(3)] #[pallet::weight(T::WeightInfo::remove_proxies(T::MaxProxies::get()))] pub fn remove_proxies(origin: OriginFor) -> DispatchResult { - // Ensure that the origin is a signed account. let who = ensure_signed(origin)?; // Call the `remove_all_proxy_delegates` method to remove all proxies associated with - // `who`. - >::remove_all_proxy_delegates(who)?; + Self::remove_all_proxy_delegates(&who); - // Return success. Ok(()) } @@ -826,4 +800,18 @@ impl Pallet { let e = call.dispatch(origin); Self::deposit_event(Event::ProxyExecuted { result: e.map(|_| ()).map_err(|e| e.error) }); } + + fn remove_all_proxy_delegates(who: &T::AccountId) { + >::mutate(| proxies: &mut > | + { + if let Some(delegates) = proxies.get_mut(&who) { + let old_deposit = proxies.take(&who); + delegates.clear(); + if let Some(old_deposit) = old_deposit { + // Return the deposit back to the sender account + T::Currency::unreserve(&who, old_deposit); + } + } + }); + } } From d7aa3dae5aeb342ea8f54d708dba4ff08c0f2354 Mon Sep 17 00:00:00 2001 From: vjgaur Date: Thu, 2 Mar 2023 12:08:48 +0530 Subject: [PATCH 05/13] reverted changes --- frame/proxy/src/lib.rs | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/frame/proxy/src/lib.rs b/frame/proxy/src/lib.rs index 8dbc5e1557b72..c0c455ddbfade 100644 --- a/frame/proxy/src/lib.rs +++ b/frame/proxy/src/lib.rs @@ -49,6 +49,7 @@ use sp_runtime::{ DispatchResult, }; use sp_std::prelude::*; +use system::Origin; pub use weights::WeightInfo; type CallHashOf = <::CallHasher as Hash>::Output; @@ -97,7 +98,7 @@ pub struct Announcement { #[frame_support::pallet] pub mod pallet { use super::{DispatchResult, *}; - use frame_support::{pallet_prelude::*}; + use frame_support::pallet_prelude::*; use frame_system::pallet_prelude::*; #[pallet::pallet] @@ -265,10 +266,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)?; - - // Call the `remove_all_proxy_delegates` method to remove all proxies associated with Self::remove_all_proxy_delegates(&who); - Ok(()) } @@ -801,17 +799,10 @@ impl Pallet { Self::deposit_event(Event::ProxyExecuted { result: e.map(|_| ()).map_err(|e| e.error) }); } - fn remove_all_proxy_delegates(who: &T::AccountId) { - >::mutate(| proxies: &mut > | - { - if let Some(delegates) = proxies.get_mut(&who) { - let old_deposit = proxies.take(&who); - delegates.clear(); - if let Some(old_deposit) = old_deposit { - // Return the deposit back to the sender account - T::Currency::unreserve(&who, old_deposit); - } - } - }); + pub fn remove_all_proxy_delegates(who: &T::AccountId)-> DispatchResult { + let mut proxies = Proxies::::get(); + let old_deposit = proxies.remove(&who); + T::Currency::unreserve(&who, old_deposit.unwrap_or_else(Zero::zero)); + Ok(()) } } From 344c769bd979455cca85bcd56e59201d320d44bb Mon Sep 17 00:00:00 2001 From: vjgaur Date: Thu, 2 Mar 2023 17:44:56 +0530 Subject: [PATCH 06/13] fixed 7557 --- frame/proxy/src/lib.rs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/frame/proxy/src/lib.rs b/frame/proxy/src/lib.rs index c0c455ddbfade..6ef78253c8b35 100644 --- a/frame/proxy/src/lib.rs +++ b/frame/proxy/src/lib.rs @@ -799,10 +799,9 @@ impl Pallet { Self::deposit_event(Event::ProxyExecuted { result: e.map(|_| ()).map_err(|e| e.error) }); } - pub fn remove_all_proxy_delegates(who: &T::AccountId)-> DispatchResult { - let mut proxies = Proxies::::get(); - let old_deposit = proxies.remove(&who); - T::Currency::unreserve(&who, old_deposit.unwrap_or_else(Zero::zero)); + pub fn remove_all_proxy_delegates(who: &T::AccountId) -> DispatchResult { + let (_, old_deposit) = Proxies::::take(&who); + T::Currency::unreserve(&who, old_deposit); Ok(()) } } From ae42ed12d73b230c47cf390585feb4cdb5e7361c Mon Sep 17 00:00:00 2001 From: vjgaur Date: Fri, 3 Mar 2023 00:54:18 +0530 Subject: [PATCH 07/13] fixed warnings --- frame/proxy/src/lib.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/frame/proxy/src/lib.rs b/frame/proxy/src/lib.rs index 6ef78253c8b35..b5659b88db1db 100644 --- a/frame/proxy/src/lib.rs +++ b/frame/proxy/src/lib.rs @@ -49,7 +49,6 @@ use sp_runtime::{ DispatchResult, }; use sp_std::prelude::*; -use system::Origin; pub use weights::WeightInfo; type CallHashOf = <::CallHasher as Hash>::Output; @@ -266,7 +265,12 @@ pub mod pallet { #[pallet::weight(T::WeightInfo::remove_proxies(T::MaxProxies::get()))] pub fn remove_proxies(origin: OriginFor) -> DispatchResult { let who = ensure_signed(origin)?; - Self::remove_all_proxy_delegates(&who); + let result = Self::remove_all_proxy_delegates(&who); + if let Result::Ok(_val) = result { + println!("Successfully removed all proxy delegates."); + } else { + println!("Couldn't remove all proxy delegates"); + } Ok(()) } From db618814629ef7e59a22e8a0471b5dac4bf03f58 Mon Sep 17 00:00:00 2001 From: vjgaur Date: Fri, 3 Mar 2023 01:35:28 +0530 Subject: [PATCH 08/13] removed println! causing build failure on ci/cd pipelines --- frame/proxy/src/lib.rs | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/frame/proxy/src/lib.rs b/frame/proxy/src/lib.rs index b5659b88db1db..6614df788743a 100644 --- a/frame/proxy/src/lib.rs +++ b/frame/proxy/src/lib.rs @@ -266,12 +266,7 @@ pub mod pallet { pub fn remove_proxies(origin: OriginFor) -> DispatchResult { let who = ensure_signed(origin)?; let result = Self::remove_all_proxy_delegates(&who); - if let Result::Ok(_val) = result { - println!("Successfully removed all proxy delegates."); - } else { - println!("Couldn't remove all proxy delegates"); - } - Ok(()) + result } /// Spawn a fresh new account that is guaranteed to be otherwise inaccessible, and From 98b808d192b635df347b3adc47db3cc6f4c65e68 Mon Sep 17 00:00:00 2001 From: vjgaur Date: Fri, 3 Mar 2023 12:59:40 +0530 Subject: [PATCH 09/13] incorporated suggested changes --- frame/proxy/src/lib.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/frame/proxy/src/lib.rs b/frame/proxy/src/lib.rs index 6614df788743a..3dbdfaa23c039 100644 --- a/frame/proxy/src/lib.rs +++ b/frame/proxy/src/lib.rs @@ -265,8 +265,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 result = Self::remove_all_proxy_delegates(&who); - result + Self::remove_all_proxy_delegates(&who) } /// Spawn a fresh new account that is guaranteed to be otherwise inaccessible, and From 09318e6ff6df79117f7cb5f5554f6a561f5a6417 Mon Sep 17 00:00:00 2001 From: vjgaur Date: Fri, 3 Mar 2023 16:43:37 +0530 Subject: [PATCH 10/13] minor change --- frame/proxy/src/lib.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/frame/proxy/src/lib.rs b/frame/proxy/src/lib.rs index 3dbdfaa23c039..4df3b8e0fbc6d 100644 --- a/frame/proxy/src/lib.rs +++ b/frame/proxy/src/lib.rs @@ -265,7 +265,8 @@ pub mod pallet { #[pallet::weight(T::WeightInfo::remove_proxies(T::MaxProxies::get()))] pub fn remove_proxies(origin: OriginFor) -> DispatchResult { let who = ensure_signed(origin)?; - Self::remove_all_proxy_delegates(&who) + Self::remove_all_proxy_delegates(&who); + Ok(()) } /// Spawn a fresh new account that is guaranteed to be otherwise inaccessible, and @@ -797,9 +798,8 @@ impl Pallet { Self::deposit_event(Event::ProxyExecuted { result: e.map(|_| ()).map_err(|e| e.error) }); } - pub fn remove_all_proxy_delegates(who: &T::AccountId) -> DispatchResult { + pub fn remove_all_proxy_delegates(who: &T::AccountId) { let (_, old_deposit) = Proxies::::take(&who); T::Currency::unreserve(&who, old_deposit); - Ok(()) } } From d2d68056404f7cd3c8e27cb351ff4cc9dffeb184 Mon Sep 17 00:00:00 2001 From: "vijayendra.gaur@gmail.com" Date: Tue, 23 May 2023 17:18:12 +0530 Subject: [PATCH 11/13] made suggested changes --- frame/proxy/src/lib.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/frame/proxy/src/lib.rs b/frame/proxy/src/lib.rs index 4df3b8e0fbc6d..fc386e5cd4e07 100644 --- a/frame/proxy/src/lib.rs +++ b/frame/proxy/src/lib.rs @@ -798,8 +798,8 @@ impl Pallet { Self::deposit_event(Event::ProxyExecuted { result: e.map(|_| ()).map_err(|e| e.error) }); } - pub fn remove_all_proxy_delegates(who: &T::AccountId) { - let (_, old_deposit) = Proxies::::take(&who); - T::Currency::unreserve(&who, old_deposit); + pub fn remove_all_proxy_delegates(delegator: &T::AccountId) { + let (_, old_deposit) = Proxies::::take(&delegator); + T::Currency::unreserve(&delegator, old_deposit); } } From b9b0f31454093af50611076209bffb0816627747 Mon Sep 17 00:00:00 2001 From: "vijayendra.gaur@gmail.com" Date: Tue, 23 May 2023 18:31:36 +0530 Subject: [PATCH 12/13] method comment --- frame/proxy/src/lib.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/frame/proxy/src/lib.rs b/frame/proxy/src/lib.rs index fc386e5cd4e07..7dadade8d4324 100644 --- a/frame/proxy/src/lib.rs +++ b/frame/proxy/src/lib.rs @@ -798,6 +798,8 @@ impl Pallet { Self::deposit_event(Event::ProxyExecuted { result: e.map(|_| ()).map_err(|e| e.error) }); } + /// Removes all proxy delegates for a given delegator. + /// It takes the delegator's account ID as a parameter. pub fn remove_all_proxy_delegates(delegator: &T::AccountId) { let (_, old_deposit) = Proxies::::take(&delegator); T::Currency::unreserve(&delegator, old_deposit); From f1a1f221955113a5a58fe7cf5f65f66d86cf2b4d Mon Sep 17 00:00:00 2001 From: Juan Date: Tue, 23 May 2023 15:19:29 +0200 Subject: [PATCH 13/13] Update frame/proxy/src/lib.rs --- frame/proxy/src/lib.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/frame/proxy/src/lib.rs b/frame/proxy/src/lib.rs index 7dadade8d4324..8b20967d16f8c 100644 --- a/frame/proxy/src/lib.rs +++ b/frame/proxy/src/lib.rs @@ -799,7 +799,9 @@ impl Pallet { } /// Removes all proxy delegates for a given delegator. - /// It takes the delegator's account ID as a parameter. + /// + /// 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);