You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Echidna与Hevm假阴性问题?Ethernaut22权限测试异常

断言失败的根本原因(非Hevm假阴性)
  • 核心问题:Ethernaut第22关的DexTwo合约setTokens函数无权限限制
    你混淆了第21关Dex合约和第22关DexTwo合约的实现差异:

    • 第21关Dex的setTokens是构造函数,仅在部署时执行,不可外部调用;
    • 而第22关DexTwo特意把setTokens改成了public无权限校验的函数,任何外部地址都可以调用它修改token1和token2的值。

    你的测试用hevm.prank(dist)模拟非Owner地址调用setTokens时,调用本身就是合法的,自然会修改token值,导致断言token1/token2为address(0)失败——这是测试前提错误,不是Hevm的假阴性问题。

  • 额外可能的测试逻辑问题
    如果你的测试合约在部署DexTwo时未正确初始化Owner,或者dist地址被错误赋值为Owner地址,也会导致调用成功,但这种情况属于测试代码的低级错误,而非Hevm问题。

  • 关于Hevm假阴性的澄清
    Hevm的prank机制是稳定的,它会准确切换调用上下文到指定地址,几乎不会出现假阴性。出现断言失败时,优先检查合约逻辑和测试假设,而不是归咎于Hevm。

内容的提问来源于stack exchange,提问作者Matteo Gigli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 18:22:06