Proxy Storage(代理存储)
加载实现合约的源码和存储布局,同时继续从代理地址读取链上状态。
Proxy(代理合约)使用固定地址保存状态,并通过 delegatecall 将外部调用交给另一个合约执行;后者称为 Implementation(实现合约)。
分析时要分开看:状态在代理地址,代码和存储布局通常来自实现合约。升级通常只更换实现合约地址,代理地址和已有状态不会改变。
页面提示
检测到代理后,页面顶部会显示实现合约地址和代理类型。
| 操作 | 结果 |
|---|---|
| Load Implementation | 加载实现合约的源码和 Storage Layout。 |
| Load Nest Implementation | 实现合约仍是代理时,继续加载下一层实现合约。 |
| Reset | 回到最初识别到的代理信息。 |
示例
示例使用本地代理信息,不会发送请求。
- 代理地址用于读取状态。
- 点击 Load Implementation,加载实现合约的源码和布局。
- 在 Storage Layout 中查看变量位置或查询值;状态仍从代理地址读取。
- 若实现合约也是代理,点击 Load Nest Implementation 继续向下查找。
注意
- 代理并不等于实现合约。把实现合约地址当作状态地址查询,通常会得到错误结果。
- 升级要求新实现合约与已有存储布局兼容;不兼容会导致变量被错误解码,甚至破坏状态。
- 未识别到代理时,页面不会显示加载实现合约的操作。
