Questions about on design decisions about upgradeable contracts in my project

I just have a few questions about upgradeable contracts. I watched the UUPS tutorial on youtube, and wanted to implement it into my project. Currently, I’m working on a NFT marketplace (token contracts, and marketplace contracts), and I was wondering,

  • Is UUPS the proper upgradeable pattern to go with? (

  • Do all contracts in my project have to be “Upgradeable”? Is it possible to use contracts that use constructors as well?

  • Do I need to add the uint256[50] private __gap; line at the bottome of every contract I write?

Any help would be helpful thank you.

As I mentioned in the workshop, you should evaluate the tradeoffs and decide for your particular use case! UUPS gives you more flexibility for authorizing upgrades, it costs more to deploy each implementation, and it costs less to deploy each proxy.

You can mix upgradeable and non-upgradeable contracts in your system. But for every upgradeable contract, the Solidity contracts need to be "Upgradeable" in the sense of using OpenZeppelin Contracts Upgradeable.

This is not necessary for your own contracts.