使用Python(Web3.py)编译智能合约中的版本问题

报错如下:

> command: `solc --combined-json abi,asm,ast,bin,bin-runtime,clone-bin,devdoc,interface,opcodes,userdoc /home/u0/goproject/bin/cross-channel/smart-contract-v0.5.0/HashedTimelock.sol`
> return code: `1`
> stderr:

> stdout:
Invalid option to --combined-json: clone-bin

首先说明,通过国内外的博客论坛得出的结论是以上问题出自solc与py-solc的版本不兼容。

之前用Web3.py的compile_files()编译过智能合约,当时智能合约的solidity版本是pragma solidity ^0.4.22,py-solc的版本是3.2.0
该组合并不会发生什么问题(实际solc版本应略大于0.4.22才能编译)。

产生问题是因为最近写了个pragma solidity ^0.5.0版本的智能合约,因此本机solc升级到了0.5.1(如何升级solc可参考Ubuntu如何安装任意版本的solc
在solc=0.5.1,py-solc=3.2.0的情况下报最开始的错误,原因即solc>0.5.0版本与py-solc有些语句不兼容。
在这里插入图片描述

国内外论坛有两个解决思路:
1.降低solc或提高py-solc版本,即改回solc=0.4+版本
注意:提高py-solc版本并没有什么作用,目前github提供了py-solc4.0,试了并没用,而且感觉与solc的兼容更差,因此我觉得无论是solc==0.4+还是0.5+都用py-solc=3.2.0即可。
在这里插入图片描述
2.删除py-solc关键字段clone-bin
在这里插入图片描述
两种方法都可行,因为我不想重新改智能合约版本(语法差异太大),因此选择第二种。
main.py找到方式也很简单,一是根据目录,二也可以用编辑器(e.g. pycharm)Ctrl+鼠标左键

PS:查此类英文报错问题,国内用必应>百度哇,查询结果十万八千里哇同志们。
在这里插入图片描述在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值