Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ethereum/evmone
Fast Ethereum Virtual Machine implementation
https://github.com/ethereum/evmone
blockchain ethereum ethereum-virtual-machine evm evmc hacktoberfest
Last synced: 7 days ago
JSON representation
Fast Ethereum Virtual Machine implementation
- Host: GitHub
- URL: https://github.com/ethereum/evmone
- Owner: ethereum
- License: apache-2.0
- Created: 2018-12-05T16:37:26.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2024-11-06T11:25:56.000Z (about 1 month ago)
- Last Synced: 2024-11-21T01:07:02.185Z (21 days ago)
- Topics: blockchain, ethereum, ethereum-virtual-machine, evm, evmc, hacktoberfest
- Language: C++
- Homepage:
- Size: 5.62 MB
- Stars: 857
- Watchers: 34
- Forks: 285
- Open Issues: 108
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
- Authors: AUTHORS
Awesome Lists containing this project
- Library-of-Ethereum - EVMONE - evmone is a C++ implementation of the Ethereum Virtual Machine (EVM) (EVM / Cairo)
- awesome-web3 - evmone - C++ implementation of the Ethereum Virtual Machine (EVM), faster. (Software Development / VMs)
- best-of-crypto - GitHub - 48% open · ⏱️ 05.06.2024): (Smart Contract Platforms)
README
# evmone
[![ethereum badge]][ethereum]
[![readme style standard badge]][standard readme]
[![codecov badge]][codecov]
[![circleci badge]][circleci]
[![appveyor badge]][appveyor]
[![license badge]][Apache License, Version 2.0]> Fast Ethereum Virtual Machine implementation
_evmone_ is a C++ implementation of the Ethereum Virtual Machine (EVM).
Created by members of the [Ipsilon] (ex-[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++20 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:
- **Baseline** (default)
- **Advanced** (select with the `advanced` option)### Baseline Interpreter
1. Provides relatively straight-forward but efficient EVM implementation.
2. Performs only minimalistic `JUMPDEST` analysis.### 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.## Usage
### 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](https://github.com/ewasm/go-ethereum/releases).Next, download evmone from [Releases].
Start the downloaded geth with `--vm.evm` option pointing to the evmone shared library.
```bash
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
```
cmake -S . -B build -DEVMONE_TESTING=ON -G "Visual Studio 16 2019" -A x64
```
3. Build:
```
cmake --build build --parallel
```3. Run the unit tests or benchmarking tool:
```
build/bin/evmone-unittests
build/bin/evmone-bench test/evm-benchmarks/benchmarks
```### Precompiles
Ethereum Precompiled Contracts (_precompiles_ for short) are only partly supported by evmone.
However, there are options to enable limited precompiles support for testing.
1. For precompiles with missing implementation stubs are enabled by default.
They will correctly respond to known inputs.
2. The CMake option `EVMONE_PRECOMPILES_SILKPRE=1` enables building of
the [silkpre] third party library with the implementation of the precompiles.
This library also requires [GMP] (e.g. libgmp-dev) library for building and execution.### 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.```bash
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.```bash
docker run --entrypoint evmone-bench ethereum/evmone /src/test/benchmarks
```### EVM Object Format (EOF) support
evmone supports EOFv1. Since EOF validation is done once during deploy-time, evmone does not revalidate during execution of bytecode. To force EOF revalidation, you can use the `validate_eof` option, example:
```
evmc run --vm libevmone.so,validate_eof --rev 14 "EF00"
```## References
1. [Efficient gas calculation algorithm for EVM](docs/efficient_gas_calculation_algorithm.md)
## Maintainer
Paweł Bylica [@chfast]
## License
[![license badge]][Apache License, Version 2.0]
Licensed under the [Apache License, Version 2.0].
[@chfast]: https://github.com/chfast
[appveyor]: https://ci.appveyor.com/project/chfast/evmone/branch/master
[circleci]: https://circleci.com/gh/ethereum/evmone/tree/master
[codecov]: https://codecov.io/gh/ethereum/evmone/
[Apache License, Version 2.0]: LICENSE
[ethereum]: https://ethereum.org
[EVMC]: https://github.com/ethereum/evmc
[Ipsilon]: https://github.com/ipsilon
[Ewasm]: https://github.com/ewasm
[GMP]: https://gmplib.org
[intx]: https://github.com/chfast/intx
[ethash]: https://github.com/chfast/ethash
[Releases]: https://github.com/ethereum/evmone/releases
[standard readme]: https://github.com/RichardLitt/standard-readme
[silkpre]: https://github.com/torquem-ch/silkpre[appveyor badge]: https://img.shields.io/appveyor/ci/chfast/evmone/master.svg?logo=appveyor
[circleci badge]: https://img.shields.io/circleci/project/github/ethereum/evmone/master.svg?logo=circleci
[codecov badge]: https://img.shields.io/codecov/c/github/ethereum/evmone.svg?logo=codecov
[ethereum badge]: https://img.shields.io/badge/ethereum-EVM-informational.svg?logo=ethereum
[license badge]: https://img.shields.io/github/license/ethereum/evmone.svg?logo=apache
[readme style standard badge]: https://img.shields.io/badge/readme%20style-standard-brightgreen.svg