Files
awesome-awesomeness/html/ethereumvirtualmachine.html
2024-04-20 19:22:54 +02:00

358 lines
13 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<h1 id="awesome-ethereum-virtual-machine">Awesome Ethereum Virtual
Machine</h1>
<p>A curated list of resources on the Ethereum Virtual Machine (EVM),
which is the virtual machine executed on the <a
href="https://ethereum.org/">Ethereum</a> network.</p>
<p>Not listed there yet, but in the spirit of <a
href="https://github.com/sindresorhus/awesome"><img
src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg"
alt="Awesome" /></a></p>
<p>Here is <a href="./contributing.md">how to contribute</a>.</p>
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
<p><strong>Table of Contents</strong> <em>generated with <a
href="https://github.com/thlorenz/doctoc">DocToc</a></em></p>
<ul>
<li><a href="#specification">Specification</a></li>
<li><a href="#illustration">Illustration</a></li>
<li><a href="#tutorials">Tutorials</a></li>
<li><a href="#tests">Tests</a></li>
<li><a href="#evm-implementations">EVM Implementations</a></li>
<li><a href="#programming-languages-that-compile-into-evm">Programming
Languages that Compile into EVM</a></li>
<li><a href="#debuggers">Debuggers</a></li>
<li><a href="#code-analyzers">Code Analyzers</a></li>
<li><a href="#improvement-proposals">Improvement Proposals</a></li>
<li><a href="#related-resources">Related Resources</a></li>
<li><a href="#license-of-this-list">License of This List</a></li>
</ul>
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
<h2 id="specification">Specification</h2>
<ul>
<li><a href="https://github.com/ethereum/yellowpaper">Yellow Paper</a>
<ul>
<li>A terse specification of EVM and Ethereum blocks</li>
</ul></li>
</ul>
<h2 id="illustration">Illustration</h2>
<ul>
<li><a href="https://ethereum.stackexchange.com/a/6413/280">A detailed
illustration of the Ethereum Virtual Machine</a>
<ul>
<li>The illustration shows the contents of blocks and block headers
faithfully</li>
</ul></li>
</ul>
<h2 id="tutorials">Tutorials</h2>
<ul>
<li><a
href="https://github.com/CoinCulture/evm-tools/blob/master/analysis/guide.md">CoinCultures
Guide to the EVM</a>
<ul>
<li>A hands on guide to understanding how the EVM works, with examples
written in raw byte-code and solidity</li>
</ul></li>
<li><a
href="https://medium.com/@hayeah/diving-into-the-ethereum-vm-6e8d5d2f3c30">Diving
Into The Ethereum Virtual Machine</a>
<ul>
<li>An article series examining different aspects of the EVM by walking
you through Soliditys assembly output</li>
</ul></li>
</ul>
<h2 id="tests">Tests</h2>
<ul>
<li><a href="https://github.com/ethereum/tests">Consensus test suite</a>
<ul>
<li>EVM implementations can be tested against this test suite</li>
</ul></li>
</ul>
<h2 id="evm-implementations">EVM Implementations</h2>
<h3 id="live-on-main-network">Live on Main Network</h3>
<ul>
<li><a href="https://github.com/ethereum/go-ethereum">go-ethereum</a>
<ul>
<li>A popular Ethereum client with its own EVM implementation (<a
href="https://github.com/ethereum/go-ethereum/tree/master/core/vm">core/vm</a>
directory)</li>
</ul></li>
<li><a href="https://github.com/paritytech/parity">Parity</a> in Rust
<ul>
<li>Another popular Ethereum client with its own EVM implementation (<a
href="https://github.com/paritytech/parity/tree/master/ethcore">ethcore</a>
directory)</li>
</ul></li>
<li><a href="https://github.com/ethereum/cpp-ethereum">cpp-ethereum</a>
<ul>
<li>An Ethereum client that generates the consensus test suite (<a
href="https://github.com/ethereum/cpp-ethereum/blob/develop/libevm/VM.cpp">libevm/VM.cpp</a>)</li>
</ul></li>
<li><a href="https://github.com/ethereum/pyethereum">Pyethereum</a> in
Python
<ul>
<li>A mostly deprecated client (<a
href="https://github.com/ethereum/pyethereum/blob/develop/ethereum/vm.py">ethereum/vm.py</a>)</li>
</ul></li>
<li><a href="https://github.com/pipermerriam/py-evm">Py-EVM</a> in
Python
<ul>
<li>A Python implementation designed to be highly configurable and
modular and compliant with the Ethereum test suite, work is in progress
on it to run a full node and develop sharding.</li>
</ul></li>
<li><a href="https://github.com/ethereum/ethereumj">EthereumJ</a> in
Java
<ul>
<li>A client with its own EVM implementation</li>
</ul></li>
<li>For more, see <a
href="https://github.com/ethereum/wiki/wiki/Clients">here</a>.</li>
</ul>
<h3 id="other-implementations">Other Implementations</h3>
<ul>
<li><a href="https://github.com/ethereumproject/sputnikvm">SputnikVM</a>
in Rust for Ethereum Classic
<ul>
<li>A standalone EVM featuring <a
href="https://github.com/ethereumproject/sputnikvm-dev">a developer
environment</a>, a <a
href="https://github.com/sorpaas/sputnikvm-in-browser">browser through
wasm32-unknown-emscripten target</a>, and for <a
href="https://github.com/sorpaas/sputnikvm-on-rux">embedded
devices</a></li>
</ul></li>
<li><a href="https://github.com/kframework/evm-semantics">Modeling EVM
in the K framework</a> (<a
href="https://www.ideals.illinois.edu/handle/2142/97207">whitepaper</a>)
<ul>
<li>An EVM implementation for <a
href="http://www.kframework.org/index.php/Main_Page">K
framework</a></li>
</ul></li>
<li><a href="https://github.com/dapphub/hevm">hevm</a>
<ul>
<li>An EVM implementation written in Haskell with debugging in mind</li>
</ul></li>
<li><a href="https://github.com/pirapira/eth-isabelle">eth-isabelle</a>
<ul>
<li>An EVM implementation for theorem provers</li>
</ul></li>
<li><a href="https://github.com/hyperledger/burrow">Burrow</a>
<ul>
<li>An EVM implementation in Go extended with a native name registry and
permissioning layer</li>
</ul></li>
<li><a
href="https://github.com/ethereumjs/ethereumjs-vm">Ethereumjs-VM</a>
<ul>
<li>Implements Ethereums VM in JS</li>
</ul></li>
<li><a
href="https://github.com/cryptape/ruby-ethereum">ruby-ethereum</a>
<ul>
<li>An EVM implementation in Ruby (passed all tests in <a
href="https://github.com/ethereum/tests/tree/55a18b3ded93bf6083f23ea1f4bf7be4ba973016">ethereum
tests</a>)</li>
</ul></li>
<li><a href="https://github.com/nervous-systems/sputter">sputter</a>
<ul>
<li>An EVM implementation in Clojure (so far passes VM tests)</li>
</ul></li>
<li><a href="https://github.com/Ohalo-Ltd/solevm">solevm</a>
<ul>
<li>An EVM implementation in Solidity</li>
</ul></li>
<li><a href="https://github.com/zchn/eth-acl2">eth-acl2</a>
<ul>
<li>An EVM implementation in ACL2 (work in progress)</li>
</ul></li>
<li><a href="https://github.com/poanetwork/mana/">mana</a>
<ul>
<li>An EVM implementation in Elixir (work in progress)</li>
</ul></li>
</ul>
<h2 id="programming-languages-that-compile-into-evm">Programming
Languages that Compile into EVM</h2>
<ul>
<li><a href="https://github.com/ethereum/solidity">Solidity</a>
<ul>
<li>The most popular programming language for Ethereum contracts</li>
<li><a href="https://github.com/bkrem/awesome-solidity">Awesome
Solidity</a></li>
<li>The LLL compiler is also in the same repository</li>
</ul></li>
<li><a href="https://github.com/ethereum/vyper">Vyper</a>
<ul>
<li>A language with overflow-checking, numeric units but without
unlimited loops</li>
</ul></li>
<li><a href="https://github.com/MichaelBurge/pyramid-scheme">Pyramid
Scheme</a> (experimental)
<ul>
<li>A Scheme compiler into EVM that follows the <a
href="https://mitpress.mit.edu/sicp/full-text/book/book-Z-H-35.html#%_sec_5.5">SICP
compilation approach</a></li>
<li><a href="https://github.com/MichaelBurge/ceagle">ceagle</a> compiles
C into Pyramid Scheme</li>
</ul></li>
<li><a href="https://github.com/franklinsch/flint">Flint</a>
<ul>
<li>A language with several security features: e.g. asset types with a
restricted set of atomic operations</li>
</ul></li>
<li><a
href="https://github.com/mmalvarez/eth-isabelle/blob/master/example/LLLL.thy">LLLL</a>
<ul>
<li>An LLL-like compiler being implemented in Isabelle/HOL</li>
</ul></li>
<li><a
href="https://github.com/takenobu-hs/haskell-ethereum-assembly">HAseembly-evm</a>
<ul>
<li>An EVM assembly implemented as a Haskell DSL</li>
</ul></li>
<li><a href="https://github.com/pirapira/bamboo">Bamboo</a>
(experimental)    - A language without loops but with explicit
constructor invocation at the end of every call</li>
</ul>
<h3
id="programming-languages-that-compile-zk-snark-circuits-and-proofs">Programming
Languages that Compile zk-SNARK Circuits and Proofs</h3>
<ul>
<li><a href="https://github.com/JacobEberhardt/ZoKrates">Zokrates</a>
<ul>
<li>A toolbox for zkSNARKs on Ethereum</li>
<li><a href="https://github.com/jstoxrocky/zksnarks_example">a
third-party tutorial</a></li>
</ul></li>
<li><a href="https://github.com/o1-labs/snarky">snarky</a>
<ul>
<li>An OCaml front-end for writing R1CS SNARKs (parametrized over the
backend SNARK libraries)</li>
<li>Shallowly embedded DSL that can be compiled into SNARK circuits</li>
<li>The verifier is an OCaml function, so some more work is necessary
before using it on Ethereum</li>
</ul></li>
<li><a href="https://github.com/akosba/jsnark">jsnark</a>
<ul>
<li>A Java front-end for writing R1CS SNARKs</li>
</ul></li>
</ul>
<h2 id="debuggers">Debuggers</h2>
<ul>
<li><a href="https://github.com/ethereum/remix">REMIX</a>
<ul>
<li>An IDE containing an EVM code debugger</li>
</ul></li>
<li><a
href="https://github.com/ethereum/go-ethereum/wiki/Management-APIs#debug_tracetransaction">debug_traceTransaction
method</a>
<ul>
<li>An instruction-wise trace information provided by go-ethereum</li>
</ul></li>
<li><a href="https://www.4byte.directory/">Ethereum Function Signature
Database</a>
<ul>
<li>A database for deciphering <code>0x165ffd10</code> into
<code>restart(bytes32,bytes32)</code>.</li>
</ul></li>
</ul>
<h2 id="code-analyzers">Code Analyzers</h2>
<ul>
<li><a href="https://github.com/trailofbits/echidna">Echidna</a>
<ul>
<li>A fuzzer on EVM that also takes Solidity input</li>
<li>Able to fuzz a program with sequences of multiple transactions</li>
</ul></li>
<li><a href="https://arxiv.org/abs/1802.06038">MAIAN</a>
<ul>
<li>An automatic tool that detects trace vulnerabilities (Greedy,
Prodigal and Suicidal) with depth-first search of symbolic execution of
multiple invocations</li>
</ul></li>
<li><a href="https://github.com/b-mueller/mythril">Mythril</a>
<ul>
<li>A blockchain exploration tool that indexes all contracts on the
network, containing a disassembler, an ABI function detector and a
control flow analyzer</li>
<li>Comes with a <a
href="https://hackernoon.com/crafting-ethereum-exploits-by-laser-fire-1c9acf25af4f">fire-laser
option</a></li>
<li>Powered by <a
href="https://github.com/b-mueller/laser-ethereum">laser-ethereum</a></li>
</ul></li>
<li><a href="https://github.com/comaeio/porosity">porosity</a>
<ul>
<li>A reverse enginering tool, a disassembler, an ABI function detector
and a decompiler that also highlights vulnerabilities</li>
</ul></li>
<li><a href="https://github.com/trailofbits/manticore">Manticore</a>
<ul>
<li>A symtolic execution engine that can generate inputs to cover
codepaths (<a href="https://asciinema.org/a/154012">asciicast</a>),
which also comes with a Python API</li>
</ul></li>
<li><a href="https://github.com/arachnid/evmdis">evmdis</a>
<ul>
<li>A disassembler for EVM code</li>
</ul></li>
<li><a href="https://github.com/trailofbits/ethersplay">ethersplay</a>
<ul>
<li>An EVM plugin for <a href="https://binary.ninja/">Binary
Ninja</a></li>
</ul></li>
<li><a href="http://securify.ch/">Securify</a>
<ul>
<li>A tool that strives to achieve no false-negatives</li>
<li>The implementation seems not public as of now</li>
</ul></li>
<li><a href="https://github.com/melonproject/oyente">Oyente</a>
<ul>
<li>An automatic EVM code analyzer based on symbolic execution and <a
href="https://github.com/Z3Prover/z3">Z3</a> SMT solver</li>
</ul></li>
<li><a href="http://dry.yoichihirai.com/">Dr. Ys Ethereum Contract
Analyzer</a>
<ul>
<li>A symbolic executor for EVM code</li>
</ul></li>
</ul>
<h2 id="improvement-proposals">Improvement Proposals</h2>
<ul>
<li><a href="https://github.com/ethereum/EIPs">Ethereum Improvement
Proposals</a>
<ul>
<li>A portal for EVM &amp; Ethereum improvements</li>
<li>The soonest changes are listed in the README</li>
</ul></li>
<li><a
href="https://github.com/ethereum/EIPs/blob/master/EIPS/eip-615.md">EVM
1.5</a>
<ul>
<li>A proposal to tame jumps so that a linear-time scan can determine
stack layouts</li>
</ul></li>
<li><a href="https://github.com/ewasm">eWASM</a>
<ul>
<li>A proposal to use a <a
href="http://webassembly.org/">WebAssembly</a> for Ethereum contract
execution</li>
</ul></li>
</ul>
<h2 id="related-resources">Related Resources</h2>
<ul>
<li><a href="http://awesome-ethereum.com/">Awesome Ethereum</a></li>
</ul>
<h2 id="license-of-this-list">License of This List</h2>
<p>Awesome Ethereum Virtual Machine</p>
<p>Written in 2017 by Yoichi Hirai <a href="mailto:i@yoichihirai.com"
class="email">i@yoichihirai.com</a></p>
<p>[other author/contributor lines as appropriate]</p>
<p>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.</p>
<p>You should have received a copy of the CC0 Public Domain Dedication
along with this software. If not, see <a
href="http://creativecommons.org/publicdomain/zero/1.0/"
class="uri">http://creativecommons.org/publicdomain/zero/1.0/</a>.</p>