From c59b04ba24f496fe287b5d37ffce6773cab84a52 Mon Sep 17 00:00:00 2001 From: Raphael Date: Tue, 5 Nov 2024 16:07:00 +0100 Subject: [PATCH] feat: reset team on start_refund --- pallets/pallet-bonded-coins/src/lib.rs | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/pallets/pallet-bonded-coins/src/lib.rs b/pallets/pallet-bonded-coins/src/lib.rs index 65c761f60..0cf2c108a 100644 --- a/pallets/pallet-bonded-coins/src/lib.rs +++ b/pallets/pallet-bonded-coins/src/lib.rs @@ -349,6 +349,7 @@ pub mod pallet { let pool_details = Pools::::get(&pool_id).ok_or(Error::::PoolUnknown)?; + ensure!(pool_details.state.is_live(), Error::::PoolNotLive); ensure!(pool_details.is_manager(&who), Error::::NoPermission); let asset_id = pool_details @@ -866,8 +867,10 @@ pub mod pallet { Error::::NothingToRefund ); - let has_holders = pool_details - .bonded_currencies + // cloning here lets us avoid cloning the pool details later + let bonded_currencies = pool_details.bonded_currencies.clone(); + + let has_holders = bonded_currencies .iter() .any(|asset_id| T::Fungibles::total_issuance(asset_id.clone()) > FungiblesBalanceOf::::zero()); // no token holders to refund @@ -878,6 +881,18 @@ pub mod pallet { new_pool_details.state.start_refund(); Pools::::set(&pool_id, Some(new_pool_details)); + // reset team on currencies to avoid unexpected burns etc. + let pool_account = pool_id.clone().into(); + for asset_id in bonded_currencies { + T::Fungibles::reset_team( + asset_id, + pool_account.clone(), + pool_account.clone(), + pool_account.clone(), + pool_account.clone(), + )?; + } + Self::deposit_event(Event::RefundingStarted { id: pool_id }); Ok(n_currencies)