All Projects → ethereum → Evmone

ethereum / Evmone

Licence: apache-2.0
Fast Ethereum Virtual Machine implementation

Projects that are alternatives of or similar to Evmone

Pyquarkchain
Python implementation of QuarkChain
Stars: ✭ 194 (+19.75%)
Mutual labels:  blockchain, ethereum, evm
Monax
DEPRECATED. To be removed December, 2018 (use monax/bosmarmot)
Stars: ✭ 269 (+66.05%)
Mutual labels:  blockchain, ethereum, evm
Armors Solidity
Armors-solidity is a framework to build secure smart contracts on Ethereum.
Stars: ✭ 184 (+13.58%)
Mutual labels:  blockchain, ethereum, evm
Ruby Ethereum
A Ruby implementation of Ethereum.
Stars: ✭ 270 (+66.67%)
Mutual labels:  blockchain, ethereum, evm
Ette
EVM-based Blockchain Indexer, with historical data query & real-time notification support 😎
Stars: ✭ 37 (-77.16%)
Mutual labels:  blockchain, ethereum, evm
Chaingear
The consensus computer driven database framework
Stars: ✭ 83 (-48.77%)
Mutual labels:  blockchain, ethereum, evm
Remix Project
Remix is a browser-based compiler and IDE that enables users to build Ethereum contracts with Solidity language and to debug transactions.
Stars: ✭ 225 (+38.89%)
Mutual labels:  blockchain, ethereum, evm
Intellij Solidity
Solidity plugin for IntelliJ
Stars: ✭ 646 (+298.77%)
Mutual labels:  blockchain, ethereum, evm
Burrow
https://wiki.hyperledger.org/display/burrow
Stars: ✭ 851 (+425.31%)
Mutual labels:  blockchain, ethereum, evm
Remix
This has been moved to https://github.com/ethereum/remix-project
Stars: ✭ 1,063 (+556.17%)
Mutual labels:  blockchain, ethereum, evm
Remix Ide
Documentation for Remix IDE
Stars: ✭ 1,768 (+991.36%)
Mutual labels:  blockchain, ethereum, evm
Uport Credentials
Library for integrating uPort into node server side applications
Stars: ✭ 140 (-13.58%)
Mutual labels:  blockchain, ethereum
Peatiocryptoexchange
An open-source Crypto-Currency exchange. Peatio v3.0 Coming Soon !
Stars: ✭ 141 (-12.96%)
Mutual labels:  blockchain, ethereum
My Token
📈Track token prices of your favorite exchanges in terminal!
Stars: ✭ 141 (-12.96%)
Mutual labels:  blockchain, ethereum
Amp Matching Engine
Official proof decentralized exchange matching engine
Stars: ✭ 142 (-12.35%)
Mutual labels:  blockchain, ethereum
Blockchainbooks.github.io
Blockchain Books
Stars: ✭ 139 (-14.2%)
Mutual labels:  blockchain, ethereum
Web3j Spring Boot Starter
Spring Boot Starter for web3j
Stars: ✭ 140 (-13.58%)
Mutual labels:  blockchain, ethereum
Sablier
The protocol for real-time finance on the Ethereum blockchain
Stars: ✭ 147 (-9.26%)
Mutual labels:  blockchain, ethereum
Ebtc
eBitcoin (eBTC) is an ERC20 token. Its primary utility is to provide an easy & fast payment solution. Its edge over other tokens is that it is capable of sending up to 255 payments in a single transaction.
Stars: ✭ 149 (-8.02%)
Mutual labels:  blockchain, ethereum
Awesome Token Sale
Curated list of token sale resources / ICO resources
Stars: ✭ 149 (-8.02%)
Mutual labels:  blockchain, ethereum

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.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].