EIP-7201 Decoder(命名空间存储解码器)

根据根 Slot 和源码中的 Struct 布局解码 EIP-7201 命名空间存储。

EIP-7201 Decoder 用来查看命名空间存储。它把根 slot 和源码中的结构体布局配对,便于查看变量的相对位置、类型和 mapping 路径。

使用 Decoder

Decoder 位于 Storage Layout 下方。

区域说明
Suggestions已识别出的 根 slot → 结构体 组合;点击后加入下方布局。
Base Slot选择或输入 namespace 的根 slot。
Storage Structure选择源码中识别出的 namespace 结构体。
Add将这组 slot 和结构体加入下方的存储布局。

示例

示例使用本地命名空间布局,不会发送请求。

  1. 先点击 Suggestions 中的 根 slot → example.token,将布局加入下方。
  2. 添加后,该建议会显示 已添加,不能重复点击。没有建议时,在 Base Slot 选择或输入根 slot,在 Storage Structure 选择结构体,再点击 Add
  3. 点击 totalSupplybalances 的类型,查看它们相对根 slot 的位置和类型。
  4. mapping 或动态数组还需要 key 或索引,才能继续定位到实际数据位置。

EIP-7201 是什么

EIP-7201 约定了命名空间存储的写法:合约把相关变量放进一个 struct,再为该结构体分配独立根 slot;结构体内部仍按普通 Solidity 存储规则排列。

源码通常会在结构体上标注 namespace:

/// @custom:storage-location erc7201:example.token


struct TokenStorage {


    uint256 totalSupply;


    mapping(address => uint256) balances;


}

erc7201 会根据 namespace id 计算根 slot,公式为 keccak256(keccak256(id) - 1) & ~0xff。这样不同模块可以使用独立的存储空间,降低升级或模块组合时发生 slot 冲突的风险。详细规范见 ERC-7201

它和 Proxy 不同:Proxy 决定调用哪段代码;EIP-7201 决定模块的状态放在哪里。两者可以一起使用,也可以分别使用。

注意

  • namespace 不是普通的 slot 0 布局;先确认根 slot,再解释内部变量。
  • namespace id 应保持稳定。更改 id 会指向另一片存储空间。
  • @custom:storage-location 是布局标注,合约仍需自行按该根 slot 读写数据。

下一步