Storage Layout(存储布局)

将状态变量映射到 EVM Storage Slot,并解码指定区块中的变量值。

Storage Layout 显示状态变量在 EVM storage 中的位置和类型。每一行对应一个变量;横向的 0–31 表示 slot 内的字节位置。

界面

区域说明
Slot变量所在的 storage slot。
字节网格显示变量在该 slot 中占用的字节范围。
变量行显示变量名和 Solidity 类型;点击类型区域展开详情。
详情查看 slot、offset、大小及 mapping 或数组的查询路径。

示例

示例使用本地 Storage Layout 和返回值,不会发送请求。

  1. 点击 owneraddress 区域。它从 slot 0 的第 0 个字节开始,占 20 个字节。
  2. 查看 paused。它也在 slot 0,紧接在 owner 后面,占 1 个字节。
  3. 点击 balances。这是 mapping(address => uint256),先输入地址 key,再点击 Query Slot
  4. 展开真实合约中的变量后,可选择最新区块或填写区块高度,再查询对应的链上值。

使用其他布局

当前地址没有布局,或需要用实现合约、同版本合约解释变量时,可以临时替换 Storage Layout。

方式适用场景
Use Info From Other Address输入另一个链和地址,使用该合约的布局。适合实现合约或同版本部署。
Use Storage Layout JSON粘贴编译产物中的布局 JSON。适合已有构建文件或 forge inspect 输出。

示例使用本地地址和 JSON,不会发送请求。

  1. 选择一种来源并应用布局。
  2. 页面会显示当前布局来源;State address 仍是最初打开的地址。
  3. 使用替换后的布局查看变量或查询 slot;完成后点击 Reset 恢复原始布局。

注意

  • 同一个 slot 可以存放多个较小的变量;offset 表示变量在 slot 中的起始字节。
  • mapping 和动态数组没有固定的连续存储位置,需要先提供 key 或索引。
  • 布局来自合约编译信息。没有布局时,仍可查看原始 slot 数据。
  • 替换布局只改变 slot 的解释方式,不会切换状态读取的目标地址。

下一步