Std Storage

Std Storage 是一个库,使操纵存储变得容易。

要使用 Std Storage,请在你的测试合约中导入以下内容:

import {stdStorage, StdStorage} from "forge-std/Test.sol";              

在你的测试合约中添加以下行:

using stdStorage for StdStorage;

然后,通过 stdstore 实例访问 Std Storage。

功能

查询功能:

  • target: 设置目标合约的地址
  • sig: 将函数的 4 字节选择器设置为静态调用
  • with_key: 向函数传递一个参数(可以多次使用)。
  • depth: 设置值在 tuple 中的位置(例如,在 struct 中)。

终端功能:

例子

playerToCharacter 跟踪玩家的角色信息。

// MetaRPG.sol

struct Character {
    string name;
    uint256 level;
}

mapping (address => Character) public playerToCharacter;

比方说,我们想把我们的角色的等级设置为 120。

// MetaRPG.t.sol

stdstore
    .target(address(metaRpg))
    .sig("playerToCharacter(address)")
    .with_key(address(this))
    .depth(1)
    .checked_write(120);

限制因数

  • 不支持访问打包的槽位

已知问题

  • 如果 tuple 包含短于 32 字节的类型,可能找不到槽。