difftreelog
Transfer checks fix
in: master
2 files changed
pallets/nft/src/lib.rsdiffbeforeafterboth563 let sender = ensure_signed(origin)?;563 let sender = ensure_signed(origin)?;564 Self::collection_exists(collection_id)?;564 Self::collection_exists(collection_id)?;565566 // Transfer permissions check565 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");571572 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);573575574 match target_collection.mode576 match target_collection.mode575 {577 {590592591 let sender = ensure_signed(origin)?;593 let sender = ensure_signed(origin)?;592594593 // Check access and mint mode 595 // Transfer permissions check594 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");600601 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 }602605603 match target_collection.mode606 match target_collection.mode616619617 let sender = ensure_signed(origin)?;620 let sender = ensure_signed(origin)?;618621619 // amount param stub622 // Transfer permissions check620 let amount = 100000000;623 let target_collection = <Collection<T>>::get(collection_id);621622 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");627623 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 }632633 // amount param stub634 let amount = 100000000;626635627 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 {649658650 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");661653662 // Check approve663 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 669670 // Transfer permissions check660 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");674675 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 }668679669 // remove approve680 // remove approvepallets/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
}
);