Why WebAssembly for Smart Contracts?
- High performance: Wasm is high performance — it’s built to be as close to native machine code as possible while still being platform independent.
- Small size: It facilitates small binaries to ship over the internet to devices with potentially slow internet connection. This is a great fit for the space-constrainted blockchain world.
- General VM & bytecode: It was developed so that code can be deployed in any browser with the same result. Contrary to the EVM it was not developed towards a very specific use case, this has the benefit of a lot of tooling being available and large companies putting a lot of resources into furthering Wasm development.
- Efficient JIT execution: 64 and 32-bit integer operation support that maps one-to-one with CPU instructions.
- Minimalistic: Formal spec that fits on a single page.
- Deterministic execution: Wasm is easily made deterministic by removing floating point operations, which is necessary for consensus algorithms.
- Open Standards > Custom Solutions: Wasm is a standard for web browsers developed by W3C workgroup that includes Google, Mozilla, and others. There’s been many years of work put into Wasm, both by compiler and standardisation teams.
- Many languages available: Wasm expands the family of languages available to smart contract developers to include Rust, C/C++, AssemblyScript, C#, Haxe, and Kotlin. This means you can write smart contracts in whichever language you’re familiar with.
- Memory-safe, sandboxed, and platform-independent.
- LLVM support: Supported by the LLVM compiler infrastructure project, meaning that Wasm benefits from over a decade of LLVM’s compiler optimisation.
- Large companies involved: Continually developed by major companies such as Google, Apple, Microsoft, Mozilla, and Facebook.