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

difftreelog

fix deny zero NFT transfer/burn if not owned/allowed

Daniel Shiposha2022-12-07parent: #21b4b8a.patch.diff
in: master

2 files changed

modifiedpallets/nonfungible/src/common.rsdiffbeforeafterboth
--- a/pallets/nonfungible/src/common.rs
+++ b/pallets/nonfungible/src/common.rs
@@ -291,6 +291,7 @@
 				<CommonWeights<T>>::burn_item(),
 			)
 		} else {
+			<Pallet<T>>::check_token_immediate_ownership(self, token, &sender)?;
 			Ok(().into())
 		}
 	}
@@ -320,6 +321,7 @@
 				<CommonWeights<T>>::transfer(),
 			)
 		} else {
+			<Pallet<T>>::check_token_immediate_ownership(self, token, &from)?;
 			Ok(().into())
 		}
 	}
@@ -360,6 +362,8 @@
 				<CommonWeights<T>>::transfer_from(),
 			)
 		} else {
+			<Pallet<T>>::check_allowed(self, &sender, &from, token, nesting_budget)?;
+
 			Ok(().into())
 		}
 	}
@@ -380,6 +384,8 @@
 				<CommonWeights<T>>::burn_from(),
 			)
 		} else {
+			<Pallet<T>>::check_allowed(self, &sender, &from, token, nesting_budget)?;
+
 			Ok(().into())
 		}
 	}
modifiedpallets/nonfungible/src/lib.rsdiffbeforeafterboth
814 <PalletCommon<T>>::set_property_permission(collection, sender, permission)814 <PalletCommon<T>>::set_property_permission(collection, sender, permission)
815 }815 }
816
817 pub fn check_token_immediate_ownership(
818 collection: &NonfungibleHandle<T>,
819 token: TokenId,
820 possible_owner: &T::CrossAccountId,
821 ) -> DispatchResult {
822 let token_data =
823 <TokenData<T>>::get((collection.id, token)).ok_or(<CommonError<T>>::TokenNotFound)?;
824 ensure!(
825 &token_data.owner == possible_owner,
826 <CommonError<T>>::NoPermission
827 );
828 Ok(())
829 }
816830
817 /// Transfer NFT token from one account to another.831 /// Transfer NFT token from one account to another.
818 ///832 ///