A curated list of resources on the Ethereum Virtual Machine (EVM), which is the virtual machine executed on the Ethereum network.
Not listed there yet, but in the spirit of
Here is how to contribute.
Outdated and archived resources have been moved to STALE.md.
Table of Contents generated with DocToc
- Specification
- Illustration
- Tutorials
- Tests
- EVM Implementations
- Programming Languages that Compile into EVM
- Debuggers
- Code Analyzers
- Improvement Proposals
- License of This List
- Yellow Paper
- A terse specification of EVM and Ethereum blocks
- A detailed illustration of the Ethereum Virtual Machine
- The illustration shows the contents of blocks and block headers faithfully
- CoinCulture's Guide to the EVM
- A hands on guide to understanding how the EVM works, with examples written in raw byte-code and solidity
- Diving Into The Ethereum Virtual Machine
- An article series examining different aspects of the EVM by walking you through Solidity's assembly output
- Consensus test suite
- EVM implementations can be tested against this test suite
- go-ethereum
- A popular Ethereum client with its own EVM implementation (core/vm directory)
- py-ethclient in Python
- A from-scratch Python execution client with 140+ EVM opcodes, RLPx transport, eth/68 and snap/1 wire protocols, full sync, snap sync, Engine API V1/V2/V3, and JSON-RPC
- For more, see here.
- Modeling EVM in the K framework (whitepaper)
- An EVM implementation for the K framework, maintained by Runtime Verification
- hevm
- An EVM implementation written in Haskell, focused on debugging and formal verification
- Ethereumjs-VM
- Implements Ethereum's VM in JS (part of the ethereumjs monorepo)
- Solidity
- The most popular programming language for Ethereum contracts
- Awesome Solidity
- Vyper
- A language with overflow-checking, numeric units but without unlimited loops
- Zokrates
- A toolbox for zkSNARKs on Ethereum
- snarky
- An OCaml front-end for writing R1CS SNARKs (parametrized over the backend SNARK libraries)
- Shallowly embedded DSL that can be compiled into SNARK circuits
- The verifier is an OCaml function, so some more work is necessary before using it on Ethereum
- Remix IDE
- An IDE containing an EVM code debugger
- debug_traceTransaction method
- An instruction-wise trace information provided by go-ethereum
- Ethereum Function Signature Database
- A database for deciphering
0x165ffd10intorestart(bytes32,bytes32).
- A database for deciphering
- Echidna
- A fuzzer on EVM that also takes Solidity input
- Able to fuzz a program with sequences of multiple transactions
- MAIAN
- An automatic tool that detects trace vulnerabilities (Greedy, Prodigal and Suicidal) with depth-first search of symbolic execution of multiple invocations
- Mythril
- A security analysis tool for EVM bytecode; supports Solidity and Vyper
- Manticore
- A symbolic execution engine that can generate inputs to cover codepaths (asciicast), which also comes with a Python API
- Securify
- A tool that strives to achieve no false-negatives
- L3X
- L3X - AI-driven Smart Contract Static Analyzer
- Ethereum Improvement Proposals
- A portal for EVM & Ethereum improvements
- The soonest changes are listed in the README
Awesome Ethereum Virtual Machine
Written in 2017 by Yoichi Hirai i@yoichihirai.com
[other author/contributor lines as appropriate]
To the extent possible under law, the author(s) have dedicated all copyright and related and neighboring rights to this software to the public domain worldwide. This software is distributed without any warranty.
You should have received a copy of the CC0 Public Domain Dedication along with this software. If not, see http://creativecommons.org/publicdomain/zero/1.0/.