GithubHelp home page GithubHelp logo

alireza-gsh / evmone Goto Github PK

View Code? Open in Web Editor NEW

This project forked from ethereum/evmone

0.0 0.0 0.0 2.74 MB

Fast Ethereum Virtual Machine implementation

License: Apache License 2.0

Shell 0.05% C++ 84.08% Python 0.37% C 0.32% CMake 15.09% Dockerfile 0.10%

evmone's Introduction

evmone

ethereum badge readme style standard badge codecov badge circleci badge appveyor badge license badge

Fast Ethereum Virtual Machine implementation

evmone is a C++ implementation of the Ethereum Virtual Machine (EVM). Created by members of the Ewasm team, the project aims for clean, standalone EVM implementation that can be imported as an execution module by Ethereum Client projects. The codebase of evmone is optimized to provide fast and efficient execution of EVM smart contracts.

Characteristic of evmone

  1. Exposes the EVMC API.
  2. Requires C++17 standard.
  3. The intx library is used to provide 256-bit integer precision.
  4. The ethash library is used to provide Keccak hash function implementation needed for the special KECCAK256 instruction.
  5. Contains two interpreters: Advanced (default) and Baseline (experimental).

Advanced Interpreter

  1. The indirect call threading is the dispatch method used - a loaded EVM program is a table with pointers to functions implementing virtual instructions.
  2. The gas cost and stack requirements of block of instructions is precomputed and applied once per block during execution.
  3. Performs extensive and expensive bytecode analysis before execution.

Baseline Interpreter

  1. Provides relatively straight-forward EVM implementation.
  2. Performs only minimalistic JUMPDEST analysis.
  3. Experimental. Can be enabled with O=0 option.

Usage

Optimization levels

The option O controls the "optimization level":

  • O=2 uses Advanced interpreter (default),
  • O=0 uses Baseline interpreter.

As geth plugin

evmone implements the EVMC API for Ethereum Virtual Machines. It can be used as a plugin replacing geth's internal EVM. But for that a modified version of geth is needed. The Ewasm's fork of go-ethereum provides binary releases of geth with EVMC support.

Next, download evmone from Releases.

Start the downloaded geth with --vm.evm option pointing to the evmone shared library.

geth --vm.evm=./libevmone.so

Building from source

To build the evmone EVMC module (shared library), test, and benchmark:

  1. Fetch the source code:

    git clone --recursive https://github.com/ethereum/evmone
    cd evmone
    
  2. Configure the project build and dependencies:

    Linux / OSX
    cmake -S . -B build -DEVMONE_TESTING=ON
    
    Windows

    Note: >= Visual Studio 2019 is required since evmone makes heavy use of C++17

    cmake -S . -B build -DEVMONE_TESTING=ON -G "Visual Studio 16 2019" -A x64
    
  3. Build:

    cmake --build build --parallel
    
  4. Run the unit tests or benchmarking tool:

    build/bin/evmone-unittests
    build/bin/evmone-bench test/benchmarks
    

Tools

evm-test

The evm-test executes a collection of unit tests on any EVMC-compatible Ethereum Virtual Machine implementation. The collection of tests comes from the evmone project.

evm-test ./evmone.so

Docker

Docker images with evmone are available on Docker Hub: https://hub.docker.com/r/ethereum/evmone.

Having the evmone shared library inside a docker is not very useful on its own, but the image can be used as the base of another one or you can run benchmarks with it.

docker run --entrypoint evmone-bench ethereum/evmone /src/test/benchmarks

References

  1. Efficient gas calculation algorithm for EVM

Maintainer

Paweł Bylica @chfast

License

license badge

Licensed under the Apache License, Version 2.0.

evmone's People

Contributors

chfast avatar gumb0 avatar axic avatar yperbasis avatar halfalicious avatar vorot93 avatar hrishikeshsuresh avatar cdetrio avatar rodiazet avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.