EVM, Truebit, Nebulas는 어떤 가상 머신을 사용하는가?
가상 머신(Virtual Machine, VM)은 컴퓨터 시스템의 에뮬레이션(emulation)이다. 가상 머신은 범주에 따라 두 부류로 분류할 수 있다. 시스템 가상 머신(system virtual machine)은 실제 하드웨어의 대체재로서 온전한 운영체제의 실행을 지원한다. 반면 프로세스 가상 머신(process virtual machine)은 플랫폼 독립적인 컴퓨터 프로그램의 실행을 위해 설계되었다. 프로세스 가상 머신의 대표적인 예로 자바 가상 머신(Java Virtual Machine, JVM)이 있다.
블록체인에서 주로 쓰이는 가상 머신은 프로세스 가상 머신으로, 스마트 컨트랙트의 바이트코드(bytecode)를 실행하기 위해 사용된다. 가상 머신을 활용하면 하드웨어 독립적인 환경을 구축할 수 있으므로 스마트 컨트랙트를 수행한 기기의 종류와는 무관하게 동일한 결과를 보장할 수 있다.
또한, 가상 머신을 사용하면 명령어 수행에 따른 수수료 책정이 용이하다. 운영체제와 상관없이 명령어의 페치(fetch)부터 실행까지 사이클 전 영역에 대한 접근 및 임의 수정이 가능하기 때문이다.
이외에도 다양한 부분에서 가상 머신을 활용할 수 있는데, 본 글의 마지막 부분에서 Truebit과 Nebulas를 그 예시로 보일 것이다.
이더리움은 스마트 컨트랙트를 구동하는 탈중앙 플랫폼이다.[1] 이더리움에는 스마트 컨트랙트의 실행을 위한 이더리움 가상 머신(Ethereum Virtual Machine, EVM)이 존재한다. EVM은 이더리움 프로토콜과 연산의 핵심으로, 상태(state)를 업데이트할 필요가 있는 모든 곳에서 사용된다.
EVM의 상세는 다음에 다뤄보도록 하고, 우선은 거시적인 관점에서만 살펴보도록 하자. EVM은 영구적인 데이터 저장소를 가진 범세계적인 탈중앙화 컴퓨터로 추상화할 수 있다.[2] 다른 관점에서, 그 역할과 범주만 벗어나지 않는다면, 즉 동일하게 추상화될 수 있다면 EVM을 대신하여 다른 어떠한 가상 머신을 사용해도 무방하다.
대표적인 예가 eWASM이다.[3] eWASM은 이더리움에서 스마트 컨트랙트를 사용하기 위한 WASM(WebAssembly, 웹어셈블리)[4]의 제한된 부분집합이다. eWASM은 기존의 EVM보다 훨씬 빠르고, 이식성이 높고, 더 많은 프로그래밍 언어를 지원한다는 강점이 있다. 그러나 아직 제대로 검증되지 않았다는 한계가 존재한다.
트루빗(Truebit)은 신뢰할 수 없는, 확장 가능한 연산(computation)을 위해 활용되는 암호경제학적 프로토콜이자 블록체인 인프라(infrastructure)이다.[5] 이전 포스팅 “블록체인의 확장성 문제와 솔루션 소개 – 2”[6]에서 잠깐 언급된 바 있다.
상술한 EVM과 같은 블록체인상 가상 머신에는 수행할 수 있는 연산에 분명한 한계가 있다. 가령 딥러닝과 같은 복잡한 연산은 낮은 사양, 구조적 한계, 막대한 연산 수수료로부터 EVM에서의 구동이 사실상 불가능하다. 복잡한 연산을 블록체인의 밖(OFF-chain, 오프체인)에서 수행한 뒤, 그 결과만 블록체인에(ON-chain,온체인) 등록해 활용하자는 것이 트루빗이다. 물론 그 결과에 대하여 무결성을 보장하기 위해 여러 수학적, 암호학적, 경제학적인 기법이 상당수 활용된다.
트루빗 프로토콜을 간단하게만 살펴보자.[7] 업무 부여자(task giver)가 스마트 컨트랙트를 통해 보상과 함께 연산을 위탁한다. 흥미를 보인 참여자 중 추첨을 통해 해결자(solver)가 선정되고, 그는 오프체인에서 연산을 수행한 뒤 결과를 블록체인에 등록한다. 이 결과에 대해 정해진 시간(타임아웃) 동안 이의가 없다면 해결자가 보상을 받는다. 만일 어느 검증자(verifier)가 결과에 이의를 제기한다면, 그는 도전자(challenger)가 되어 검증 게임(verification game)을 시작한다.
검증 게임은 프로그램 코드에서 해결자와 검증자 간 불일치가 발생한 부분을 찾아 해당하는 명령어만을 온체인상 스마트 컨트랙트로 수행하는 과정이다. 스마트 컨트랙트가 내놓은 결과와 일치하는 값을 제출한 자가 검증 게임에서 승리한다. 승자는 보상을 받고 패자는 보증금을 몰수당한다. 이외에도 참여를 유도하고 공격을 방지하기 위한 여러 기법이 있으나, 우선은 무시하도록 하자. 우리가 집중할 것은 가상 머신이다.
트루빗에서는 총 두 종류의 가상 머신이 사용된다. 하나는 해결자와 검증자가 자체적으로 연산을 수행하고 결과를 도출하기 위한 WASM 기반 오프체인 인터프리터(OFF-chain Interpreter)이다. 검증 게임에서의 올바른 판결을 위하여 하드웨어 및 시스템 차이로부터 결과가 달라지는 사태를 피해야 하기 때문이다.
또 다른 하나는 블록체인상에 존재하는 온체인 스텝퍼(ON-chain Stepper)이다. 이는 스마트 컨트랙트로 구현된 WASM의 부분집합이다. 구현체에 따르자면 솔리디티(solidity)로 만들어졌다.[8] 즉, 트루빗 온체인 스텝퍼는 EVM상에서 구동되는 WASM 인터프리터이다. EVM을 범세계적인 탈중앙화 컴퓨터로 추상화할 수 있음을 상기해보자.
네뷸라스(Nebulas)는 가치 기반 블록체인 운영체제 및 검색엔진이다.[9] 블록체인 내 데이터의 가치를 산정하고, 개발자를 지원하여 블록체인 생태계를 건강하게 구축하기 위해 고안되었다. 네뷸라스는 가치 산정에 Nebulas Rank(NR)를, 개발자 장려에 Developer Incentive Protocol(DIP)이라는 자체적인 메커니즘을 사용한다. 두 메커니즘은 모두 프로토콜에 포함되어 있으며 공개적이고 결정론적으로 동작한다. 또한, 커뮤니티 기반 개발(Community Driven Development. CDD)로 이들 메커니즘을 다듬어간다.
블록체인과 같은 분산 환경에서는 사용자의 클라이언트 프로그램 및 프로토콜 업데이트를 강제할 수 없다. 따라서 종래의 블록체인에서 프로토콜을 크게 업데이트하고자 한다면 하드 포크(hard fork) 혹은 소프트 포크(soft fork)가 필연적이다. 그러나 네뷸라스는 Nebulas Force(NF)를 통해 소프트 포크 및 하드 포크의 과정 없이, 블록체인 스스로가 트랜잭션에 포함된 최신 프로토콜 코드를 바탕으로 자신을 업데이트한다.[10] 이 마법과 같은 일은 네뷸라스 블록체인 프로토콜 역시 가상 머신에서 실행되기 때문에 가능하다.
LLVM[11]에 기반한 네뷸라스 가상 머신(Nebulas Virtual Machine, NVM)은 NF의 핵심 요소이다. 프로토콜 코드는 LLVM 바이트코드로 컴파일(compile)되어 NVM의 샌드박스(sandbox) 환경에서 실행된다. 새로운 코드가 체인에 배포되면 LLVM 바이트코드가 생성되고 기존 코드를 교체하여 샌드박스에서 실행된다. 이로써 프로토콜의 자동 업데이트가 가능하다.
박상현 @ SGBL (Sogang Blockchain Laboratory)
twodude@naver.com
[2] https://github.com/ethereumbook/ethereumbook
[6] https://brunch.co.kr/@curg/5
[7] Teutsch, Jason, and Christian Reitwießner. "A scalable verification solution for blockchains." URL: https://people. cs. uchicago. edu/teutsch/papers/truebit pdf (2017).
[8] https://github.com/TrueBitFoundation/truebit-os
[9] https://nebulas.io/index.html
[10] https://nebulas.io/docs/NebulasTechnicalWhitepaper.pdf
[11] https://llvm.org/