--- a/pallets/nonfungible/src/lib.rs +++ b/pallets/nonfungible/src/lib.rs @@ -86,8 +86,6 @@ NonfungibleItemsHaveNoAmount, /// Unable to burn NFT with children CantBurnNftWithChildren, - /// Unable to create an empty property - UnableToCreateEmptyProperty, } #[pallet::config] @@ -496,16 +494,16 @@ is_token_create: bool, nesting_budget: &dyn Budget, ) -> DispatchResult { - let mut collection_admin_result = None; + let mut collection_admin_status = None; let mut token_owner_result = None; - let mut check_collection_admin = || { - *collection_admin_result - .get_or_insert_with(|| collection.check_is_owner_or_admin(sender)) + let mut is_collection_admin = || { + *collection_admin_status + .get_or_insert_with(|| collection.is_owner_or_admin(sender)) }; - let mut check_token_owner = || { - *token_owner_result.get_or_insert_with(|| { + let mut is_token_owner = || { + *token_owner_result.get_or_insert_with(|| -> Result { let is_owned = >::check_indirectly_owned( sender.clone(), collection.id, @@ -514,11 +512,7 @@ nesting_budget, )?; - if is_owned { - Ok(()) - } else { - Err(>::NoPermission.into()) - } + Ok(is_owned) }) }; @@ -543,25 +537,15 @@ .. } => { //TODO: investigate threats during public minting. - if is_token_create && (collection_admin || token_owner) { - if value.is_some() { - return Ok(()); - } else { - return Err(>::UnableToCreateEmptyProperty.into()); - } - } - - let mut check_result = Err(>::NoPermission.into()); - - if collection_admin { - check_result = check_collection_admin(); - } - - if token_owner { - check_result = check_result.or_else(|_| check_token_owner()) + if is_token_create && (collection_admin || token_owner) && value.is_some() { + // Pass + } else if collection_admin && is_collection_admin() { + // Pass + } else if token_owner && is_token_owner()? { + // Pass + } else { + return Err(>::NoPermission.into()); } - - check_result?; } } @@ -596,7 +580,6 @@ Ok(()) } - #[transactional] pub fn set_token_properties( collection: &NonfungibleHandle, sender: &T::CrossAccountId, @@ -634,7 +617,6 @@ ) } - #[transactional] pub fn delete_token_properties( collection: &NonfungibleHandle, sender: &T::CrossAccountId,