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
中)。
终端功能:
find
: 返回槽编号checked_write
: 设置要写到存储槽的数据read_<type>
: 从存储槽中读取值为<type>
。
例子
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 字节的类型,可能找不到槽。