Hi! This is my first post, so please bear with me!
I would like to understand what the best practice is with regards to using the openzeppelin contracts vs upgradeable contracts repo. My understanding is for most of the interfaces, the code is basically identical, except names have been changed (e.g. IERC20 -> IERC20Upgradeable, SafeMath -> SafeMathUpgradeable). My questions:
- Why were these "clone" interfaces/libraries created? Was it to mostly keep a consistent naming across all contracts/interfaces/libraries in the upgradeable-contracts repo?
- Is it technically safe to use the IERC20 in place of IERC20Upgradeable (or vice versa) when writing my own contracts?
For some background, I am trying to merge code from two different sources, and one uses openzeppelins upgradeable contracts while the other does not.