Proxy Storage
Load implementation source and layout while continuing to read state from the proxy address.
A proxy contract keeps state at a fixed address and uses delegatecall to execute external calls through another contract, called the implementation.
When analyzing it, keep the two separate: state is held at the proxy address, while code and storage layout usually come from the implementation contract. An upgrade normally changes only the implementation address; the proxy address and existing state remain unchanged.
Page indicators
When a proxy is detected, the page shows its implementation address and proxy type at the top.
| Action | Result |
|---|---|
| Load Implementation | Loads the implementation contract's source code and storage layout. |
| Load Nest Implementation | If the implementation is itself a proxy, loads the next implementation layer. |
| Reset | Returns to the originally detected proxy information. |
Example
This example uses local proxy data. It does not send requests.
- The proxy address is used to read state.
- Select Load Implementation to load the implementation contract's source code and layout.
- Inspect variable locations or query values in Storage Layout; state is still read from the proxy address.
- If the implementation is also a proxy, select Load Nest Implementation to continue down the chain.
Notes
- A proxy is not its implementation. Querying state from the implementation address usually returns incorrect results.
- Upgrades require the new implementation's storage layout to be compatible with the existing one. Incompatibility can decode variables incorrectly or corrupt state.
- When no proxy is detected, the page does not show an option to load an implementation.
