There are many cases where one wants to mint NFT that are non transferable (either temporarily or permanently). An important application would be in DeFi lending using NFTs as collateral, where you borrow money to buy a given NFT, which needs to be guaranteed to stay in your wallet until the loan is fully repaid.
For example the recent FLOAT project implements non-transferability as an option for minted NFTs. However it isn’t really secure as is always possible to get around that constraint using the fact that the ownedNFTs field of the NFT collection (in the NFT standard) has public access, making it possible for the owner to withdraw and transfer his NFTs through a simple transaction.
I have tried to experiment modifying the NFT standard locally by switching ownedNFTs to “access(self)”, however that gives me the error “invalid access modifier for field:
priv. private fields can never be used”. Why is that the case? Shall we modify the standard to allow for that?