difftreelog
fix destroy only not empty collections
in: master
4 files changed
pallets/common/src/lib.rsdiffbeforeafterboth331 MustBeTokenOwner,331 MustBeTokenOwner,332 /// No permission to perform action332 /// No permission to perform action333 NoPermission,333 NoPermission,334 /// Destroying only empty collections is allowed335 CantDestroyNotEmptyCollection,334 /// Collection is not in mint mode.336 /// Collection is not in mint mode.335 PublicMintingNotAllowed,337 PublicMintingNotAllowed,336 /// Address is not in allow list.338 /// Address is not in allow list.pallets/fungible/src/lib.rsdiffbeforeafterboth--- a/pallets/fungible/src/lib.rs
+++ b/pallets/fungible/src/lib.rs
@@ -145,6 +145,10 @@
) -> DispatchResult {
let id = collection.id;
+ if Self::collection_has_tokens(id) {
+ return Err(<CommonError<T>>::CantDestroyNotEmptyCollection.into());
+ }
+
// =========
PalletCommon::destroy_collection(collection.0, sender)?;
@@ -155,6 +159,10 @@
Ok(())
}
+ fn collection_has_tokens(collection_id: CollectionId) -> bool {
+ <TotalSupply<T>>::get(collection_id) != 0
+ }
+
pub fn burn(
collection: &FungibleHandle<T>,
owner: &T::CrossAccountId,
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)