git.delta.rocks / unique-network / refs/commits / 6b11b6b4ad35

difftreelog

refactor modify_token_properties

Daniel Shiposha2022-07-04parent: #fc0c967.patch.diff
in: master

1 file changed

modifiedpallets/nonfungible/src/lib.rsdiffbeforeafterboth
86 NonfungibleItemsHaveNoAmount,86 NonfungibleItemsHaveNoAmount,
87 /// Unable to burn NFT with children87 /// Unable to burn NFT with children
88 CantBurnNftWithChildren,88 CantBurnNftWithChildren,
89 /// Unable to create an empty property
90 UnableToCreateEmptyProperty,
91 }89 }
9290
93 #[pallet::config]91 #[pallet::config]
496 is_token_create: bool,494 is_token_create: bool,
497 nesting_budget: &dyn Budget,495 nesting_budget: &dyn Budget,
498 ) -> DispatchResult {496 ) -> DispatchResult {
499 let mut collection_admin_result = None;497 let mut collection_admin_status = None;
500 let mut token_owner_result = None;498 let mut token_owner_result = None;
501499
502 let mut check_collection_admin = || {500 let mut is_collection_admin = || {
503 *collection_admin_result501 *collection_admin_status
504 .get_or_insert_with(|| collection.check_is_owner_or_admin(sender))502 .get_or_insert_with(|| collection.is_owner_or_admin(sender))
505 };503 };
506504
507 let mut check_token_owner = || {505 let mut is_token_owner = || {
508 *token_owner_result.get_or_insert_with(|| {506 *token_owner_result.get_or_insert_with(|| -> Result<bool, DispatchError> {
509 let is_owned = <PalletStructure<T>>::check_indirectly_owned(507 let is_owned = <PalletStructure<T>>::check_indirectly_owned(
510 sender.clone(),508 sender.clone(),
511 collection.id,509 collection.id,
514 nesting_budget,512 nesting_budget,
515 )?;513 )?;
516514
517 if is_owned {
518 Ok(())515 Ok(is_owned)
519 } else {
520 Err(<CommonError<T>>::NoPermission.into())
521 }
522 })516 })
523 };517 };
524518
543 ..537 ..
544 } => {538 } => {
545 //TODO: investigate threats during public minting.539 //TODO: investigate threats during public minting.
546 if is_token_create && (collection_admin || token_owner) {540 if is_token_create && (collection_admin || token_owner) && value.is_some() {
541 // Pass
547 if value.is_some() {542 } else if collection_admin && is_collection_admin() {
548 return Ok(());543 // Pass
549 } else {544 } else if token_owner && is_token_owner()? {
545 // Pass
546 } else {
550 return Err(<Error<T>>::UnableToCreateEmptyProperty.into());547 return Err(<CommonError<T>>::NoPermission.into());
551 }548 }
552 }
553
554 let mut check_result = Err(<CommonError<T>>::NoPermission.into());
555
556 if collection_admin {
557 check_result = check_collection_admin();
558 }
559
560 if token_owner {
561 check_result = check_result.or_else(|_| check_token_owner())
562 }
563
564 check_result?;
565 }549 }
566 }550 }
567551
596 Ok(())580 Ok(())
597 }581 }
598582
599 #[transactional]
600 pub fn set_token_properties(583 pub fn set_token_properties(
601 collection: &NonfungibleHandle<T>,584 collection: &NonfungibleHandle<T>,
602 sender: &T::CrossAccountId,585 sender: &T::CrossAccountId,
634 )617 )
635 }618 }
636619
637 #[transactional]
638 pub fn delete_token_properties(620 pub fn delete_token_properties(
639 collection: &NonfungibleHandle<T>,621 collection: &NonfungibleHandle<T>,
640 sender: &T::CrossAccountId,622 sender: &T::CrossAccountId,