请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

使用0.8.20版本compiler,部署合约时出错

以下是部署时的提示
图片描述
Gas estimation errored with the following message (see below). The transaction execution will likely fail. Do you want to force sending?
Returned error: {“jsonrpc”:“2.0”,“error”:“VM Exception while processing transaction: invalid opcode”,“id”:922399637539502}

如果强行部署,可正确唤醒钱包,但会显示合约部署失败,以下是错误信息:
creation of BalanceManage errored: Returned error: {“jsonrpc”:“2.0”,“error”:"[ethjs-query] while formatting outputs from RPC ‘{“value”:{“code”:-32603,“data”:{“message”:“VM Exception while processing transaction: invalid opcode”,“code”:-32000,“data”:{“0x04bd2818c2eb8a6d789d898623b91b5dbc0fa116d41988d03b086bb6dd9597cb”:{“error”:“invalid opcode”,“program_counter”:176,“return”:“0x”},“stack”:“c: VM Exception while processing transaction: invalid opcode\n at Function.c.fromResults (/usr/local/lib/node_modules/ganache-cli/build/ganache-core.node.cli.js:4:192416)\n at w.processBlock (/usr/local/lib/node_modules/ganache-cli/build/ganache-core.node.cli.js:42:50915)\n at processTicksAndRejections (node:internal/process/task_queues:95:5)”,“name”:“c”}}}}’",“id”:922399637539586}

换成老师在视频里使用的0.8.18版本则没有报错,不知道是为什么
0.8.19版本同样不会报错,于是我在这里 https://github.com/ethereum/solidity/releases 主要查看了0.8.20的改变,却没有发现和报错有关信息,请问遇到这种问题应该怎么办

正在回答

5回答

6468cead0001975607201600.jpg820的目标vm是shanghai以后的evm,增加了push0这个操作码。我看你贴的图用的是ganache cli,它应该还是shanghai之前的evm,不支持push0,所以出错日志中有invalid opercode。push0操作码在eip3855中规定,是0x5f,它之前是invalid opercode。
简单说,820编译成的目标代码会出现0x5f,如果它跑在shanghai之前的evm中就会出你所遇见的错误
1 回复 有任何疑惑可以回复我~
  • 提问者 慕的地3099443 #1
    明白了,谢谢老师
    回复 有任何疑惑可以回复我~ 2023-05-20 22:00:15
残照花开(Adams) 2023-05-20 22:28:42
你可以在用remix内置的vm重现这个错误: 使用任何一个合约,用820编译,然后在deploy&run界面里,在environment下拉框选择shanghai之前的vm,部署合约,就会出这个错误。你还可以看编译结果的json中的二进制码,creationcode中一定会查到0x5f
2 回复 有任何疑惑可以回复我~
残照花开(Adams) 2024-04-19 05:31:05
已经显示是opcode错误,也就是编译成的二进制代码中出现了所部署到的虚拟机不支持的指令。这个跟编译器版本无直接关系,而是要求选择编译时的区块链虚拟机分叉版本,像Berlin,shanghai等。换编译器错误没了,是因为低版本编译器本身就不支持很多新的fork,所以分叉也换了。所以实质是换了分叉。
所以,可以编译器不变,降低分叉。至于具体是哪个分叉新增了对哪个操作码导致的这个问题,可以找到导致问题的分叉后去看那个分叉的changelog,看新增的操作码
0 回复 有任何疑惑可以回复我~
weixin_慕设计3441238 2024-04-18 11:35:28
换成0.8.0或者 0.8.2能解决
0 回复 有任何疑惑可以回复我~
残照花开(Adams) 2023-05-20 22:01:10
820版本的changlog第一条就说的是push0的问题,还是挺清楚的
0 回复 有任何疑惑可以回复我~
  • 不过你的问题非常好,用心了
    回复 有任何疑惑可以回复我~ 2023-05-20 22:02:06
  • 提问者 慕的地3099443 #2
    是我基础知识不足,看到了,但没把它和报错联系起来
    回复 有任何疑惑可以回复我~ 2023-05-20 22:02:57
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信