git.delta.rocks / unique-network / refs/commits / a4f30ba46d50

difftreelog

Transfer checks fix

str-mv2020-09-30parent: #5c8bf09.patch.diff
in: master

2 files changed

modifiedpallets/nft/src/lib.rsdiffbeforeafterboth
563 let sender = ensure_signed(origin)?;563 let sender = ensure_signed(origin)?;
564 Self::collection_exists(collection_id)?;564 Self::collection_exists(collection_id)?;
565
566 // Transfer permissions check
565 let item_owner = Self::is_item_owner(sender.clone(), collection_id, item_id);567 let target_collection = <Collection<T>>::get(collection_id);
566 if !item_owner568 ensure!(Self::is_item_owner(sender.clone(), collection_id, item_id) ||
567 {
568 if !Self::is_owner_or_admin_permissions(collection_id, sender.clone()) { 569 Self::is_owner_or_admin_permissions(collection_id, sender.clone()),
570 "Only item owner, collection owner and admins can modify item");
571
572 if target_collection.access == AccessMode::WhiteList {
569 Self::check_white_list(collection_id, sender.clone())?;573 Self::check_white_list(collection_id, sender.clone())?;
570 }574 }
571 }
572 let target_collection = <Collection<T>>::get(collection_id);
573575
574 match target_collection.mode576 match target_collection.mode
575 {577 {
590592
591 let sender = ensure_signed(origin)?;593 let sender = ensure_signed(origin)?;
592594
593 // Check access and mint mode 595 // Transfer permissions check
594 let target_collection = <Collection<T>>::get(collection_id);596 let target_collection = <Collection<T>>::get(collection_id);
595 if !Self::is_owner_or_admin_permissions(collection_id, sender.clone()) {597 ensure!(Self::is_item_owner(sender.clone(), collection_id, item_id) ||
596598 Self::is_owner_or_admin_permissions(collection_id, sender.clone()),
599 "Only item owner, collection owner and admins can modify item");
600
601 if target_collection.access == AccessMode::WhiteList {
597 Self::check_white_list(collection_id, sender.clone())?;602 Self::check_white_list(collection_id, sender.clone())?;
598 Self::check_white_list(collection_id, recipient.clone())?;603 Self::check_white_list(collection_id, recipient.clone())?;
599 ensure!(target_collection.access == AccessMode::WhiteList, "Collection must have WhiteList access");
600 ensure!(target_collection.mint_mode == true, "Collection must be in mint mode");
601 }604 }
602605
603 match target_collection.mode606 match target_collection.mode
616619
617 let sender = ensure_signed(origin)?;620 let sender = ensure_signed(origin)?;
618621
619 // amount param stub622 // Transfer permissions check
620 let amount = 100000000;623 let target_collection = <Collection<T>>::get(collection_id);
621
622 let item_owner = Self::is_item_owner(sender.clone(), collection_id, item_id);624 ensure!(Self::is_item_owner(sender.clone(), collection_id, item_id) ||
625 Self::is_owner_or_admin_permissions(collection_id, sender.clone()),
626 "Only item owner, collection owner and admins can approve");
627
623 if !item_owner {628 if target_collection.access == AccessMode::WhiteList {
624 Self::check_white_list(collection_id, approved.clone())?;629 Self::check_white_list(collection_id, sender.clone())?;
630 Self::check_white_list(collection_id, approved.clone())?;
625 }631 }
632
633 // amount param stub
634 let amount = 100000000;
626635
627 let list_exists = <ApprovedList<T>>::contains_key(collection_id, (item_id, sender.clone()));636 let list_exists = <ApprovedList<T>>::contains_key(collection_id, (item_id, sender.clone()));
628 if list_exists {637 if list_exists {
648 pub fn transfer_from(origin, from: T::AccountId, recipient: T::AccountId, collection_id: u64, item_id: u64, value: u64 ) -> DispatchResult {657 pub fn transfer_from(origin, from: T::AccountId, recipient: T::AccountId, collection_id: u64, item_id: u64, value: u64 ) -> DispatchResult {
649658
650 let sender = ensure_signed(origin)?;659 let sender = ensure_signed(origin)?;
651 let approved_list_exists = <ApprovedList<T>>::contains_key(collection_id, (item_id, from.clone()));660 let mut appoved_transfer = false;
652 ensure!(approved_list_exists, "Only approved addresses can call this method");661
653662 // Check approve
663 if <ApprovedList<T>>::contains_key(collection_id, (item_id, from.clone())) {
654 let list_itm = <ApprovedList<T>>::get(collection_id, (item_id, from.clone()));664 let list_itm = <ApprovedList<T>>::get(collection_id, (item_id, from.clone()));
655 let opt_item = list_itm.iter().find(|i| i.approved == sender.clone());665 let opt_item = list_itm.iter().find(|i| i.approved == sender.clone());
656 ensure!(opt_item.is_some(), "No approve found");666 appoved_transfer = opt_item.is_some();
657 ensure!(opt_item.unwrap().amount >= value, "Requested value more than approved");667 ensure!(opt_item.unwrap().amount >= value, "Requested value more than approved");
658668 }
659 // Check access and mint mode 669
670 // Transfer permissions check
660 let target_collection = <Collection<T>>::get(collection_id);671 let target_collection = <Collection<T>>::get(collection_id);
661 if !Self::is_owner_or_admin_permissions(collection_id, sender.clone()) {672 ensure!(appoved_transfer || Self::is_owner_or_admin_permissions(collection_id, sender.clone()),
662673 "Only item owner, collection owner and admins can modify items");
674
675 if target_collection.access == AccessMode::WhiteList {
663 Self::check_white_list(collection_id, sender.clone())?;676 Self::check_white_list(collection_id, sender.clone())?;
664 Self::check_white_list(collection_id, recipient.clone())?;677 Self::check_white_list(collection_id, recipient.clone())?;
665 ensure!(target_collection.access == AccessMode::WhiteList, "Collection must have WhiteList access");
666 ensure!(target_collection.mint_mode == true, "Collection must be in mint mode");
667 }678 }
668679
669 // remove approve680 // remove approve
modifiedpallets/nft/src/tests.rsdiffbeforeafterboth
--- a/pallets/nft/src/tests.rs
+++ b/pallets/nft/src/tests.rs
@@ -330,7 +330,7 @@
         // do approve
         assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));
         assert_eq!(TemplateModule::approved(1, (1, 1)).len(), 1);
-        assert_ok!(TemplateModule::approve(origin1.clone(), 10, 1, 1));
+        assert_ok!(TemplateModule::approve(origin1.clone(), 3, 1, 1));
         assert_eq!(TemplateModule::approved(1, (1, 1)).len(), 2);
         assert_eq!(
             TemplateModule::approved(1, (1, 1))[0],
@@ -400,7 +400,7 @@
         // do approve
         assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));
         assert_eq!(TemplateModule::approved(1, (1, 1)).len(), 1);
-        assert_ok!(TemplateModule::approve(origin1.clone(), 10, 1, 1));
+        assert_ok!(TemplateModule::approve(origin1.clone(), 3, 1, 1));
         assert_eq!(TemplateModule::approved(1, (1, 1)).len(), 2);
         assert_eq!(
             TemplateModule::approved(1, (1, 1))[0],
@@ -427,7 +427,7 @@
         assert_eq!(
             TemplateModule::approved(1, (1, 1))[0],
             ApprovePermissions {
-                approved: 10,
+                approved: 3,
                 amount: 100000000
             }
         );
@@ -472,7 +472,7 @@
         // do approve
         assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));
         assert_eq!(TemplateModule::approved(1, (1, 1)).len(), 1);
-        assert_ok!(TemplateModule::approve(origin1.clone(), 10, 1, 1));
+        assert_ok!(TemplateModule::approve(origin1.clone(), 3, 1, 1));
         assert_eq!(TemplateModule::approved(1, (1, 1)).len(), 2);
         assert_eq!(
             TemplateModule::approved(1, (1, 1))[0],
@@ -499,7 +499,7 @@
         assert_eq!(
             TemplateModule::approved(1, (1, 1))[0],
             ApprovePermissions {
-                approved: 10,
+                approved: 3,
                 amount: 100000000
             }
         );