Devcon 4 Review — Ewasm Project

Ewasm breakout 세션 후기

Ewasm Breakout Session on Devcon 4
온더는 이더리움 블록체인의 확장성 솔루션 Plasma 체인을 연구개발하는 회사입니다. 온더의 비전은 이더리움 블록체인 기술의 사용성을 제고시키고, 암호경제와 현실경제를 연동시켜 지금보다 더 나은 세상을 만드는 것입니다.

Devcon 4를 다녀온 지도 벌써 한 달이 다 되어가네요. 다녀오자 마자 후기를 쓰려 했는 데 생각보다 시간이 안 나서 이제야 후기를 남깁니다. ^^;

Devcon이 열린 4일의 기간동안 엄청나게 많은 세션에서 다양한 지식이 한번에 쏟아지니 정신이 없었던 기억이 납니다. 이더리움 행사 중 가장 큰 행사답게 재밌고 유익한 세션도 많았는데요, 그 중에 인상깊었던 ewasm breakout 세션에서 발표했던 ewasm project에 대해 소개해보고자 합니다.

ewasm은 이더리움 2.0 “Serenity” 에서 EVM을 대체하여 Sharding, Casper와 함께 이더리움 2.0의 주요한 기능을 담당할 가능성이 높습니다. 그렇다면 ewasm은 무엇일까요? 우선 ewasm을 이해하기에 앞서 Web Assembly를 이해할 필요가 있습니다.

  1. 웹어셈블리(Web Assembly)란?

웹어셈블리(WebAssembly; Wasm)는 웹에서 보다 높은 성능의 애플리케이션을 사용하기 위해 만든 것으로 가상머신과 가상머신을 구동하는 바이트 코드로 이루어져 있습니다.

Web Assembly

위 그림을 보면 C/C++/Rust 언어로 작성한 프로그램을 웹어셈블리(WebAssembly; Wasm)로 변환합니다. 웹어셈블리는 바이트 코드로 이루어져 있는데 이를 웹어셈블리 가상머신(WebAssembly Virtual Machine)에 넣으면 자바스크립트 엔진을 통해 브라우저에서 실행할 수 있는 것입니다.

이를 통해 예전에 웹에서 실행하기 힘들었던 고성능을 요구하는 프로그램을 웹어플리케이션으로 만들 수 있고 C/C++/Rust로 만든 방대한 라이브러리를 이용할 수 있게 됩니다.

2. Ethereum flavored WebAssembly (ewasm)이란?

ewasm logo

그렇다면 ewasm은 무엇일까요? ewasm은 이더리움 환경에서 스마트 컨트랙트를 작성 및 구동하기 위해 Web Assembly를 차용한 것이라 할 수 있습니다. 만약 ewasm을 도입했을 때 기대되는 장점은 무엇일까요?

  • 기존 EVM보다 빠른 실행 속도를 기대할 수 있습니다.
  • 기존의 프로그래밍언어로 스마트 컨트랙트를 작성할 수 있습니다. 현재는 C/C++, Rust, Assembly Script 등 지원하는 언어가 한정적이지만 계속 늘어나고 있습니다.
  • 기존 프로그래밍언어(C/C++, Rust, Java Script)로 만들어져있던 라이브러리를 재사용 할 수 있습니다.
  • 방대한 커뮤니티의 지원을 받을 수 있습니다. ewasm은 Web assembly를 거의 그대로 사용하고 있어 Web Assembly를 개발하고 지원하는 커뮤니티의 도움을 받을 수 있습니다.

보다 구체적으로 스마트 컨트랙트 개발 예를 들어 봅시다.

일반적인 dapp 구현 개발 방식

일반적인 dapp을 배포하기 위한 코드입니다.

일반적인 dapp 배포 방식

dapp을 배포하는 과정입니다.

dapp 하나를 실행하기 위해서 스마트 컨트랙트는 truffle을 이용해서 블록체인 네트워크에 배포하고 Frontend에서는 스마트 컨트랙트를 가져와 따로 구현을 해야 하죠.

ewasm이 구현되었을 때 dapp 배포 방식

하지만 ewasm이 구현된다면 위와 같이 두번의 과정을 거치지 않고 한번에 컨트랙트를 import하여 바로 배포하고 사용할 수도 있을 것입니다.

3. ewasm Roadmap

ewasm 개발 로드맵

ewasm 개발 로드맵입니다. 현재는 Goal 1에 해당합니다.

4. Assembly Script

wrc-20 exapmle Assembly Script 구현코드(wrc-20은 ewasm으로 구현한 erc-20토큰 컨트랙트란 의미입니다.)

ewasm에서 지원하는 언어인 Assembly Script입니다. Modern Java Script와 비슷한 문법을 가지고 있고 Java Script로 만든 라이브러리를 사용할 수 있다는 장점이 있습니다.(npm, yarn등 패키지 매니저를 사용할 수 있습니다.)

5. EVMC, host functions, and the evolution of the EEI

EVMC, host functions, EEI 소개

EVMC는 이더리움 클라이언트(Geth)와 ewasm VM을 연결해주는 API입니다. EVMC는 EVM 내부에서 정의된 opcode중 특별한 opcode (예를 들어 call, sload, sstore, balance 등)을 외부로 빼내 API로 정의하여 사용할 수 있게 구현하고 있는 프로젝트입니다. 다시 말하면 EVM 가상머신내부에서 복잡한 로직을 실행하던 것을 외부로 넘겨 EVM 가상머신의 부담을 줄여줄 수 있는 것입니다.

EVMC의 두 가지 측면

EVMC는 Host, VM측면에서 작동하게 됩니다. Host는 이더리움 클라이언트(e.g. geth)에서 ewasm VM에 연결하는 API를 구현하게 됩니다. VM에서는 API요청을 받아 ewasm 가상머신이 실행되도록 합니다. 다시 말해서 Host에서 API 요청을 보내면 VM에서 API요청을 받아 ewasm 가상머신이 실행되는 것입니다.

EVMC Host methods

Host 즉 이더리움 클라이언트에서 구현해야 할 API의 인터페이스입니다. API구현은 객체지향모델(Objected Oriented Programming; OOP)로 디자인 되어 있으며 Host는 인터페이스로 정의된 함수를 구현해야만 합니다.

Hera-EVMC를 지원하는 ewasm VM 구현체

Hera는 EVMC를 지원하는 ewasm VM 구현체입니다. EVMC를 활용하여 API를 통해 Hera에 요청하면 Hera는 VM 인스턴스를 만들어 요청을 수행하게 됩니다.

EEI evolution

EVMC 프로젝트로 잠깐 다시 돌아가 볼까요? EVMC 프로젝트에 대해 좀 더 이야기 해보겠습니다.

EVM “special” instructions

위 opcode들이 EVM에 사용하는 special instructions라고 정의하고 있습니다. 이 opcode들은 state와 관련된 작업을 수행하는 특별한 opcode라고 할 수 있습니다.

SLOAD, SStore instruction

EVM special instructions 중 SLOAD, SSTORE를 어떻게 구현하는 지 보도록 하겠습니다.

SLOAD, SSTORE EVMC Host Methods

SLOAD, SSTORE에 관한 EVMC Host Methods 인터페이스입니다. 현재는 Go lang으로 구현하고 있습니다.

EEI Specification

위 코드는 ewasm 바이트 코드를 사람들이 읽을 수 있도록 텍스트로 변환(wast; WebAssembly Text Format)한 것입니다. ewasm이 도입되면 ewasm의 바이트 코드로 EVMC Host Methods를 호출하여 사용할 수 있게 됩니다.

마치며

ewasm 프로젝트는 현재 개발중인 프로젝트로 변동 가능성이 많고 아직 실험적인 단계라고 할 수 있습니다. 하지만 성공적으로 도입된다면 위에서 언급했듯이 기존 EVM보다 처리속도가 빨라질 것이고 개발자 경험(Developer Experience) 도 향상될 것입니다. 또한 ewasm 프로젝트가 기반하고 있는 WebAssembly는 방대하고 안정적인 커뮤니티를 통해 발전하고 있으므로 ewasm 프로젝트가 성공할 가능성은 높다고 할 수 있습니다.