Metadata-Version: 2.1
Name: py-solc-x
Version: 0.3.0
Summary: Python wrapper around the solc binary with 0.5.x support
Home-page: https://github.com/iamdefinitelyahuman/py-solc-x
Author: Benjamin Hauser (forked from py-solc by Piper Merriam)
Author-email: ben.hauser@hyperlink.technology
License: MIT
Keywords: ethereum solidity solc
Platform: UNKNOWN
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Natural Language :: English
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Requires-Python: >=3.4, <4
Requires-Dist: semantic-version (>=2.6.0)
Requires-Dist: requests (>=2.9.1)

py-solc-x
=========

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

Forked from `py-solc <https://github.com/ethereum/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 <https://solidity.readthedocs.io/en/latest/installing-solidity.html#building-from-source>`__
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

.. code:: sh

    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:

.. code:: python

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

Or via the command line:

.. code:: bash

    $ python -m solcx.install v0.4.25

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

.. code:: python

    >>> 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:

.. code:: python

    >>> 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:

.. code:: python

    >>> 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:

.. code:: python

    >>> 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 <http://solidity.readthedocs.io/en/latest/using-the-compiler.html#compiler-input-and-output-json-description>`__
compilation feature.

.. code:: python

    >>> 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
--------------------------------

.. code:: python

    >>> 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:

.. code:: python

    >>> 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 <http://solidity.readthedocs.io/en/develop/layout-of-source-files.html#paths>`__

Development
-----------

This project was recently forked from
`py-solc <https://github.com/ethereum/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:

.. code:: sh

    py.test tests

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

License
-------

This project is licensed under the `MIT license <LICENSE>`__.


