difftreelog
fix destroy only not empty collections
in: master
4 files changed
pallets/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.
pallets/fungible/src/lib.rsdiffbeforeafterboth145 ) -> DispatchResult {145 ) -> DispatchResult {146 let id = collection.id;146 let id = collection.id;147148 if Self::collection_has_tokens(id) {149 return Err(<CommonError<T>>::CantDestroyNotEmptyCollection.into());150 }147151148 // =========152 // =========149153155 Ok(())159 Ok(())156 }160 }161162 fn collection_has_tokens(collection_id: CollectionId) -> bool {163 <TotalSupply<T>>::get(collection_id) != 0164 }157165158 pub fn burn(166 pub fn burn(159 collection: &FungibleHandle<T>,167 collection: &FungibleHandle<T>,pallets/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 {
pallets/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)