当前可稳定运行的Solidity、solc、web3.js、Ganache版本组合咨询
版本兼容性问题原因及稳定组合推荐
报错根因
"VM Exception while processing transaction: invalid opcode"报错核心原因为
ganache-cli@6.1.8内置EVM版本过旧:Solidity 0.8.0之后新增了默认算术溢出检查、自定义错误等语法对应的新操作码,6.1.8版本的Ganache无法识别这类操作码,触发执行异常。
经过验证的稳定版本组合
组合1:支持Solidity 0.8.x全特性(首选,适配目前大多数新项目)
- Solidity:
^0.8.17(0.8.0~0.8.20范围内的版本均可,需和solc版本严格对齐) - solc:
^0.8.17(与代码声明的Solidity主版本号保持一致,不可跨大版本) - web3.js:
^1.8.2(web3.js 1.x系列最终稳定版,接口兼容性好,不建议直接升级4.x版本) - Ganache:
ganache@7.9.1(原ganache-cli已合并到ganache包,7.x系列EVM支持到上海升级,完全兼容Solidity 0.8全版本特性)
组合2:兼容旧项目低版本依赖(适合不想大幅调整现有依赖的场景)
- Solidity:
^0.7.6 - solc:
^0.7.6 - web3.js:
^1.6.1 - ganache-cli:
^6.12.2(ganache-cli 6.x系列最终稳定版,支持Solidity 0.7及之前版本的所有特性)
生效操作步骤
- 卸载全局旧版ganache-cli:
npm uninstall -g ganache-cli - 安装对应版本Ganache:若使用组合1执行
npm install -g ganache@7.9.1,若使用组合2执行npm install -g ganache-cli@6.12.2 - 清理项目缓存:删除项目根目录下的
node_modules文件夹和package-lock.json/yarn.lock文件 - 重新安装项目依赖:执行
npm install - 确认合约编译配置:在truffle/hardhat配置文件中指定的Solidity版本与依赖的solc版本完全匹配
内容的提问来源于stack exchange,提问作者user3791111
相关产品推荐
相关产品推荐

