-
Mark Tyneway authored
Add + test a `StorageSetter` contract that can be used by upgrades and storage migrations. This contract exists to decouple migrations from implementations. The existing contracts use `Initialize` which is a leaky abstraction because it includes the fact that the implementation is behind a proxy in the implementation code itself. The logic in `initialize` must include logic that can ensure the storage is correct for any version upgrading to any version as well as going from empty storage for new deployments, adding a lot of complexity. This contract should be used as an intermediate step in upgrades, so that this contract can be used to migrate storage between different implementations.
356effb9