报错如下:
> 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:查此类英文报错问题,国内用必应>百度哇,查询结果十万八千里哇同志们。
|