{"id":13618288,"url":"https://github.com/ewasm/design","last_synced_at":"2025-05-16T11:04:12.636Z","repository":{"id":43924630,"uuid":"53178225","full_name":"ewasm/design","owner":"ewasm","description":"Ewasm Design Overview and Specification","archived":false,"fork":false,"pushed_at":"2022-09-08T17:40:20.000Z","size":1423,"stargazers_count":1022,"open_issues_count":74,"forks_count":126,"subscribers_count":81,"default_branch":"master","last_synced_at":"2025-04-09T06:07:21.794Z","etag":null,"topics":["eth1","ethereum","ewasm","specification","webassembly"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ewasm.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-03-05T02:21:36.000Z","updated_at":"2025-04-03T09:51:02.000Z","dependencies_parsed_at":"2022-08-29T14:50:20.605Z","dependency_job_id":null,"html_url":"https://github.com/ewasm/design","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ewasm%2Fdesign","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ewasm%2Fdesign/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ewasm%2Fdesign/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ewasm%2Fdesign/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ewasm","download_url":"https://codeload.github.com/ewasm/design/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254518384,"owners_count":22084374,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["eth1","ethereum","ewasm","specification","webassembly"],"created_at":"2024-08-01T20:01:57.820Z","updated_at":"2025-05-16T11:04:12.617Z","avatar_url":"https://github.com/ewasm.png","language":null,"funding_links":[],"categories":["PROJECT 项目","Others"],"sub_categories":["Research 最新研究"],"readme":"# Ethereum flavored WebAssembly (ewasm)\n\nSpecification **Revision 4**\n\nThis 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.\n\n**This repository is also available through [ReadTheDocs](https://ewasm.readthedocs.io).**\n\n## What is WebAssembly?\n\n\u003e WebAssembly (or Wasm as a contraction) is a new, portable, size- and load-time-efficient format. WebAssembly aims to execute at native speed by taking advantage of common hardware capabilities available on a wide range of platforms. WebAssembly is currently being designed as an open standard by a W3C Community Group.\n\nPlease review the [WebAssembly](http://webassembly.org/) [design](http://webassembly.org/docs/high-level-goals/) and [instruction set](https://webassembly.github.io/spec/core/appendix/index-instructions.html#index-instr) first. (You can also make a pull request or raise an issue at the [Wasm Github repo](https://github.com/WebAssembly/design).)\n\nA few key points:\n* WebAssembly defines an instruction set, intermediate source format (wast) and a binary encoded format (wasm).\n* WebAssembly has a few higher level features, such as the ability to import and execute outside methods defined via an interface.\n* [LLVM](https://llvm.org/) includes a WebAssembly backend to generate Wasm output.\n* Major browser JavaScript engines will notably have native support for\n  WebAssembly, including but not limited to: Google's\n  [V8](https://github.com/v8/v8) engine (Node.js and Chromium-based browsers),\n  Microsoft's [Chakra](https://github.com/Microsoft/ChakraCore) engine\n  (Microsoft Edge), Mozilla's\n  [Spidermonkey](https://github.com/mozilla/gecko-dev/tree/master/js) engine\n  (Firefox and Thunderbird).\n* Other non-browser implementations exist too:\n  [wasm-jit-prototype](https://github.com/WebAssembly/wasm-jit-prototype) (a\n  standalone VM using an LLVM backend),\n  [wabt](https://github.com/WebAssembly/wabt) (a stack-based interpreter),\n  [ml-proto](https://github.com/WebAssembly/spec/tree/master/ml-proto) (the\n  OCaml reference interpreter), etc.\n\n## What is Ethereum flavored WebAssembly (ewasm)?\n\newasm is a restricted subset of Wasm to be used for contracts in Ethereum.\n\newasm:\n* specifies the [VM semantics](./vm_semantics.md)\n* specifies the [semantics for an *ewasm contract*](./contract_interface.md)\n* specifies an [Ethereum environment interface](./eth_interface.md) to facilitate interaction with the Ethereum environment from an *ewasm contract*\n* specifies [system contracts](./system_contracts.md)\n* specifies [metering](./metering.md) for instructions\n* and aims to restrict [non-deterministic behavior](https://github.com/WebAssembly/design/blob/master/Nondeterminism.md)\n* specifies a backwards compatible upgrade path to EVM1\n\n### Goals of the ewasm project\n\n* To provide a specification of *ewasm contract* semantics and the *Ethereum interface*\n* To provide an *EVM transcompiler*, preferably as an ewasm contract\n* To provide a *metering injector*, preferably as an ewasm contract\n* To provide a VM implementation for executing ewasm contracts\n* To implement an ewasm backend in the Solidity compiler\n* To provide a library and instructions for writing contracts in Rust\n* To provide a library and instructions for writing contracts in C\n\n### Glossary\n\n* *Ewasm contract*: a contract adhering to the ewasm specification\n* *Ethereum environment interface (EEI)*: a set of methods available to ewasm contracts\n* *metering*: the act of measuring execution cost in a deterministic way\n* *metering injector*: a transformation tool inserting metering code to an ewasm contract\n* *EVM transcompiler*: an EVM bytecode (the current Ethereum VM) to ewasm transcompiler. [See this chapter](./evm_transcompiler.md).\n\n### Resources\n\n* [FAQ](./faq.md)\n* [Rationale](./rationale.md)\n* [VM semantics](./vm_semantics.md)\n* [Ethereum environment interface](./eth_interface.md)\n* [Ewasm Contract Interface](./contract_interface.md)\n* [System contracts](./system_contracts.md)\n* [Backwards compatibility instructions](./backwards_compatibility.md)\n* [Original Proposal](https://github.com/ethereum/EIPs/issues/48) (EIP#48)\n* [WebAssembly Specification](https://webassembly.github.io/spec/)\n* [WebAssembly design documents](https://github.com/WebAssembly/design)\n\n### Projects\n\n* [ewasm-tests](https://github.com/ewasm/ewasm-tests)\n* [wasm-metering](https://github.com/ewasm/wasm-metering)\n* [ewasm-kernel](https://github.com/ewasm/ewasm-kernel)\n* [evm2wasm](https://github.com/ewasm/evm2wasm)\n* [ewasm-libc](https://github.com/ewasm/ewasm-libc)\n* [assemblyscript-ewasm-api](https://github.com/ewasm/assemblyscript-ewasm-api)\n* [ewasm-rust-api](https://github.com/ewasm/ewasm-rust-api)\n\n### Design Process \u0026 Contributing\nFor now, high-level design discussions should continue to be held in the design repository, via issues and pull requests. Feel free to file [issues](https://github.com/ethereum/ewasm-design/issues).\n\n## Chat\n[Gitter](https://gitter.im/ewasm/Lobby)  \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fewasm%2Fdesign","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fewasm%2Fdesign","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fewasm%2Fdesign/lists"}