Anyone used the "proxy" pattern to write upgradable smart contracts? I am planning to upgrade/extend my old smart contract, originally, my code looks like this:
mapping(address => uint256) balance;
I am planning to write it like this:
struct PackedBalance {
uint256 balance;
uint256 locked_balance; // to support a new feature.
}
mapping(address => PackedBalance) balance;
My concern is if the "storage" is compatible to the "old version smart contract".
I just read the "Layout of State Variables in Storage". As I understand it, it is compatible. But I am a newbie, so I would like to seek help from some experts.
"compatible" means: I can still read correct "balance" of the existing storage slots. And I can write "locked_balance" without breaking anything(like overwritten).

