场景描述
部署合约的时候,抱错信息如下:
invalid opcode: opcode 0x5f not defined: failed to execute message; message index: 0
BUG 分析
0x5f
是 PUSH0 指令,是 Solidity 0.8.20 开始才有的操作码:如果你部署的公链,底层 EVM 没有升级到 shanghai 这个版本,则会失败。
关于 PUSH0 指令的引入的说明: https://eips.ethereum.org/EIPS/eip-3855
关于 Solidity 0.8.20 版本更新的内容说明: https://blog.soliditylang.org/2023/05/10/solidity-0.8.20-release-announcement/
解决方式
对于没有升级该版本的公链,开发合约的时候,可以使用 Solidity 0.8.19
版本来避开。