Foundry测试中stdstore.target调用编译报错,求排查原因
问题原因及解决办法
这个报错是因为Foundry的StdStorage API版本不兼容导致的:
- 旧版Foundry的StdStore使用
.target()方法指定目标合约,但在较新的版本中,该方法已被移除,替换为.address()方法,或者可直接在链式调用中传入合约地址。 - 你参考的示例代码基于旧版Foundry,而当前使用的是更新版本,因此编译器找不到
target成员。
修复步骤
将原来的stdstore.target(...)调用替换为stdstore.address(...),示例如下:
// 原错误写法 uint256 slot = stdstore.target(address(mockERC721)).sig("ownerOf(uint256)").with_key(tokenId).find(); // 修复后写法 uint256 slot = stdstore.address(address(mockERC721)).sig("ownerOf(uint256)").with_key(tokenId).find();
也可以直接传入合约实例(若为接口类型):
uint256 slot = stdstore.address(mockERC721).sig("ownerOf(uint256)").with_key(tokenId).find();
如果问题仍存在,可检查Foundry版本:
- 执行
foundryup更新到最新版本,确保StdStorage的API与代码调用匹配。 - 查阅Foundry官方文档中StdStorage的最新用法,确认链式调用的正确格式。
内容的提问来源于stack exchange,提问作者Ayudh
相关产品推荐
相关产品推荐

