Upgradeable Solidity without storage gaps: understanding ERC-7201 and OpenZeppelin's namespaced storage
If you have worked with upgradeable Solidity contracts for a while, you probably have a slightly unhealthy fear of state variables.
Adding a function? Fine.
Changing some internal logic? Usually fine.
dilukangelo.dev12 min read