From 93e757afede1bc23f7ae203418edf2fea62d2513 Mon Sep 17 00:00:00 2001 From: Daniel Shiposha Date: Thu, 08 Sep 2022 09:13:42 +0000 Subject: [PATCH] fix: add create_multiple_items_common --- --- a/pallets/fungible/src/lib.rs +++ b/pallets/fungible/src/lib.rs @@ -428,31 +428,14 @@ } /// Minting tokens for multiple IDs. - /// See [`create_item`][`Pallet::create_item`] for more details. - pub fn create_multiple_items( + /// It is a utility function used in [`create_multiple_items`][`Pallet::create_multiple_items`] + /// and [`create_multiple_items_foreign`][`Pallet::create_multiple_items_foreign`] + pub fn create_multiple_items_common( collection: &FungibleHandle, sender: &T::CrossAccountId, data: BTreeMap, nesting_budget: &dyn Budget, ) -> DispatchResult { - // Foreign collection check - ensure!( - !>::get(collection.id), - >::NoPermission - ); - - if !collection.is_owner_or_admin(sender) { - ensure!( - collection.permissions.mint_mode(), - >::PublicMintingNotAllowed - ); - collection.check_allowlist(sender)?; - - for (owner, _) in data.iter() { - collection.check_allowlist(owner)?; - } - } - let total_supply = data .iter() .map(|(_, v)| *v) @@ -511,65 +494,53 @@ } /// Minting tokens for multiple IDs. - /// See [`create_item_foreign`][`Pallet::create_item_foreign`] for more details. - pub fn create_multiple_items_foreign( + /// See [`create_item`][`Pallet::create_item`] for more details. + pub fn create_multiple_items( collection: &FungibleHandle, sender: &T::CrossAccountId, data: BTreeMap, nesting_budget: &dyn Budget, ) -> DispatchResult { - let total_supply = data - .iter() - .map(|(_, v)| *v) - .try_fold(>::get(collection.id), |acc, v| { - acc.checked_add(v) - }) - .ok_or(ArithmeticError::Overflow)?; + // Foreign collection check + ensure!( + !>::get(collection.id), + >::NoPermission + ); - let mut balances = data; - for (k, v) in balances.iter_mut() { - *v = >::get((collection.id, &k)) - .checked_add(*v) - .ok_or(ArithmeticError::Overflow)?; - } + if !collection.is_owner_or_admin(sender) { + ensure!( + collection.permissions.mint_mode(), + >::PublicMintingNotAllowed + ); + collection.check_allowlist(sender)?; - for (to, _) in balances.iter() { - >::check_nesting( - sender.clone(), - to, - collection.id, - TokenId::default(), - nesting_budget, - )?; + for (owner, _) in data.iter() { + collection.check_allowlist(owner)?; + } } - // ========= + Self::create_multiple_items_common( + collection, + sender, + data, + nesting_budget, + ) + } - >::insert(collection.id, total_supply); - for (user, amount) in balances { - >::insert((collection.id, &user), amount); - >::nest_if_sent_to_token_unchecked( - &user, - collection.id, - TokenId::default(), - ); - >::deposit_log( - ERC20Events::Transfer { - from: H160::default(), - to: *user.as_eth(), - value: amount.into(), - } - .to_log(collection_id_to_address(collection.id)), - ); - >::deposit_event(CommonEvent::ItemCreated( - collection.id, - TokenId::default(), - user.clone(), - amount, - )); - } - - Ok(()) + /// Minting tokens for multiple IDs. + /// See [`create_item_foreign`][`Pallet::create_item_foreign`] for more details. + pub fn create_multiple_items_foreign( + collection: &FungibleHandle, + sender: &T::CrossAccountId, + data: BTreeMap, + nesting_budget: &dyn Budget, + ) -> DispatchResult { + Self::create_multiple_items_common( + collection, + sender, + data, + nesting_budget, + ) } fn set_allowance_unchecked( -- gitstuff