Hi there, I'm working with a big smart contract structure, there are around 20 contracts deployed and interoperating. This platform is constantly getting updates and tweaks, we use Upgradeable contracts and most of the OpenZeppelin features and facilities.
However, after a while we noticed how far behind we were on the Solidity versions and also at the same time on the OpenZeppelin versions. We are now facing a big migration that involves a couple of versions of Solidity and OpenZeppelin. We would like to not face this again in the future and have been looking for some answers on how to deal with this regularly and cheaply instead of once a year but costly.
So here are the main questions that arise:
- How do you decide what version is worth upgrading? Since there is a cost related to the update, this decision is not trivially "all versions are worth", right?
- We have contracts that are the base of our platform which are inherited all over the place, for example the OpenZeppelin standard "Ownable". That contract has a strict version of solidity meaning that if we update that contract, we will need to update every dependant, right? If not, how can we reproduce production in other environments?
- What about the AdminUpgradeabilityProxys? They cannot be redeployed with a newer version, right? Those will stay on the oldest version that we have. Is that an issue? Were there enhancements in AdminUpgradeabilityProxy since 2019?