Title Text


Writing Ewasm in Rust
用 Rust 编写Ewasm 合约
Antonio Yang
yanganto@github

Ewasm Contract
WHAT, HOW & WHY ?

第六届中国开源年会 COSCon'21 开心开源 Happy Hacking
What
Ewasm = Ethereum WebAssembly
WebAssembly is an open standard that defines a portable binary-code format for executable programs, and a corresponding textual assembly language.
Ethereum is a decentralized, open-source blockchain with smart contract (web3) functionality.



How



- A deterministic subset of WebAssembly.


第六届中国开源年会 COSCon'21 开心开源 Happy Hacking
Why
Any language with HTTP protocol
Web2 Server
API


EVM

Web3 Blockchain
Restricted
Any language compile to EWasm format

WebAssembly
WHY RUST ?

第六届中国开源年会 COSCon'21 开心开源 Happy Hacking
What is Rust ?

Rust is a multi-paradigm, high-level, general-purpose programming language designed for performance and safety, especially safe concurrency.

第六届中国开源年会 COSCon'21 开心开源 Happy Hacking
Why Rust ?

- low-level control and reliable performance.
- free from the non-deterministic garbage collection
- no runtime, enabling small binary sizes

Web 3
BLOCKCHAIN

第六届中国开源年会 COSCon'21 开心开源 Happy Hacking
Web ?


Web3 Blockchain
Talk to contract in Binary over the blockchain network
Web2 Server
API
Talk to API in Hyper Text Markup Language over the internet
API
API
API
API









第六届中国开源年会 COSCon'21 开心开源 Happy Hacking
Web 3


Web
Blockchain (Web3)
Handler(s)
Main entry

第六届中国开源年会 COSCon'21 开心开源 Happy Hacking
Routing

In web2, Uniform Resource Identifier(URI) for routing

第六届中国开源年会 COSCon'21 开心开源 Happy Hacking
Routing
In web3, functional signature for routing
- 4 bytes
- Optional attribute
- Hash(fn_name(type,))


第六届中国开源年会 COSCon'21 开心开源 Happy Hacking
Same Backend Idea

Handlers
Main function
(entry point)

Prior Art
CONTRACT IN RUST

第六届中国开源年会 COSCon'21 开心开源 Happy Hacking
Contract in Rust
ewasm-rust-api
-
Version 0.11.0
-
2019 Nov 27


.rs

Executor

第六届中国开源年会 COSCon'21 开心开源 Happy Hacking
ewasm-rust-api

ERC20 in Rust
but ... not really

第六届中国开源年会 COSCon'21 开心开源 Happy Hacking
Pain Point
- Not really Rusty API
-
Result
-
Option
-
- Operating in low-level
-
operate on Bytes32
- Manually handle functional signature
-
- Not easy to test with cargo test


第六届中国开源年会 COSCon'21 开心开源 Happy Hacking
C vs Rust
pub enum CallResult { Successful, Failure, Revert, Unknown, }
pub enum CallError { Failure, Revert, Unknown, }
fn call() -> CallResult;
fn call() -> Result<(), CallError>;
Please read things behind the wordings!

Current Status
DIFFERENT FROM WEB

第六届中国开源年会 COSCon'21 开心开源 Happy Hacking
Different in Functions

Constructor
Handlers
Main function
(entry point)

第六届中国开源年会 COSCon'21 开心开源 Happy Hacking
Constructor
- Another wasm executable
- Run once
- Return main wasm executable
- Not storage on chain

第六届中国开源年会 COSCon'21 开心开源 Happy Hacking
Different in Storage
- File server
- Key value database
- Relational database
- Bytes 32
- ?
- ?
Web
Blockchain (Web3)

第六届中国开源年会 COSCon'21 开心开源 Happy Hacking
Different in Test
- Local server
- Hot reload
- Mock request
- Free to request
- Fuzz test
- Deploy on test net
- ?
- ?
- Request with fee?
- ?
Web
Blockchain (Web3)

Writing Ewasm In Rust
SEW UP EWASM

第六届中国开源年会 COSCon'21 开心开源 Happy Hacking
Sew Up
ewasm-rust-api
sewup


.rs
Web3 Blockchain
- Rusty API
- high-level operation (kv, rdb, ...)
- cargo test in local
- cargo sewup to build & deploy
- Low-level operation
- Byte32 operation

第六届中国开源年会 COSCon'21 开心开源 Happy Hacking
Sew Up

Tests
Create WasmEdge runtime,
Add _compile_constructor_test,
Add _compile_runtime_test
Run each test in runtime
Use macro to add common test utilities,
then just cargo test

SewUp
HAPPY HACKING

THANK YOU
QUESTIONS?
第六届中国开源年会 COSCon'21 开心开源 Happy Hacking

扫码关注
开源社公众号
Let's meet on github or hackthon,
issue, PR are welcome
用 Rust 编写 Ewasm 合约 - Writing Ewasm in Rust
By Antonio Yang
用 Rust 编写 Ewasm 合约 - Writing Ewasm in Rust
The slides provide the general concept to build up an Ewasm contract in Rust. Besides, the pain with ewasm_rust_api are pointed and also provide a framework SewUp try to solve these pain point
- 1,193