192 lines
18 KiB
Plaintext
192 lines
18 KiB
Plaintext
[38;5;12m [39m[38;2;255;187;0m[1m[4mAwesome Ethereum Virtual Machine[0m
|
||
|
||
[38;5;12mA curated list of resources on the Ethereum Virtual Machine (EVM), which is the virtual machine executed on the [39m[38;5;14m[1mEthereum[0m[38;5;12m (https://ethereum.org/) network.[39m
|
||
|
||
[38;5;12mNot listed there yet, but in the spirit of [39m[38;5;14m[1m![0m[38;5;12mAwesome[39m[38;5;14m[1m (https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)[0m[38;5;12m (https://github.com/sindresorhus/awesome)[39m
|
||
|
||
[38;5;12mHere is [39m[38;5;14m[1mhow to contribute[0m[38;5;12m (./contributing.md).[39m
|
||
|
||
|
||
|
||
[38;5;14m[1mTable of Contents[0m[38;5;12m [39m[48;2;30;30;40m[38;5;13m[3mgenerated with [0m[48;2;30;30;40m[38;5;14m[1m[3mDocToc[0m[48;2;30;30;40m[38;5;13m[3m (https://github.com/thlorenz/doctoc)[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mSpecification[0m[38;5;12m (#specification)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mIllustration[0m[38;5;12m (#illustration)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mTutorials[0m[38;5;12m (#tutorials)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mTests[0m[38;5;12m (#tests)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mEVM Implementations[0m[38;5;12m (#evm-implementations)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mProgramming Languages that Compile into EVM[0m[38;5;12m (#programming-languages-that-compile-into-evm)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mDebuggers[0m[38;5;12m (#debuggers)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mCode Analyzers[0m[38;5;12m (#code-analyzers)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mImprovement Proposals[0m[38;5;12m (#improvement-proposals)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mRelated Resources[0m[38;5;12m (#related-resources)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mLicense of This List[0m[38;5;12m (#license-of-this-list)[39m
|
||
|
||
|
||
|
||
|
||
[38;2;255;187;0m[4mSpecification[0m
|
||
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mYellow Paper[0m[38;5;12m (https://github.com/ethereum/yellowpaper)[39m
|
||
[48;5;235m[38;5;249m- A terse specification of EVM and Ethereum blocks[49m[39m
|
||
|
||
[38;2;255;187;0m[4mIllustration[0m
|
||
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mA detailed illustration of the Ethereum Virtual Machine[0m[38;5;12m (https://ethereum.stackexchange.com/a/6413/280)[39m
|
||
[48;5;235m[38;5;249m- The illustration shows the contents of blocks and block headers faithfully[49m[39m
|
||
|
||
[38;2;255;187;0m[4mTutorials[0m
|
||
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mCoinCulture's Guide to the EVM[0m[38;5;12m (https://github.com/CoinCulture/evm-tools/blob/master/analysis/guide.md)[39m
|
||
[48;5;235m[38;5;249m- A hands on guide to understanding how the EVM works, with examples written in raw byte-code and solidity[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mDiving Into The Ethereum Virtual Machine[0m[38;5;12m (https://medium.com/@hayeah/diving-into-the-ethereum-vm-6e8d5d2f3c30)[39m
|
||
[48;5;235m[38;5;249m- An article series examining different aspects of the EVM by walking you through Solidity's assembly output[49m[39m
|
||
|
||
[38;2;255;187;0m[4mTests[0m
|
||
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mConsensus test suite[0m[38;5;12m (https://github.com/ethereum/tests)[39m
|
||
[48;5;235m[38;5;249m- EVM implementations can be tested against this test suite[49m[39m
|
||
|
||
[38;2;255;187;0m[4mEVM Implementations[0m
|
||
|
||
[38;2;255;187;0m[4mLive on Main Network[0m
|
||
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mgo-ethereum[0m[38;5;12m (https://github.com/ethereum/go-ethereum)[39m
|
||
[48;5;235m[38;5;249m- A popular Ethereum client with its own EVM implementation (**core/vm** (https://github.com/ethereum/go-ethereum/tree/master/core/vm) directory)[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mParity[0m[38;5;12m (https://github.com/paritytech/parity) in Rust[39m
|
||
[48;5;235m[38;5;249m- Another popular Ethereum client with its own EVM implementation (**ethcore** (https://github.com/paritytech/parity/tree/master/ethcore) directory)[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mcpp-ethereum[0m[38;5;12m (https://github.com/ethereum/cpp-ethereum)[39m
|
||
[48;5;235m[38;5;249m- An Ethereum client that generates the consensus test suite (**libevm/VM.cpp** (https://github.com/ethereum/cpp-ethereum/blob/develop/libevm/VM.cpp))[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mPyethereum[0m[38;5;12m (https://github.com/ethereum/pyethereum) in Python[39m
|
||
[48;5;235m[38;5;249m- A mostly deprecated client (**ethereum/vm.py** (https://github.com/ethereum/pyethereum/blob/develop/ethereum/vm.py))[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mPy-EVM[0m[38;5;12m (https://github.com/pipermerriam/py-evm) in Python[39m
|
||
[48;5;235m[38;5;249m- 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.[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mEthereumJ[0m[38;5;12m (https://github.com/ethereum/ethereumj) in Java[39m
|
||
[48;5;235m[38;5;249m- A client with its own EVM implementation[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;12mFor more, see [39m[38;5;14m[1mhere[0m[38;5;12m (https://github.com/ethereum/wiki/wiki/Clients).[39m
|
||
|
||
[38;2;255;187;0m[4mOther Implementations[0m
|
||
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mSputnikVM[0m[38;5;12m (https://github.com/ethereumproject/sputnikvm) in Rust for Ethereum Classic[39m
|
||
[48;5;235m[38;5;249m- A standalone EVM featuring **a developer[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;235m[38;5;249m environment** (https://github.com/ethereumproject/sputnikvm-dev),[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;235m[38;5;249m a **browser through wasm32-unknown-emscripten[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;235m[38;5;249m target** (https://github.com/sorpaas/sputnikvm-in-browser), and for[49m[39m
|
||
[48;5;235m[38;5;249m **embedded devices** (https://github.com/sorpaas/sputnikvm-on-rux)[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mModeling EVM in the K framework[0m[38;5;12m (https://github.com/kframework/evm-semantics) ([39m[38;5;14m[1mwhitepaper[0m[38;5;12m (https://www.ideals.illinois.edu/handle/2142/97207))[39m
|
||
[48;5;235m[38;5;249m- An EVM implementation for **K framework** (http://www.kframework.org/index.php/Main_Page)[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mhevm[0m[38;5;12m (https://github.com/dapphub/hevm)[39m
|
||
[48;5;235m[38;5;249m- An EVM implementation written in Haskell with debugging in mind[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1meth-isabelle[0m[38;5;12m (https://github.com/pirapira/eth-isabelle)[39m
|
||
[48;5;235m[38;5;249m- An EVM implementation for theorem provers[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mBurrow[0m[38;5;12m (https://github.com/hyperledger/burrow)[39m
|
||
[48;5;235m[38;5;249m- An EVM implementation in Go extended with a native name registry and permissioning layer[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mEthereumjs-VM[0m[38;5;12m (https://github.com/ethereumjs/ethereumjs-vm)[39m
|
||
[48;5;235m[38;5;249m- Implements Ethereum's VM in JS[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mruby-ethereum[0m[38;5;12m (https://github.com/cryptape/ruby-ethereum)[39m
|
||
[48;5;235m[38;5;249m- An EVM implementation in Ruby (passed all tests in **ethereum tests** (https://github.com/ethereum/tests/tree/55a18b3ded93bf6083f23ea1f4bf7be4ba973016))[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1msputter[0m[38;5;12m (https://github.com/nervous-systems/sputter)[39m
|
||
[48;5;235m[38;5;249m- An EVM implementation in Clojure (so far passes VM tests)[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1msolevm[0m[38;5;12m (https://github.com/Ohalo-Ltd/solevm)[39m
|
||
[48;5;235m[38;5;249m- An EVM implementation in Solidity[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1meth-acl2[0m[38;5;12m (https://github.com/zchn/eth-acl2)[39m
|
||
[48;5;235m[38;5;249m- An EVM implementation in ACL2 (work in progress)[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mmana[0m[38;5;12m (https://github.com/poanetwork/mana/)[39m
|
||
[48;5;235m[38;5;249m- An EVM implementation in Elixir (work in progress)[49m[39m
|
||
|
||
[38;2;255;187;0m[4mProgramming Languages that Compile into EVM[0m
|
||
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mSolidity[0m[38;5;12m (https://github.com/ethereum/solidity)[39m
|
||
[48;5;235m[38;5;249m- The most popular programming language for Ethereum contracts[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;235m[38;5;249m- **Awesome Solidity** (https://github.com/bkrem/awesome-solidity)[49m[39m
|
||
[48;5;235m[38;5;249m- The LLL compiler is also in the same repository[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mVyper[0m[38;5;12m (https://github.com/ethereum/vyper)[39m
|
||
[48;5;235m[38;5;249m- A language with overflow-checking, numeric units but without unlimited loops[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mPyramid Scheme[0m[38;5;12m (https://github.com/MichaelBurge/pyramid-scheme) (experimental)[39m
|
||
[48;5;235m[38;5;249m- A Scheme compiler into EVM that follows the **SICP compilation approach** (https://mitpress.mit.edu/sicp/full-text/book/book-Z-H-35.html#%_sec_5.5)[49m[39m
|
||
[48;5;235m[38;5;249m- **ceagle** (https://github.com/MichaelBurge/ceagle) compiles C into Pyramid Scheme[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mFlint[0m[38;5;12m (https://github.com/franklinsch/flint)[39m
|
||
[48;5;235m[38;5;249m- A language with several security features: e.g. asset types with a restricted set of atomic operations[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mLLLL[0m[38;5;12m (https://github.com/mmalvarez/eth-isabelle/blob/master/example/LLLL.thy)[39m
|
||
[48;5;235m[38;5;249m- An LLL-like compiler being implemented in Isabelle/HOL[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mHAseembly-evm[0m[38;5;12m (https://github.com/takenobu-hs/haskell-ethereum-assembly)[39m
|
||
[48;5;235m[38;5;249m- An EVM assembly implemented as a Haskell DSL[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mBamboo[0m[38;5;12m (https://github.com/pirapira/bamboo) (experimental)[39m
|
||
[38;5;12m - A language without loops but with explicit constructor invocation at the end of every call[39m
|
||
|
||
[38;2;255;187;0m[4mProgramming Languages that Compile zk-SNARK Circuits and Proofs[0m
|
||
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mZokrates[0m[38;5;12m (https://github.com/JacobEberhardt/ZoKrates)[39m
|
||
[48;5;235m[38;5;249m- A toolbox for zkSNARKs on Ethereum[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;235m[38;5;249m- **a third-party tutorial** (https://github.com/jstoxrocky/zksnarks_example)[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1msnarky[0m[38;5;12m (https://github.com/o1-labs/snarky)[39m
|
||
[48;5;235m[38;5;249m- An OCaml front-end for writing R1CS SNARKs (parametrized over the backend SNARK libraries)[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;235m[38;5;249m- Shallowly embedded DSL that can be compiled into SNARK circuits[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;235m[38;5;249m- The verifier is an OCaml function, so some more work is necessary before using it on Ethereum[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mjsnark[0m[38;5;12m (https://github.com/akosba/jsnark)[39m
|
||
[48;5;235m[38;5;249m- A Java front-end for writing R1CS SNARKs [49m[39m
|
||
|
||
[38;2;255;187;0m[4mDebuggers[0m
|
||
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mREMIX[0m[38;5;12m (https://github.com/ethereum/remix)[39m
|
||
[48;5;235m[38;5;249m- An IDE containing an EVM code debugger[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mdebug\_traceTransaction method[0m[38;5;12m (https://github.com/ethereum/go-ethereum/wiki/Management-APIs#debug_tracetransaction)[39m
|
||
[48;5;235m[38;5;249m- An instruction-wise trace information provided by go-ethereum[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mEthereum Function Signature Database[0m[38;5;12m (https://www.4byte.directory/)[39m
|
||
[48;5;235m[38;5;249m- A database for deciphering `0x165ffd10` into `restart(bytes32,bytes32)`.[49m[39m
|
||
|
||
[38;2;255;187;0m[4mCode Analyzers[0m
|
||
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mEchidna[0m[38;5;12m (https://github.com/trailofbits/echidna)[39m
|
||
[48;5;235m[38;5;249m- A fuzzer on EVM that also takes Solidity input[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;235m[38;5;249m- Able to fuzz a program with sequences of multiple transactions[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mMAIAN[0m[38;5;12m (https://arxiv.org/abs/1802.06038)[39m
|
||
[48;5;235m[38;5;249m- An automatic tool that detects trace vulnerabilities (Greedy, Prodigal and Suicidal) with depth-first search of symbolic execution of multiple invocations[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mMythril[0m[38;5;12m (https://github.com/b-mueller/mythril)[39m
|
||
[48;5;235m[38;5;249m- A blockchain exploration tool that indexes all contracts on the network, containing a disassembler, an ABI function detector and a control flow analyzer[49m[39m
|
||
[48;5;235m[38;5;249m- Comes with a **--fire-laser option** (https://hackernoon.com/crafting-ethereum-exploits-by-laser-fire-1c9acf25af4f)[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;235m[38;5;249m- Powered by **laser-ethereum** (https://github.com/b-mueller/laser-ethereum)[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mporosity[0m[38;5;12m (https://github.com/comaeio/porosity)[39m
|
||
[48;5;235m[38;5;249m- A reverse enginering tool, a disassembler, an ABI function detector and a decompiler that also highlights vulnerabilities[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mManticore[0m[38;5;12m (https://github.com/trailofbits/manticore)[39m
|
||
[48;5;235m[38;5;249m- A symtolic execution engine that can generate inputs to cover codepaths (**asciicast** (https://asciinema.org/a/154012)), which also comes with a Python API[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mevmdis[0m[38;5;12m (https://github.com/arachnid/evmdis)[39m
|
||
[48;5;235m[38;5;249m- A disassembler for EVM code[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1methersplay[0m[38;5;12m (https://github.com/trailofbits/ethersplay)[39m
|
||
[48;5;235m[38;5;249m- An EVM plugin for **Binary Ninja** (https://binary.ninja/)[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mSecurify[0m[38;5;12m (http://securify.ch/)[39m
|
||
[48;5;235m[38;5;249m- A tool that strives to achieve no false-negatives[49m[39m
|
||
[48;5;235m[38;5;249m- The implementation seems not public as of now[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mOyente[0m[38;5;12m (https://github.com/melonproject/oyente)[39m
|
||
[48;5;235m[38;5;249m- An automatic EVM code analyzer based on symbolic execution and **Z3** (https://github.com/Z3Prover/z3) SMT solver[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mDr. Y's Ethereum Contract Analyzer[0m[38;5;12m (http://dry.yoichihirai.com/)[39m
|
||
[48;5;235m[38;5;249m- A symbolic executor for EVM code[49m[39m
|
||
|
||
[38;2;255;187;0m[4mImprovement Proposals[0m
|
||
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mEthereum Improvement Proposals[0m[38;5;12m (https://github.com/ethereum/EIPs)[39m
|
||
[48;5;235m[38;5;249m- A portal for EVM & Ethereum improvements[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;235m[38;5;249m- The soonest changes are listed in the README[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mEVM 1.5[0m[38;5;12m (https://github.com/ethereum/EIPs/blob/master/EIPS/eip-615.md)[39m
|
||
[48;5;235m[38;5;249m- A proposal to tame jumps so that a linear-time scan can determine stack layouts[49m[39m
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1meWASM[0m[38;5;12m (https://github.com/ewasm)[39m
|
||
[48;5;235m[38;5;249m- A proposal to use a **WebAssembly** (http://webassembly.org/) for Ethereum contract execution[49m[39m
|
||
|
||
[38;2;255;187;0m[4mRelated Resources[0m
|
||
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[38;5;14m[1mAwesome Ethereum[0m[38;5;12m (http://awesome-ethereum.com/)[39m
|
||
|
||
[38;2;255;187;0m[4mLicense of This List[0m
|
||
|
||
[38;5;12mAwesome Ethereum Virtual Machine[39m
|
||
|
||
[38;5;12mWritten in 2017 by Yoichi Hirai [39m
|
||
|
||
[38;5;14m[1mother author/contributor lines as appropriate[0m[38;5;12m [39m
|
||
|
||
[38;5;12mTo 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.[39m
|
||
|
||
[38;5;12mYou should have received a copy of the CC0 Public Domain Dedication along with this software. If not, see .[39m
|
||
|
||
[38;5;12methereumvirtualmachine Github: https://github.com/pirapira/awesome-ethereum-virtual-machine[39m
|