I'm recently learning proxy patterns (https://blog.openzeppelin.com/proxy-patterns/) and understand that although it is not possible to upgrade the code of your already deployed smart contract, it is possible to set-up a proxy contract architecture that will allow you to use new deployed contracts as if your main logic had been upgraded. My question is:
- Why do we need to separate storage and logic layers for proxy patterns?
- What does separating storage and logic layers have relations to contracts being upgradable?