使用Mandos框架测试智能合约时报contract invalid错误如何解决?
报错解决方案
Output: Scenario: contract-deploy.scen.json ... FAIL: result code mismatch. Tx 1. Want: 0. Have: 9 (contract invalid). Message: invalid contract code
该报错表示Mandos框架验证合约部署交易时,预期返回成功状态码0,实际返回了9,对应的原因为提交的合约字节码不符合链上虚拟机规范,可按以下步骤排查:
- 核对工具与依赖版本匹配性
执行erdpy --version查看当前使用的erdpy版本,再核对合约Cargo.toml文件中所有elrond-wasm相关依赖的版本号,两者大版本必须保持一致,小版本差不要超过2个,版本不兼容会导致编译出的字节码无法被虚拟机识别。 - 验证合约编译结果有效性
手动执行erdpy contract build命令,确认编译全程无报错、无阻塞性警告,编译完成后output目录下会生成后缀为.wasm的字节码文件。如果编译过程出现未引入wasm编译目标、调用了链上不支持的系统接口、浮点运算等告警,生成的字节码会直接被判定为无效。 - 检查Mandos场景文件配置
打开contract-deploy.scen.json文件,确认deploy步骤中contractCode字段指向的字节码文件路径正确,相对路径需相对于执行erdpy contract test命令的工作目录。同时确认部署交易的gasLimit配置足够覆盖合约部署开销,部署账号余额足够支付gas费用,gas不足也会触发该报错。 - 排查合约代码逻辑问题
检查合约init()初始化方法的逻辑,确认没有参数类型不匹配、访问未声明的存储字段、调用其他未部署合约等会导致初始化失败的逻辑,初始化执行失败也会返回合约无效的状态码。
内容的提问来源于stack exchange,提问作者Moebius
相关产品推荐
相关产品推荐

