Documentation hosted by ReadTheDocs
Py-EVM is a new implementation of the Ethereum Virtual Machine written in python. It is currently in active development but is quickly progressing through the test suite provided by ethereum/tests. We have Vitalik, and the existing PyEthereum code to thank for the quick progress we’ve made as many design decisions were inspired, or even directly ported from the PyEthereum codebase.
Py-EVM aims to eventually become the defacto Python implementation of the EVM, enabling a wide array of use cases for both public and private chains. Development will focus on creating an EVM with a well defined API, friendly and easy to digest documentation which can be run as a fully functional mainnet node.
In particular Py-EVM aims to:
-
be an example implementation of the EVM in one of the most widely used and understood languages, Python.
-
deliver the low level APIs for clients to build full or light nodes on top of
-
be easy to understand and modifiable
-
be highly flexible to support both research as well as alternate use cases like private chains.
While Py-EVM provides the low level APIs of the EVM, it does not aim to implement a full or light node directly.
We provide a base implementation of a full node called Trinity that is based on Py-EVM.
In the future there may be alternative clients based on the Py-EVM.
The plan is to begin with an MVP, alpha-level release that is suitable for testing purposes. We’ll be looking for early adopters to provide feedback on our architecture and API choices as well as general feedback and bug finding.
Py-EVM depends on a submodule of the common tests across all clients,
so you need to clone the repo with the --recursive
flag. Example:
git clone --recursive git@github.com:ethereum/py-evm.git
Py-EVM requires Python 3. Often, the best way to guarantee a clean Python 3 environment is with virtualenv
, like:
# once:
$ virtualenv -p python3 venv
# each session:
$ . venv/bin/activate
Then install the required python packages via:
pip install -e .[dev]
You can run the tests with:
pytest
Or you can install tox
to run the full test suite.
Pandoc is required for transforming the markdown README to the proper format to render correctly on pypi.
For Debian-like systems:
apt install pandoc
Or on OSX:
brew install pandoc
To release a new version:
bumpversion $$VERSION_PART_TO_BUMP$$
git push && git push --tags
make release
To create a docker image:
make create-docker-image version=<version>
By default, this will create a new image with two tags pointing to it:
ethereum/trinity:<version>
(explicit version)ethereum/trinity:latest
(latest until overwritten with a future "latest")
Then, push to docker hub.
docker push ethereum/trinity:<version>
# the following may be left out if we were pushing a patch for an older version
docker push ethereum/trinity:latest
The version format for this repo is {major}.{minor}.{patch}
for stable, and
{major}.{minor}.{patch}-{stage}.{devnum}
for unstable (stage
can be alpha or beta).
To issue the next version in line, use bumpversion and specify which part to bump,
like bumpversion minor
or bumpversion devnum
.
If you are in a beta version, bumpversion stage
will switch to a stable.
To issue an unstable version when the current version is stable, specify the
new version explicitly, like bumpversion --new-version 4.0.0-alpha.1 devnum