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

安装OpenZeppelin后Truffle部署出现Invalid OpCode错误的解决方法

解决Solidity 0.8.20 PUSH0 opcode与Ganache不兼容的问题

方案1:通过Truffle编译配置禁用PUSH0(推荐)

无需修改任何合约文件,直接在truffle-config.js中指定EVM版本为London(不支持PUSH0),编译器会自动生成兼容的字节码:

module.exports = {
  // 其他原有配置...
  compilers: {
    solc: {
      version: "0.8.20", // 保持原版本不变
      settings: {
        evmVersion: "london", // 指定EVM版本,避免生成PUSH0 opcode
        optimizer: {
          enabled: true,
          runs: 200
        }
      }
    }
  }
};

修改后重新执行truffle migrate即可,该方案不依赖版本降级或文件修改,最省心。

方案2:批量修改OpenZeppelin合约的pragma版本

如果需要降级Solidity版本,可通过命令行批量替换node_modules中OpenZeppelin合约的pragma声明:

Linux/macOS 命令

find node_modules/@openzeppelin/contracts -name "*.sol" -exec sed -i '' 's/pragma solidity ^0.8.20/pragma solidity ^0.8.19/' {} \;

Windows PowerShell 命令

Get-ChildItem -Path node_modules/@openzeppelin/contracts -Filter *.sol -Recurse | ForEach-Object {
  (Get-Content $_.FullName) -replace 'pragma solidity ^0.8.20', 'pragma solidity ^0.8.19' | Set-Content $_.FullName
}

为避免每次npm install后配置被覆盖,可在package.json中添加postinstall脚本自动执行替换:

"scripts": {
  "postinstall": "find node_modules/@openzeppelin/contracts -name '*.sol' -exec sed -i '' 's/pragma solidity ^0.8.20/pragma solidity ^0.8.19/' {} \\;"
}

方案3:升级Ganache到支持PUSH0的版本

Ganache v7.8.0及以上版本已支持上海硬分叉(包含PUSH0 opcode),直接升级即可:

npm install -g ganache@latest

升级后重启Ganache,确保链配置启用上海硬分叉(最新版本默认已支持),再执行truffle migrate即可正常部署。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 23:47:02