git.delta.rocks / unique-network / refs/commits / 79ec93ec606f

difftreelog

fix destroy only not empty collections

Daniel Shiposha2022-05-27parent: #b5533c6.patch.diff
in: master

4 files changed

modifiedpallets/common/src/lib.rsdiffbeforeafterboth
--- a/pallets/common/src/lib.rs
+++ b/pallets/common/src/lib.rs
@@ -331,6 +331,8 @@
 		MustBeTokenOwner,
 		/// No permission to perform action
 		NoPermission,
+		/// Destroying only empty collections is allowed
+		CantDestroyNotEmptyCollection,
 		/// Collection is not in mint mode.
 		PublicMintingNotAllowed,
 		/// Address is not in allow list.
modifiedpallets/fungible/src/lib.rsdiffbeforeafterboth
145 ) -> DispatchResult {145 ) -> DispatchResult {
146 let id = collection.id;146 let id = collection.id;
147
148 if Self::collection_has_tokens(id) {
149 return Err(<CommonError<T>>::CantDestroyNotEmptyCollection.into());
150 }
147151
148 // =========152 // =========
149153
155 Ok(())159 Ok(())
156 }160 }
161
162 fn collection_has_tokens(collection_id: CollectionId) -> bool {
163 <TotalSupply<T>>::get(collection_id) != 0
164 }
157165
158 pub fn burn(166 pub fn burn(
159 collection: &FungibleHandle<T>,167 collection: &FungibleHandle<T>,
modifiedpallets/nonfungible/src/lib.rsdiffbeforeafterboth
--- a/pallets/nonfungible/src/lib.rs
+++ b/pallets/nonfungible/src/lib.rs
@@ -79,8 +79,6 @@
 		NonfungibleItemsHaveNoAmount,
 		/// Unable to burn NFT with children
 		CantBurnNftWithChildren,
-		/// Unable to burn a collection containing NFTs that have children
-		CantBurnCollectionWithNestedTokens
 	}
 
 	#[pallet::config]
@@ -295,8 +293,8 @@
 	) -> DispatchResult {
 		let id = collection.id;
 
-		if Self::collection_has_nested_tokens(id) {
-			return Err(<Error<T>>::CantBurnCollectionWithNestedTokens.into());
+		if Self::collection_has_tokens(id) {
+			return Err(<CommonError<T>>::CantDestroyNotEmptyCollection.into());
 		}
 
 		// =========
@@ -972,8 +970,8 @@
 		);
 	}
 
-	fn collection_has_nested_tokens(collection_id: CollectionId) -> bool {
-		<TokenChildren<T>>::iter_prefix((collection_id,)).next().is_some()
+	fn collection_has_tokens(collection_id: CollectionId) -> bool {
+		<TokenData<T>>::iter_prefix((collection_id,)).next().is_some()
 	}
 
 	fn token_has_children(collection_id: CollectionId, token_id: TokenId) -> bool {
modifiedpallets/refungible/src/lib.rsdiffbeforeafterboth
--- a/pallets/refungible/src/lib.rs
+++ b/pallets/refungible/src/lib.rs
@@ -210,6 +210,10 @@
 	) -> DispatchResult {
 		let id = collection.id;
 
+		if Self::collection_has_tokens(id) {
+			return Err(<CommonError<T>>::CantDestroyNotEmptyCollection.into());
+		}
+
 		// =========
 
 		PalletCommon::destroy_collection(collection.0, sender)?;
@@ -225,6 +229,10 @@
 		Ok(())
 	}
 
+	fn collection_has_tokens(collection_id: CollectionId) -> bool {
+		<TokenData<T>>::iter_prefix((collection_id,)).next().is_some()
+	}
+
 	pub fn burn_token(collection: &RefungibleHandle<T>, token_id: TokenId) -> DispatchResult {
 		let burnt = <TokensBurnt<T>>::get(collection.id)
 			.checked_add(1)