Proxy Storage(代理存储)

加载实现合约的源码和存储布局,同时继续从代理地址读取链上状态。

Proxy(代理合约)使用固定地址保存状态,并通过 delegatecall 将外部调用交给另一个合约执行;后者称为 Implementation(实现合约)。

分析时要分开看:状态在代理地址,代码和存储布局通常来自实现合约。升级通常只更换实现合约地址,代理地址和已有状态不会改变。

页面提示

检测到代理后,页面顶部会显示实现合约地址和代理类型。

操作结果
Load Implementation加载实现合约的源码和 Storage Layout。
Load Nest Implementation实现合约仍是代理时,继续加载下一层实现合约。
Reset回到最初识别到的代理信息。

示例

示例使用本地代理信息,不会发送请求。

  1. 代理地址用于读取状态。
  2. 点击 Load Implementation,加载实现合约的源码和布局。
  3. 在 Storage Layout 中查看变量位置或查询值;状态仍从代理地址读取。
  4. 若实现合约也是代理,点击 Load Nest Implementation 继续向下查找。

注意

  • 代理并不等于实现合约。把实现合约地址当作状态地址查询,通常会得到错误结果。
  • 升级要求新实现合约与已有存储布局兼容;不兼容会导致变量被错误解码,甚至破坏状态。
  • 未识别到代理时,页面不会显示加载实现合约的操作。

下一步