Foundry错误代码速查:常见问题与解决方案

Foundry错误代码速查:常见问题与解决方案

【免费下载链接】foundry Foundry is a blazing fast, portable and modular toolkit for Ethereum application development written in Rust. 【免费下载链接】foundry 项目地址: https://gitcode.com/gh_mirrors/fou/foundry

Foundry作为基于Rust的开发工具包,在编译、测试和部署过程中会产生各类错误提示。本文汇总了开发中高频遇到的错误场景,提供代码示例与解决方案,并标注相关实现位置便于深入排查。

编译期错误

循环依赖错误

当项目中存在循环依赖时,Linking模块会抛出明确错误:

#[error("cyclic dependency found, can't link libraries via CREATE2")]
CyclicDependency,

解决方案:通过重构代码拆分公共逻辑到独立包,典型案例可参考包链接/src/lib.rs中的依赖检测实现。

库文件缺失

编译过程中找不到指定库时出现:

#[error("wasn't able to find artifact for library {name} at {file}")]
LibraryNotFound { name: String, file: PathBuf },

排查路径:检查foundry.toml中的libs配置,确保路径正确指向testdata/lib/等库目录。

测试框架错误

Fuzz测试输入拒绝

vm.assume过滤过多输入时触发:

#[error("The `vm.assume` cheatcode rejected too many inputs ({0} allowed)")]
TooManyRejects(usize),

优化建议:参考包EVM/Fuzz/src/error.rs中的阈值设置,调整测试参数或增加输入覆盖率。

断言失败场景

测试中常用带自定义错误信息的断言宏:

function assertEq(uint256 left, uint256 right, string calldata error) external pure;

使用示例

vm.assertEq(balance, 1000, "转账后余额不匹配");

完整断言方法列表见testdata/cheats/Vm.sol

执行期错误

合约调用失败

执行器模块捕获的通用错误:

#[error("execution reverted: {reason} (gas: {})", raw.gas_used)]
Reverted { reason: String, raw: ExecutionResult },

调试技巧:通过forge test -vvv查看详细调用栈,结合包EVM/executors/mod.rs中的错误处理逻辑分析原因。

未知合约调用

当调用不存在的合约地址时:

#[error("Couldn't call unknown contract")]
UnknownContract,

预防措施:在测试中使用vm.label标记地址,如testdata/cheats/Label.t.sol所示范的地址管理模式。

命令行工具错误

Cast参数解析错误

命令行输入格式错误时:

clap::Error::raw(clap::error::ErrorKind::InvalidUtf8, "address must be valid utf8")

校验工具:使用包Cast/bin/cmd/wallet/vanity.rs中的地址验证逻辑,在代码中提前过滤非法输入。

签名解析失败

ABI编码错误会触发:

pub enum FunctionSignatureError {
    #[error("Invalid function signature: {0}")]
    InvalidSignature(String),
}

辅助工具:通过cast sig命令验证函数签名,实现代码位于包Cast/src/errors.rs

错误处理最佳实践

自定义错误设计

Solidity 0.8.4+支持自定义错误类型,推荐写法:

error InsufficientBalance(uint256 required, uint256 available);

// 使用场景
if (balance < amount) revert InsufficientBalance(amount, balance);

格式规范可参考包Fmt/testdata/ErrorDefinition/fmt.sol中的示例。

错误码速查表

错误类型错误码关联模块
循环依赖CyclicDependencylinking
测试拒绝TooManyRejectsevm-fuzz
合约未找到UnknownContractevm-executor

调试工具链

Foundry提供多层级调试能力:

  1. 日志输出forge test -v-vvvv控制日志详细度
  2. 代码覆盖forge coverage生成testdata/cheats/Coverage.t.sol类似报告
  3. 跟踪分析forge trace命令结合包EVM/evm/src/inspectors/stack.rs中的栈跟踪实现

通过本文档无法解决的复杂错误,建议提交issue时附上CONTRIBUTING.md中要求的完整错误日志与最小复现案例。

【免费下载链接】foundry Foundry is a blazing fast, portable and modular toolkit for Ethereum application development written in Rust. 【免费下载链接】foundry 项目地址: https://gitcode.com/gh_mirrors/fou/foundry

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值