Skip to main content

Manage multiple Solidity compiler versions.

Project description

# solc-select A tool to quickly switch between Solidity compiler versions.

The tool is split into two CLI utilities: - solc-select: manages installing and setting different solc compiler versions - solc: wrapper around solc which picks the right version according to what was set via solc-select

The solc binaries are downloaded from https://binaries.soliditylang.org/ which contains official artifacts for many historial and modern solc versions for Linux and macOS.

The versioned binaries are stored in ~/.solc-select/artifacts/.

## Quickstart

` pip3 install solc-select `

To automatically install and use a version, run solc-select use <version> –always-install.

### Running on ARM (Mac M1/M2)

solc requires Rosetta to be installed. See the FAQ on [how to install Rosetta](#oserror-errno-86-bad-cpu-type-in-executable).

## Usage

The global version of solc can be set with the solc-select use <version> command: ` $ solc --version solc, the solidity compiler commandline interface Version: 0.5.2+commit.1df8f40c.Linux.g++ $ solc-select use 0.4.24 Switched global version to 0.4.24 $ solc --version solc, the solidity compiler commandline interface Version: 0.4.24+commit.e67f0147.Linux.g++ `

Use SOLC_VERSION environment variable to override the global version: ` $ solc --version solc, the solidity compiler commandline interface Version: 0.4.24+commit.e67f0147.Linux.g++ $ SOLC_VERSION=0.5.2 solc --version solc, the solidity compiler commandline interface Version: 0.5.2+commit.1df8f40c.Linux.g++ `

You can list all available versions with solc-select install: ` $ solc-select install Available versions to install: 0.3.6 0.4.0 ... 0.8.0 0.8.1 `

And install the one you need with solc-select install <version>: ` $ solc-select install 0.8.1 Installing '0.8.1'... Version '0.8.1' installed. `

You can also install the latest version with solc-select install latest and use the latest version with solc-select use latest

Display the currently installed versions: ` $ solc-select versions 0.8.0 0.4.2 (current, set by /Users/artur/.solc-select/global-version) `

## Getting Help

Feel free to stop by our [Slack channel](https://empirehacking.slack.com/) for help on using or extending solc-select.

## FAQ

### OSError: [Errno 86] Bad CPU type in executable

On newer solc-select versions, this might show as solc binaries for macOS are Intel-only. Please install Rosetta on your Mac to continue.

solc requires Rosetta to be installed. To see whether you have Rosetta installed on your Mac, run

`bash pgrep -q oahd && echo Rosetta is installed || echo Rosetta is NOT installed `

If it is not installed, it can be installed with the command

`bash /usr/sbin/softwareupdate --install-rosetta --agree-to-license `

### solc-version not changing after running solc-select use [version] or setting SOLC_VERSION

Uninstall other installations of solc on your machine. solc-select re-installs solc binaries for your operating system and acts as a wrapper for solc. With duplicate solc installations, this may result in your solc version not being up to date.

### “Unsupported Platform” on Windows

The solc-select version that supports Windows is currently in beta. Uninstall solc-select through pip3 uninstall solc-select and run

`bash pip install solc-select==1.0.0b1 `

Alternatively, for the most up-to-date version, clone this repository and run `bash pip install . --user `

## Known Issues

### SSL: CERTIFICATE_VERIFY_FAILED on running solc-select commands [investigation ongoing]

OS X `bash pip3 install certifi /Applications/Python\ 3.8/Install\ Certificates.command `

Python distributions on OS X has no certificates and cannot validate SSL connections, a breaking change introduced in Python 3.6. See [StackOverflow](https://stackoverflow.com/a/42334357) post for additional details.

### Connection refused [investigation ongoing]

`bash pip3 uninstall solc-select pip3 install solc-select==0.2.0 solc-select install `

Try downgrading to solc-select version 0.2.0.

Our 0.2.1 version of solc-select pulls older Linux binaries from [crytic/solc](https://github.com/crytic/solc) which seems to have introduced unexpected behavior in certain instances.

### solc-select version changes, but solc –version does not match

Users seem to be experiencing situations in which the following command is successful: ` solc-select use <version> ` However, when running the following command, it points to an older version of Solidity. ` solc --version `

solc-select is intended to work with custom binaries. This means that Solidity installed through other means (i.e: brew install solidity) will _not_ work!.

Uninstall other versions Solidity from your computer.

## License

solc-select is licensed and distributed under the [AGPLv3](LICENSE) license. [Contact us](mailto:opensource@trailofbits.com) if you’re looking for an exception to the terms.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

solc-select-1.0.4.tar.gz (21.3 kB view hashes)

Uploaded Source

Built Distribution

solc_select-1.0.4-py3-none-any.whl (20.7 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page