difftreelog
fix deny zero NFT transfer/burn if not owned/allowed
in: master
2 files changed
pallets/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())
}
}
pallets/nonfungible/src/lib.rsdiffbeforeafterboth814 <PalletCommon<T>>::set_property_permission(collection, sender, permission)814 <PalletCommon<T>>::set_property_permission(collection, sender, permission)815 }815 }816817 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>>::NoPermission827 );828 Ok(())829 }816830817 /// Transfer NFT token from one account to another.831 /// Transfer NFT token from one account to another.818 ///832 ///