目录
概述
开发以太坊智能合约,本地编译时,如果本地的 solidity
编译器 solc
的版本与合约代码使用的版本不一致时,编译会失败。
比如说合约使用 0.5.16 版本,而编译器使用 0.7.4 版本。
编译的时候会报以下错误:
Error: Source file requires different compiler version (current compiler is 0.7.4+commit.3f05b770.Linux.g++) - note that nightly builds are considered to be strictly less than the released version
--> StakingRewards.sol:5:1:
|
5 | pragma solidity ^0.5.16;
| ^^^^^^^^^^^^^^^^^^^^^^^^
但是如果你把 0.7.4 版本卸载,安装 0.5.16 版本,下次调试其他版本合约怎么办?难道又要卸载重装?显然不是一个解决办法。
所以我们需要一个 solc
的版本管理工具,可用安装多个 solc
版本,然后选择一个使用,随时可以切换,原理类似于 Java
的版本管理工具 jenv
和 nodejs
的版本管理工具 nvm
。
经过一番对比,我觉得 solc-select 好用,下面做简单介绍。
安装
安装的时候会下载所有稳定版本,solc
应该也不大, 安装很快。
Linux
git clone https://github.com/crytic/solc-select.git
./solc-select/scripts/install.sh
脚本运行完后将 .solc-select
加入 PATH 中, 需要将以下语句加入 .bashrc 或者 .zshrc 文件末尾。
export PATH=$HOME/.solc-select:$PATH
然后 source
rc 文件。
source ~/.zshrc
OS X (测试失败)
osx 我根据官网的安装指引,安装失败了(20201111 号测试),已提了issue 。
目前 commit id: 002b9a8be26533c2240e1265870449f629477e32
有兴趣自己试下。
docker pull trailofbits/solc-select
docker run --read-only -i --rm --entrypoint='/bin/sh' trailofbits/solc-select:latest -c 'cat /usr/bin/install.sh' | bash -e
验证安装
首先检查是否在 PATH 中
$ which solc
/home/shiming/.solc-select/solc
运行 solc --versions
,查看可用的版本,出现版本列表就安装成功了
$ solc --versions
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
......
查看目前所用的版本
$ solc --version
solc, the solidity compiler commandline interface
Version: 0.4.0+commit.acd334c9.Linux.g++
切换版本
$ solc use 0.5.16
Now using version 0.5.16
切换到正确的版本就可以愉快的编译了!
升级
$ solc --upgrade
您好,我按您的步骤从linux系统上做了好几遍,每次做完都是输入which solc有显示,但是输入solc–version没有任何显示,请问可以加您个联系方式吗,我想把我做的的截图给您看一下,您看看是不是我中间步骤有什么问题,非常感谢!下面是我的邮箱。
您好 请问您是怎么解决这个问题的
我在运行./solc-select/scripts/install.sh的时候出现下面的问题,
Installing solc versions into /home/zxy/.solc-select/usr/bin
./install_solc.sh: line 81: curl: command not found
您好,请问您知道搜这是哪里出了问题吗
我也是这个问题。而且打开了那个文件之后,根本没有install.sh的文件
去github看官方最新文档,mac应该早就支持了
问题解决了,谢谢!
Thank you!!1