테크 #기술분석#tech#리브라
한단계 진화한 블록체인 개발 언어, 페이스북 무브
안전성, 희소성 검증 로직이 내재된 블록체인 전용 프로그래밍 언어...리브라에 최적화
강민승 기자
등록일: 2019-06-21  수정일: 2019-06-21


“우리가 나름의 프로그래밍 언어를 만든 이유는 시간이 흐른 뒤에도 우리 블록체인의 유연성에 초점을 두고 싶었기 때문이다. 이를 위한 핵심적인 방법 가운데 하나는 블록체인 내에 프로그램 능력을 갖추는 것이다. 그러면 새로운 기술, 새로운 기능을 서비스에 탑재하고 싶을 때 전체 네트워크가 업데이트될 때까지 기다리지 않아도 된다. 한편 기존 블록체인에서 시큐어 코딩을 하는데는 많은 문제가 있었다. 반면 무브 언어를 만드는 데 있어 가장 핵심적인 원칙은 보안이었다. 개발자는 무브 언어를 통해 시큐어 코딩을 더욱 쉽게 할 수 있게 된다.” – 벤 모러, 페이스북 블록체인 기술 책임자


페이스북은 수십억 인구에게 금융서비스를 경계없이 제공할 리브라의 백서를 지난 18일 공개했다. 블록체인은 리브라의 금융서비스를 위한 암호화된 데이터베이스(DB)로써 기능한다. 리브라의 메인체인에는 사용자가 구현한 토큰 등 프로그래밍 가능한 리소스를 여럿 저장할 수 있다. 서비스가 광범위하게 사용되려면 프로토콜의 확장성 등 데이터를 관리하는 방식이 특히 중요하다. 리브라 블록체인은 이더리움 블록체인처럼 시간의 흐름에 따라 정보 변화를 감지하고 기억하는 스테이트(상태) 시스템으로 구동된다.


스테이트는 블록체인의 기억장치로 전역으로 저장되는 광역 상태와 계정별로 저장하는 어카운트 상태로 일반적으로 나뉜다. 리브라의 블록체인도 데이터를 관리하기 위해 스테이트 모델을 적용하고 있다. 리브라 블록체인에 담긴 상태 정보는 이더리움이 상태를 처리하는 바와 유사하게 사용자 계정으로부터 트랜잭션이 전송돼 실행되면 기존 상태가 최신값으로 수정된다. 이때 계정은 서명을 대신하는 지갑 서비스가 될 수도 있고 사용자 자신이 될 수도 있다.


트랜잭션이 에러없이 프로토콜에 유연하게 배포되도록 설계하려면 고려해야할 점이 많다. 네트워크 지연 뿐만 아니라 동기화 등 변수가 많기 때문이다. 실제로 트랜잭션이 네트워크에 전파되는데에는 평균 11초 정도의 시간이 소요된다. 블록 타임 등 거래가 완결되는데도 시간이 상당수 소요된다. 이 과정에서 상태를 무분별하게 악의적으로 변경하려는 시도도 많이 발생한다. 악의적인 상태 변경 시도를 걸러내고 분산원장에 트랜잭션이 성공적으로 포함되려면 합의 알고리즘 등 여러 장치가 필요하다.

프로그래밍 언어로 차별화 포인트, 리브라 블록체인

페이스북은 리브라 프로토콜에서 트랜잭션을 유연하게 배포하고 검증도 수월하도록 특화한 블록체인 전용 개발 언어를 개발했다. 리브라 블록체인은 다른 블록체인 플랫폼과 프로그래밍 언어에서 차별화 포인트를 둔다. 상당수 블록체인은 데이터의 검증을 블록 구조와 합의 알고리즘에서 전적으로 처리하는 반면 리브라는 토큰 등 리소스 객체의 안정성, 희소성 검증 로직을 무브 내부에 추가해 데이터 검증 수준을 더욱 높였다. 이를 최적화하면 프로토콜의 보안성과 거래 검증 속도를 추가적으로 향상시킬 효과가 있을 것으로 기대된다. 한편 무브 언어는 트랜잭션의 병렬 실행을 지원하도록 설계됐다. 리브라의 블록이 완결되는 시간은 10초에 트랜잭션 처리성능은 1000TPS 수준인 것으로 알려져 있다.


리브라는 무브 가상머신(VM) 등 트랜잭션의 실행환경을 포함하고 있다. 무브 VM은 리브라 블록체인이 구동되는 곳으로 지구상의 노드가 여럿 연결된 거대한 컴퓨터와도 같다. 이때 컴퓨터가 실시간 연산하는 프로그램을 스마트 컨트랙트라고 볼 수 있다. 리브라에서 구현되는 스마트 컨트랙트는 모두 무브 언어로 작성된다. 리브라 블록체인에서는 스마트 컨트랙트를 다루는 모듈이라는 개념이 있다. 모듈은 리브라 블록체인의 특정 계정에 배포돼 저장된 코드 단위를 뜻한다. 이더리움의 스마트 컨트랙트가 작동하는 과정은 리브라에서는 모듈 간 호출이나 모듈에서 로컬 연산을 하는 등의 절차에 해당한다.


한편 무브는 리브라 블록체인의 환경 설정을 쉽게하고 프로토콜 자체의 확장성을 높이기 위해 최적화된 언어다. 계정 관리, 트랜잭션 검증, 검증자 관리, 리브라 코인 관리 등 리브라 프로토콜의 코어 기능 역시 무브로 구현됐다. 현재 초기 버전 리브라에는 무브의 여러 기능이 제한돼 있고 다양한 기능이 향후 업데이트 될 예정이다. 무브는 현재 베타 버전으로 리브라 깃헙(github)을 통해 사용해 볼 수 있으며 공식 버전은 내년 상반기에 공개될 예정이다.


기존 스크립트, EVM 바이트코드는 취약점이 존재한다

무브의 백서에서는 블록체인에서 사용되는 기존 스크립트 언어의 한계를 지적한다. 기존 스크립트에서는 코인을 매개하는 과정상 단순한 정수형을 사용할 뿐 코인, 토큰을 규정하는 자료 타입이 존재하지 않아 한계가 있다는 것이다. 또 비트코인의 스크립트나 이더리움가상머신(EVM) 바이트코드 모두 현재 프로그래밍 언어로써 구조적으로 완벽하지 않아 새로운 언어를 개발했다는 설명이다.


실제로 비트코인의 스크립트는 프로그래밍 가능한 최초의 디지털 화폐인 비트코인을 탄생시켰고 다중서명 등 고급기능도 나름 구현할 수 있지만 표현할 수 있는 범위가 애초에 좁다. 뿐만 아니라 비트코인 프로토콜에 기반해 사용자 기반 토큰도 발행할 수는 있지만 복잡도가 늘어 현실적으로 어렵다.


또 스마트 컨트랙트를 개발할 수 있고 튜링 완전한 기능을 지원하는 등 여러모로 발달한 EVM 바이트코드에도 허점이 존재한다고 리브라는 지적한다. 솔리디티나 EVM 바이트코드로 작성된 코드는 노드에서 동적 디스패치를 통해 수행되는데 과정 상 버그가 여럿 발생할 수 있다고 무브 백서는 분석한다. 동적 디스패치는 코드가 실제로 실행하는 순간에 도달해야 어떤 함수가 호출될지 정확히 알 수 있는 구조를 말한다.


예를 들어 스마트 컨트랙트로 이더를 전송하는 작업은 동적 디스패치를 통해 이뤄지는데 어떤 메소드, 어떤 노드를 택해 실행될 것인지는 컴파일 하는 당시에는 알 수 없고 실행되는 순간이 돼야만 알 수 있다. 동적 디스패치에서는 버그가 발생할 가능성이 높아 보완이 필요하다는 지적도 있다. 실제로 재진입 문제, DAO 공격, 패리티 지갑 해킹 등이 이같은 취약점에서 발생했다고 무브 백서는 지적한다.


반면 리브라의 개발 언어인 무브는 토큰 위변조, 이중 지불 등 비정상행위를 프로그래밍 언어 자체에서 처음부터 방어한다. 무브 언어에서는 이더리움의 동적 디스패치와 달리 트랜잭션은 해당 트랜잭션이 실행되는 환경에 구애받지 않는다. 즉 코드의 실행 주체, 메소드, 이벤트 등은 모두 코드가 컴파일 될 당시 미리 결정된 내용을 따르게 된다.


토큰을 위한 별도 자료형, 부담없는 메모리 복사 방식 적용

무브 언어의 핵심 포인트는 토큰 등 블록체인 데이터에 리소스 자료형을 선언해 쓸 수 있다는 점이다. 리소스 자료형은 무브 언어에서 토큰 등 디지털 자산을 안전하게 관리하기 위해 새롭게 등장한 자료형이다. 리소스 타입으로 선언된 데이터는 해당 리소스를 선언한 모듈에서만 변경, 삭제할 수 있다. 외부 모듈에서 접근하는 경우 리소스 토큰 등을 옮기는 기능만 오로지 수행할 수 있다. 무브 언어에서 리소스 객체는 소모될 뿐 복사가 되지 않는 특성이 있다. 예를 들어 리소스 객체는 물컵에 담긴 물과 같다. 물을 마셔 소모하거나 옮길수는 있어도 자체를 복사는 할 수 없는 것과 같다. 한편 밸류는 물이 남은 양을 노트에 기록한 것과 같다.


무브 언어에서는 모듈에 따라 사용자의 기능 접근 권한이 다르게 설정되는 등 시큐어 코딩의 효과가 처음부터 발생한다. 한편 무브 언어의 이름도 무브 기능으로 토큰을 옮긴다는 의미에서 따 왔다. 또 페이스북이 사용하는 리브라 코인도 무브 언어로 개발됐고 리브라 프로토콜에 리소스 타입으로 존재한다.


리소스 객체를 옮기는 기능은 이동 시맨틱과 유사하다. 이동 시맨틱이란 C++11, Rust 등 언어에서 메모리의 소유권을 이전하는 복사 방식 중 하나다. 메모리 간 이동이나 복사를 수행하는 경우 오버헤드가 발생하는 경우가 많다. 특히 메모리를 제어하기 위해 주로 수행하는 깊은 복사 방식은 블록체인에서 컴퓨팅 자원을 잡아먹는 문제가 있었다. 복사 과정상 인스턴스를 생성하기 때문인데 이는 곧 가스 등 수수료로 직결되기 때문이다. 반면 이동 시맨틱 기능을 통하면 객체 간 메모리의 복사를 얕게 수행할 수 있어 추가적인 인스턴스 생성이 없는 특징이 있다. 한편 메모리를 통해 얕게 복사하는 기능은 이더리움에서도 EVM 어셈블리를 통해 구현할 수는 있지만 개발 난이도가 더욱 높아지는 한계점이 뒤따른다.


뿐만 아니라 무브 언어로 설계한 프로토콜은 보안 수준도 애초에 메인넷과 동등한 보안성을 항상 확보할 수 있는 장점이 있다. 자체 언어를 통해 리소스 타입과 토큰의 희소성 보호 메커니즘이 자동으로 적용되기 때문이다. 이로써 리브라에서 개발자가 주조한 토큰, 비즈니스 로직 코드는 리브라 메인넷과 동등한 보안 수준을 항상 보장받게 된다. 블록체인 플랫폼의 많은 경우 사용자 토큰의 보안성을 메인넷 수준으로 달성하는 게 쉬운일은 아니다. 실제로 이더리움 메인 코인과 ERC-20 토큰의 보안 수준은 차이가 큰 편이다. 토큰의 종류에 따라서도 보안성이 차이가 난다. 이더리움 코인은 자체에 복사 방지 등 보안성을 높이는 장치가 프로그래밍 언어 수준에서 적용돼 안전한 반면 ERC-20은 이더리움에 기반했지만 메인넷 수준에 가까운 보안 지원은 없는게 현실이다.


무브로 하는 스마트 컨트랙트 개발 톺아보기

무브 언어에는 무브 소스 언어, 무브 중간 언어(IR), 바이트 코드 등 3가지 형태가 현재 존재한다. 페이스북은 코드의 작성과 검증이 쉽도록 개발자경험(DX)을 끌어올린 무브 소스 언어를 현재 디자인하는 중에 있다. IR은 사람이 읽기 쉬우면서 바이트 코드로 컴파일도 쉽게 되는 중간 수준의 언어다. 리브라에서 모듈 개발과 트랜잭션 스크립트 작성도 IR을 통해 현재 이뤄진다. 무브 소스언어, IR 등으로 작성된 코드는 모두 무브 바이트 코드로 컴파일되며 리브라 프로토콜의 가상머신에서 실행되게 된다.


리브라는 새로운 개발언어인 무브를 활용해 프로그래밍 언어 자체에서 리브라 프로토콜의 보안성을 높이고 있다. 무브 IR로 작성한 코드를 통해서 모듈, 리소스 자료형, 무브 시맨틱 등이 적용된 모습을 직접 확인할 수 있다.


먼저 모듈에서 리소스 타입으로 Coin 변수를 손쉽게 선언할 수 있다. 이렇게 선언된 객체는 내부 모듈을 통해서만 생성, 변경, 파괴 할 수 있고 외부에서는 오로지 옮기는 동작만 가능하다.

[캡션: 코드는 Coin이라는 이름의 토큰이 리소스 자료형으로 선언된 모습. 자료=무브 백서]


이제는 P2P 네트워크에서 토큰을 단순하게 전송하는 과정을 구현한 코드의 일부다.

[캡션 : 단순한 전송을 구현한 코드. 트랜잭션을 발행한 사람으로부터 수신자(payee)의 주소로 토큰을 보내는 과정이다. 메인 함수 코드는 수신자의 주소, 전송될 토큰의 양을 입력값으로 받고 있다. 0x0은 모듈이 속한 계정의 주소다. Currency는 코드가 호출하는 모듈의 이름에 해당한다. 전송은 두 단계로 나눠 진행된다. Currency.withdraw_from_sender()를 진행한 뒤 트랜잭션 발행자의 잔고에서 토큰을 인출해 deposit 함수로 예치하는 모습이다. 자료=무브 백서]


단순한 전송 기능 뿐만 아니라 예치, 인출, 소각 등 여러 기능을 모듈을 통해 개발할 수 있다. 이같은 모듈의 작성자는 모듈에 등록된 코인 등에서 완전한 통제권을 오직 갖게 된다. 엑세스 컨트롤이 확실한 셈이다. 또 트랜잭션 스크립트는 단일 코드로 한번 실행 된 이후엔 다른 트랜잭션 스크립트나 모듈에서 사용될 수 없다.

[캡션 : 코드는 단순한 예치 기능을 구현. deposit함수는 모듈의 호출자로부터 코인을 받아서 수신자에게 예치하는 과정을 나타내고 있다. 둘째 줄의 언팩은 무브 언어에서 리소스 타입 객체를 파괴하는 빌트인 기능이다. 코인을 파괴하면 리소스에 연관된 값을 얻을 수 있다. 이는 해당 코인 전송을 위한 준비작업인 셈이다. 이같은 실행은 해당 코인이 리소스로 선언된 모듈에서만 수행 할 수 있다. 셋째줄의 BorrowGlobal도 빌트인의 일종이다. 주소를 입력값으로 받아 주소가 생성하는 인스턴스를 레퍼런스값으로 반환한다. 코인자체가 아닌 코인 리소스의 레퍼런스값을 반환한다. 마지막 줄은 수신자의 코인 리소스값를 읽어오고 전송되는 값과 합쳐 결과에 반영하는 과정이다. 자료=무브 백서]


[강민승 기자]

디스트리트 커뮤니티 광고
북마크
좋아요 : 0
공유
https://dstreet.io/news/view-detail?id=N20190621152311520328
URL복사
댓글 0
댓글쓰기
댓글 쓰기
에어드랍코리아