Skip to main content

Python wrapper around the solc binary with 0.5.x support

Project description

Python wrapper around the solc Solidity compiler with 0.5.x support.

Forked from py-solc.

Dependencies

Py-solc-x allows the use of multiple versions of solc and installs them as needed. You must have all required solc dependencies installed for it to work properly.

Versions >=0.4.11 may be installed, however only versions >=0.4.2 are supported and tested.

Quickstart

Installation

pip install py-solc-x

Installing the solc Executable

The first time py-solc-x is imported it will automatically check for an installed version of solc on your system. If none is found, it will install the most recently released version that is compatible with your operating system.

If you wish to install a different version you may do so from within python:

>>> from solcx import install_solc
>>> install_solc('v0.4.25')

Or via the command line:

$ python -m solcx.install v0.4.25

To install the highest compatible version based on the pragma version string:

>>> from solcx import install_solc_pragma
>>> install_solc_pragma('^0.4.20 || >0.5.5 <0.7.0')

To set the version based on the pragma version string - this will use the highest compatible version installed, if you have a compatible version installed, or it will install the highest compatible version:

>>> from solcx import set_solc_version_pragma
>>> set_solc_version_pragma('^0.4.20 || >0.5.5 <0.7.0')

To view available and installed versions:

>>> from solcx import get_installed_solc_versions, set_solc_version
>>> get_installed_solc_versions()
['v0.4.25', 'v0.5.3']
>>> get_available_solc_versions()
['v0.5.8', 'v0.5.7', 'v0.5.6', 'v0.5.5', 'v0.5.4', 'v0.5.3', 'v0.5.2', 'v0.5.1', 'v0.5.0', 'v0.4.25', 'v0.4.24', 'v0.4.23', 'v0.4.22', 'v0.4.21', 'v0.4.20', 'v0.4.19', 'v0.4.18', 'v0.4.17', 'v0.4.16', 'v0.4.15', 'v0.4.14', 'v0.4.13', 'v0.4.12', 'v0.4.11']

To check or modify the active version:

>>> from solcx import get_solc_version, set_solc_version
>>> solcx.get_solc_version()
Version('0.5.7+commit.6da8b019.Linux.gpp')
>>> set_solc_version('v0.4.25')
>>>

Standard JSON Compilation

Use the solcx.compile_standard function to make use of the standard-json compilation feature.

>>> from solcx import compile_standard
>>> compile_standard({
...     'language': 'Solidity',
...     'sources': {'Foo.sol': 'content': "...."},
... })
{
    'contracts': {...},
    'sources': {...},
    'errors': {...},
}
>>> compile_standard({
...     'language': 'Solidity',
...     'sources': {'Foo.sol': {'urls': ["/path/to/my/sources/Foo.sol"]}},
... }, allow_paths="/path/to/my/sources")
{
    'contracts': {...},
    'sources': {...},
    'errors': {...},
}

Legacy Combined JSON compilation

>>> from solcx import compile_source, compile_files, link_code
>>> compile_source("contract Foo { function Foo() {} }")
{
    'Foo': {
        'abi': [{'inputs': [], 'type': 'constructor'}],
        'code': '0x60606040525b5b600a8060126000396000f360606040526008565b00',
        'code_runtime': '0x60606040526008565b00',
        'source': None,
        'meta': {
            'compilerVersion': '0.3.5-9da08ac3',
            'language': 'Solidity',
            'languageVersion': '0',
        },
    },
}
>>> compile_files(["/path/to/Foo.sol", "/path/to/Bar.sol"])
{
    'Foo': {
        'abi': [{'inputs': [], 'type': 'constructor'}],
        'code': '0x60606040525b5b600a8060126000396000f360606040526008565b00',
        'code_runtime': '0x60606040526008565b00',
        'source': None,
        'meta': {
            'compilerVersion': '0.3.5-9da08ac3',
            'language': 'Solidity',
            'languageVersion': '0',
        },
    },
    'Bar': {
        'abi': [{'inputs': [], 'type': 'constructor'}],
        'code': '0x60606040525b5b600a8060126000396000f360606040526008565b00',
        'code_runtime': '0x60606040526008565b00',
        'source': None,
        'meta': {
            'compilerVersion': '0.3.5-9da08ac3',
            'language': 'Solidity',
            'languageVersion': '0',
        },
    },
}
>>> unlinked_code = "606060405260768060106000396000f3606060405260e060020a6000350463e7f09e058114601a575b005b60187f0c55699c00000000000000000000000000000000000000000000000000000000606090815273__TestA_________________________________90630c55699c906064906000906004818660325a03f41560025750505056"
>>> link_code(unlinked_code, {'TestA': '0xd3cda913deb6f67967b99d67acdfa1712c293601'})
... "606060405260768060106000396000f3606060405260e060020a6000350463e7f09e058114601a575b005b60187f0c55699c00000000000000000000000000000000000000000000000000000000606090815273d3cda913deb6f67967b99d67acdfa1712c29360190630c55699c906064906000906004818660325a03f41560025750505056"

Import Path Remappings

solc provides path aliasing allow you to have more reusable project configurations.

You can use this like:

>>> from solcx import compile_source, compile_files, link_code

>>> compile_files([source_file_path], import_remappings=["zeppeling=/my-zeppelin-checkout-folder"])

More information about solc import aliasing

Development

This project was recently forked from py-solc and should be considered a beta. Comments, questions, criticisms and pull requests are welcomed.

Running the tests

Tests have not been updated from py-solc and will likely fail.

You can run the tests with:

py.test tests

Or you can install tox to run the full test suite.

License

This project is licensed under the MIT license.

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

py-solc-x-0.3.0.tar.gz (12.7 kB view details)

Uploaded Source

Built Distribution

py_solc_x-0.3.0-py3-none-any.whl (12.9 kB view details)

Uploaded Python 3

File details

Details for the file py-solc-x-0.3.0.tar.gz.

File metadata

  • Download URL: py-solc-x-0.3.0.tar.gz
  • Upload date:
  • Size: 12.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.18.4 setuptools/40.6.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.5.2

File hashes

Hashes for py-solc-x-0.3.0.tar.gz
Algorithm Hash digest
SHA256 155b357580c772ab0980cce85bc6d9b288fb94ceec995f4edbb9045c67d9269e
MD5 da83182dd85a8689151756e7b5c8e519
BLAKE2b-256 c762f88de37e415e8393a26a8e60f4c1a7023381298119150675a5ac48100675

See more details on using hashes here.

File details

Details for the file py_solc_x-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: py_solc_x-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 12.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.18.4 setuptools/40.6.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.5.2

File hashes

Hashes for py_solc_x-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4ca653bdd5b4689f85ce833472b0c2344e241b49f5bbc8a443860424a97ee6ce
MD5 d33dcb096413d2edec7c5e839d772196
BLAKE2b-256 9dc174a2d0ed2fc0f520baa5fa0cdddf2b276556b5d95128aa6c586c0fc1680f

See more details on using hashes here.

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