I am creating a contract with the diamond pattern so I can evolve and add new features to my contract.
- Contract A: an ERC721 that takes care of minting its own NFTs
- Contract B: Business logic that takes user NFTs and mints new NFTs
- Contract C: Utility contract with essential function calls
I want to store the user's NFT and return it back to the user on returning the minted NFT. However, if I upgrade any contract, all NFTs held will be unusable by the new contract.
How should I implement such a vault account implementation?