Skip to main content

Python wrapper around the solc binary with 0.5.x support

Project description

# 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

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

```sh
pip install py-solc-x
```

## Installing the `solc` Executable

The first time py-solc-x is imported it will automatically install the latest version of solc. If you wish to install a different version you may do so from within python:

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

Or via the command line:

```bash
$ python -m solcx.install v0.4.25
```

You can also view available versions or change the active version of solc:

```python
>>> from solcx import get_installed_solc_versions, set_solc_version
>>> get_installed_solc_versions()
['v0.4.25', 'v0.5.3']

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

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

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

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

```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).

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

Uploaded Source

Built Distribution

py_solc_x-0.1.0-py3-none-any.whl (11.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: py-solc-x-0.1.0.tar.gz
  • Upload date:
  • Size: 10.4 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.1.0.tar.gz
Algorithm Hash digest
SHA256 fd2dcde72fb4cfa7d9730cde599e7ba5b17143e05ce1dc9d5e1cea8c6286ee4a
MD5 117caf75297b95fdc4e90c112627009a
BLAKE2b-256 03b7426018616f914099d01ac2d1dd3baf8abd2b4669665c607d64c0b102cd0b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: py_solc_x-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 11.0 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.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 610d66d063186ad2e06bca55225e97c6011dd0054c9f7744a9598e6d2a790eed
MD5 02b68cdc75d6de9e25b5b4423fd2f3f1
BLAKE2b-256 89153b8d55ca96b9cf6eeda4249bce3d32bb54bb7761558fe39a33c5f52811a9

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