diff --git a/frame/nomination-pools/src/lib.rs b/frame/nomination-pools/src/lib.rs index 62d0b3ddd55cb..43fd173068e2e 100644 --- a/frame/nomination-pools/src/lib.rs +++ b/frame/nomination-pools/src/lib.rs @@ -2180,6 +2180,19 @@ impl Pallet { .max(MinCreateBond::::get()) .max(MinJoinBond::::get()) } + /// Remove metadata of bonded pool. + /// + /// All metadata from non-existent bonded_pools are also deleted. + pub fn remove_metadata(bonded_pool_id: PoolId) { + Metadata::::remove(bonded_pool_id); + let metadata_keys = Metadata::::iter_keys(); + + for key in metadata_keys { + if !BondedPools::::contains_key(key) { + Metadata::::remove(key); + } + } + } /// Remove everything related to the given bonded pool. /// /// All sub-pools are also deleted. All accounts are dusted and the leftover of the reward @@ -2220,6 +2233,8 @@ impl Pallet { T::Currency::make_free_balance_be(&bonded_pool.bonded_account(), Zero::zero()); Self::deposit_event(Event::::Destroyed { pool_id: bonded_pool.id }); + Pallet::::remove_metadata(bonded_pool.id); + assert!(!Metadata::::contains_key(bonded_pool.id)); bonded_pool.remove(); }