Home  >  Article  >  Backend Development  >  Introduction to the implementation of Py-EVM by Python Ethereum Virtual Machine

Introduction to the implementation of Py-EVM by Python Ethereum Virtual Machine

不言
不言forward
2018-10-18 17:22:392612browse

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.

Trinity

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.

Development

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]

Run Tests

Tests can be run using:

pytest

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

Releasing

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:: (show version)

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!

Statement:
This article is reproduced at:segmentfault.com. If there is any infringement, please contact admin@php.cn delete