Ethereum flavored WebAssembly (eWASM) Design
This repository contains documents describing the design and high-level overview of eWASM. Expect the contents of this repository to be in flux: everything is still under discussion.
What is WebAssembly?
WebAssembly (or WASM for short) is a new, portable, size- and load-time-efficient format. WebAssembly is currently being designed as an open standard by a W3C Community Group.
Please review the WebAssembly design and instruction set first.
A few key points:
- WebAssembly defines an instruction set, intermediate source format (WAST) and a binary encoded format (WASM).
- WebAssembly has a few higher level features, such as the ability to import and execute outside methods defined via an interface.
- LLVM includes a WebAssembly backend to generate WASM output.
- Other non-browser implementations exist too: wasm-jit-prototype (a standalone VM using an LLVM backend), wabt (a stack-based interpreter), ml-proto (the OCaml reference interpreter), etc.
What is Ethereum flavored WebAssembly (eWASM)?
eWASM is a restricted subset of WASM to be used for contracts in Ethereum.
- specifies the VM semantics
- specifies the semantics for an eWASM contract
- specifies an Ethereum environment interface to facilitate interaction with the Ethereum environment from an eWASM contract
- specifies system contracts
- specifies metering for instructions
- and aims to restrict non-deterministic behavior
- specifies a backwards compatible upgrade path to EVM1
Goals of the eWASM project
- To provide a specification of eWASM contract semantics and the Ethereum interface
- To provide an EVM transpiler, preferably as an eWASM contract
- To provide a metering injector, preferably as an eWASM contract
- To provide a VM implementation for executing eWASM contracts
- To implement an eWASM backend in the Solidity compiler
- To provide a library and instructions for writing contracts in Rust
- To provide a library and instructions for writing contracts in C
- eWASM contract: a contract adhering to the eWASM specification
- Ethereum environment interface (EEI): a set of methods available to eWASM contracts
- metering: the act of measuring execution cost in a deterministic way
- metering injector: a transformation tool inserting metering code to an eWASM contract
- EVM transpiler: an EVM bytecode (the current Ethereum VM) to eWASM transcompiler
- VM semantics
- Ethereum environment interface
- eWASM Contract Interface
- System contracts
- Backwards compatibility instructions
- Original Proposal (EIP#48)
- WebAssembly Specification
- WebAssembly design documents
Design Process & Contributing
For now, high-level design discussions should continue to be held in the design repository, via issues and pull requests. Feel free to file issues.