Beacon proxies make it possible to upgrade a fleet of contracts through a single beacon, but existing patterns generally assume that every new implementation remains compatible with the proxies’ existing storage layout. This becomes limiting when a fleet needs to upgrade between implementations that organize storage differently.
ERC-8438 proposes a storage-aware beacon proxy pattern. The beacon identifies both the target implementation and its storage layout identifier, while each proxy tracks the identifier for the layout currently initialized in its own storage. When these layouts differ, the proxy can migrate its storage before using the new implementation. If migration cannot be completed, the proxy retains its existing layout and uses a compatible fallback rather than executing incompatible code.
The goal is to preserve coordinated, fleet-wide upgrades while allowing storage migrations to occur safely on a per-proxy basis. The draft specification, reference implementation, and tests are available in the ERCs pull request. I would welcome thoughts on the overall approach and any edge cases that may have been overlooked. Thank you!