Home > Article > Backend Development > Introduction to the implementation of Py-EVM by Python Ethereum Virtual Machine
This article brings you an introduction to the implementation of Py-EVM on the Python Ethereum Virtual Machine. It has certain reference value. Friends in need can refer to it. I hope it will be helpful to you.
Py-EVM is a new implementation of the Ethereum Virtual Machine written in Python. Currently 695 stars on github, it is under active development, but is being rapidly advanced through the test suite provided by Ethereum/test. We are grateful to have Vitalik and the existing PyEthereum code to make rapid progress, as many design decisions were inspired and even ported directly from the PyEthereum codebase.
Py-EVM aims to eventually be the de facto Python implementation of EVM, providing a wide range of use cases for public and private chains. Development will focus on creating an EVM with a well-defined API, friendly and easy-to-understand documentation, that can run as a fully functional mainnet node.
In particular Py-EVM aims to:
Provide an example implementation of the EVM in Python, one of the most widely used and understood languages.
Provides customers with a low-level API to build full or lightweight nodes.
Easy to understand and modify.
Highly flexible to support research as well as alternative use cases such as private blockchains.
While Py-EVM provides EVM's low-level API, it is not designed to directly implement full nodes or light nodes.
We provide a basic implementation of a complete node called Trinity based on Py-EVM.
There may be alternative clients based on Py-EVM in the future.
Step 1: Alpha Release
The plan starts with an MVP, alpha-level release suitable for testing purposes. We will be looking for early adopters to provide feedback on our architecture and API choices, as well as general feedback and bug discovery.
Py-EVM relies on a common test submodule for all clients, so you need to clone the repo with the --recursive flag. For example:
git clone --recursive git@github.com:ethereum/py-evm.git
Py-EVM requires Python 3. Generally, the best way to guarantee a clean Python 3 environment is to use a virtualenv, for example:
# once: $ virtualenv -p python3 venv # each session: $ . venv/bin/activate
Then install the required python packages via:
pip install -e .[dev]
Tests can be run using:
pytest
Alternatively you can install tox
to run the full test suite.
Pandoc is required to convert the markdown README into the correct format for proper rendering on pypi.
For Debian-like systems:
apt install pandoc
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 new docker image:
make create-docker-image version=<version>
By default this will create a new image with two tags pointing to it:
ethereum/trinity:
ethereum /trinity:latest: (latest until overwritten with 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
How to use bumpversion
The version format of this repo is {major}.{minor}.{patch} means stable, {patch}.{minor}. {patch}-{stage}.{devnum} means unstable (stage can be alpha or beta)).
To release the next version, use bumpversion and specify the part to be adjusted, such as bumpversion minor or bumpversion devnum.
If you are in the beta version, the bumpversion stage will be switched to the stable version.
To emit an unstable version when the current version is stable, specify the new version explicitly, for example bumpversion --new-version 4.0.0-alpha.1 devnum
The above is the detailed content of Introduction to the implementation of Py-EVM by Python Ethereum Virtual Machine. For more information, please follow other related articles on the PHP Chinese website!