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 older than 0.8.24 requires Rosetta to be installed. See the FAQ on how to install Rosetta.

Usage

By default, solc-select will install the most recent available Solidity file for your version. This will automatically be done when you run solc for the first time.

solc

The global version of solc will automatically be set to to the latest version. You can reset this 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++

By default, solc-select will halt if you try to use a version that you do not have installed already. Use the --always-install flags to bypass this.

$ solc-select use 0.8.1 --always-install
Installing '0.8.1'...
Version '0.8.1' installed.

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

Getting Help

Feel free to stop by our Slack channel 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. or solc binaries previous to 0.8.24 for macOS are Intel-only. Please install Rosetta on your Mac to continue.

solc releases earlier than 0.8.24 require Rosetta to be installed. To see whether you have Rosetta installed on your Mac, run

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

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

/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

You might be using an old version of solc-select or Python if you are seeing this error message. The current stable release supports Windows; try upgrading your solc-select installation with the following command.

pip install --upgrade solc-select

Known Issues

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

OS X: Python distributions on OS X has no certificates and cannot validate SSL connections, a breaking change introduced in Python 3.6. See StackOverflow post for additional details.

The following commands may resolve the issue; adjust the Python version to the one installed on your system:

pip3 install certifi
/Applications/Python\ 3.8/Install\ Certificates.command

Connection refused [investigation ongoing]

Our 0.2.1 version of solc-select pulls older Linux binaries from crytic/solc which seems to have introduced unexpected behavior in certain instances. Apparently, certain ISPs such as Jio may be blocking access to certain GitHub domains. If possible, try using a different Internet provider to see if it resolves the problem.

Alternatively, try downgrading to solc-select version 0.2.0.

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

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. Contact us 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.1.0.tar.gz (46.4 kB view details)

Uploaded Source

Built Distribution

solc_select-1.1.0-py3-none-any.whl (33.8 kB view details)

Uploaded Python 3

File details

Details for the file solc_select-1.1.0.tar.gz.

File metadata

  • Download URL: solc_select-1.1.0.tar.gz
  • Upload date:
  • Size: 46.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.0.1 CPython/3.12.8

File hashes

Hashes for solc_select-1.1.0.tar.gz
Algorithm Hash digest
SHA256 94fb6f976ab50ffccc5757d5beaf76417b27cbe15436cfe2b30cdb838f5c7516
MD5 b34b8a16fcc5b7db8ae18ebb5ca9e53e
BLAKE2b-256 e05555b19b5f6625e7f1a8398e9f19e61843e4c651164cac10673edd412c0678

See more details on using hashes here.

Provenance

The following attestation bundles were made for solc_select-1.1.0.tar.gz:

Publisher: release.yml on crytic/solc-select

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file solc_select-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: solc_select-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 33.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.0.1 CPython/3.12.8

File hashes

Hashes for solc_select-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3bee7c9df024d5517d2cdcae6ce92e622bd387629a52b8e3ff015c58e2db7f80
MD5 b64be1951da3a034efc4e238e39bc86c
BLAKE2b-256 8e1f86baaf154964018ee9766e7655f6f80e7fd491a93a3f1bb1020b29ecd0da

See more details on using hashes here.

Provenance

The following attestation bundles were made for solc_select-1.1.0-py3-none-any.whl:

Publisher: release.yml on crytic/solc-select

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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