Libra Protocol

Seungwon Go
ReturnValues
Published in
8 min readJun 19, 2019

By Seungwon Go, CEO & Founder at ReturnValues (seungwon.go@returnvalues.com)

본 내용은 리브라 공식 문서(https://developers.libra.org/docs/libra-protocol)의 내용을 토대로 작성된 내용입니다.

리브라 블록체인은 cryptographically authenticated distributed ledger라고 정의하고 있습니다. 영어 그대로 번역하면 암호화된 인증된 분산 원장이 되겠네요. 다소 어려운 말인데요. 먼저, 리브라 프로토콜을 이해하기 위한 핵심 컨셉인 TransactionState에 대해서 알아보고, 다른 개념들도 차례대로 알아보도록 하겠습니다.

Transactions and States

리브라 공식 문서에서는 리브라 블록체인의 모든 시점마다 state를 가지고 있고, 이 state는 현시점의 스냅샷이라고 표현하고 있습니다. 그리고 transaction이 발생할때 마다 블록체인의 state는 변경이 된다고 설명하고 있습니다.

TRANSACTIONS CHANGE STATE (출처, 리브라공식문서)

위에 그림을 보시면 transaction이 실행될때마다 state가 생성됨을 볼수 있습니다. 이미 이더리움 같은 블록체인을 알고 있는 분은 크게 어렵지 않게 이해를 하실 겁니다. 위의 그림에서의 예는 A가 110 리브라 코인을 가지고 있고, B가 52 리브라 코인을 가지고 있었는데, A가 10 리브라 코인을 B에게 전송(transaction)함으로써, state의 변경이 일어났고, 새로 생성된 state에는 A는 10 리브라 코인이 감소된 100 리브라 코인을 가지고 있고, B는 10 리브라 코인이 증가된 62 리브라 코인을 가진 상태를 보여주고 있습니다.

Transactions

transaction 안에는 어떤 정보를 포함하고 있는지 보도로 하겠습니다. 아래 내용을 보시면 아시겠지만, 리브라도 이더리움처럼 가스비를 사용합니다.

  • Sender address — transaction을 발생시킨 account address .
  • Sender public key — 트랜잭션 서명에 사용 된 개인 키에 해당하는 공개 키.
  • Program — 리브라의 전역상태 변경을 위한 transaction script, input 값, 그리고 퍼블리싱을 위한 Move Module로 구성됩니다.
  • Gas price (in microlibra/gas units) — 트랜잭션이 일어나면 대부분 계산(computation)이 일어나고, 계산된 내용이 저장이 되어야 합니다. 이렇게 계산과 저장을 위해서 리브라는 Gas라는 것을 사용하고 있고, Gas Price는 이때 사용되는 1 Gas 당 지불할 금액을 말합니다.
  • Maximum gas amount — 최대 가스 금액
  • Sequence number — sender의 account에 저장된 sequence number와 동일한 넘버입니다.
  • Expiration time — 트랜잭션의 유효성이 검증된 시간
  • Signature — sender의 서명.

transaction script는 트랜잭션 로직을 인코딩하고 블록 체인에 게시 된 리소스와 상호 작용하는 임의의 프로그램입니다.

Ledger State

Ledger state는 Global state라고도 불리는데, 밑에 내용을 읽어보시면 Global state(전역상태)라는 용어로 더 많이 사용되고 있습니다. Ledger state는 블록체인 상의 모든 account의 상태로 구성된 state를 말합니다. 트랜잭션을 실행하기 위해서는 각 validator가 블록체인 상의 가장 최근 버전의 전역상태를 알아야 합니다.

Versioned Database

우리가 깃허브 같은 소스 버전 관리 솔루션을 사용하면, 잘 아시겠지만, 우리가 코딩한 모든 내용이 commit이라는 것을 작성된 코드의 history를 commit 한 시점을 기준으로 버전 관리를 하게 됩니다. 이와 마찬가지로 Libra 블록체인은 트랜잭션이 일어날때마다 모든 데이터를 Versioned 데이터베이스에 저장합니다. 그리고 버전 번호는 시스템이 실행 한 트랜잭션 수에 해당하는 부호없는 64 비트 정수입니다.

Account

리브라 account는 리브라 프로그래밍 언어인 MoveMove ModuleMove Resource를 위한 컨테이너입니다.

Move Module

  • 리브라 블록체인의 전역상태(global state)를 업데이터 하기 위한 규칙을 정의합니다.
  • 리브라에서는 Move Module이 스마트 컨트랙트에 해당합니다.
  • 앞서 우리는 transaction에는 program(transaction scrtipt)가 포함되어져 있다는 것을 확인했습니다. 사용자에 의해 트랜잭션이 일어나면, 트랜잭션에 포함된 transaction script를 통해 하나 이상의 Move Module이 실행이 되고, 이를 통해 리브라 블록체인의 전역상태(global state) 업데이트가 일어납니다.

Move Resources

  • Move Module에 정의된 절차에 따라 접근할 수 있는 데이터를 포함합니다.
  • Move Resource는 절대 복사, 재사용, 유실이 되지 않습니다.

리브라 account는 임의의 Move Module, Move Resource 번호가 포함될수 있습니다.

Account Address

리브라 account address는 256 비트 값입니다. account address는 사용자의 공개 확인 키에 대한 암호화 해시입니다. 계정 주소에서 보낸 트랜잭션에 서명하려면 사용자 해당 계정에 해당하는 개인 키를 사용해야합니다.

Proof

Proof는 리브라 블록체인의 데이터를 증명하기 위한 방법입니다. 예를 들어 클라이언트가 실행한 최근 트랜잭션에 대해서 트랜잭션 요청에 대한 응답을 모두 제대로 했는지, 누락된것은 없는지를 검증해 줍니다.

Validator Node (Validator)

클라이언트는 트랜잭션을 생성하고 생성된 트랜잭션을 Validator 노드에 제출합니다. Validator 노드는 다른 Validator 노드와 함께 합의 프로토콜을 실행하고, 트랜잭션을 실행하고, 트랜잭션과 실행 결과를 블록 체인에 저장합니다. 그리고 Validator 노드는 블록 체인에 추가 할 트랜잭션과 순서를 결정합니다.

LOGICAL COMPONENTS OF A VALIDATOR (출처, 리브라공식문서)

Validator 노드는 아래와 같은 컴포넌트를 포함합니다:

Admission Control (AC)

  • Admission Control 은 Validator 노드의 유일한 외부 인터페이스 입니다. 클라이언트에서 트랜잭션이 발생하면 제일 먼저 AC(Admission Control)이 이 요청을 받게 됩니다.
  • AC는 클라이언트로 부터 요청이 왔을때 기본적인 초기 점검, 트랜잭션에 문제는 없는지, 너무 대용량 데이터를 input으로 담았는지 등을 점검하므로써 Validator 노드를 보호합니다.

Mempool

  • Mempool는 이더리움의 mining pool 처럼 요청된 트랜잭션이 실행되기전에 대기하고 있는 버퍼입니다.
  • 새로운 트랜잭션이 Validator 노드의 memool에 추가되면, Validator 노드는 해당 트랜잭션을 다른 Validator의 mempool에 공유합니다.

Consensus

  • Consensus Component는 네트워크 상에서 Validator들과 Consensus Protocol에 참여하므로써, 트랜잭션 실행 결과에 대한 합의 및 블록 순서를 정합니다.

Execution

  • Execution Component는 가상머신(VM)을 통해 트랜잭션을 실행합니다.
  • Execution’s job은 트랜잭션 블록의 실행을 조정하고 Consensus에 따라 투표 할 수있는 일시적인 상태를 유지하는 것입니다.
  • Execution은 Consensus가 블록을 분산 데이터베이스에 커밋 할 때까지 실행 결과를 인메모리에 유지합니다.

Virtual Machine (VM)

  • AC와 Mempool는 트랜잭션의 유효성을 검증하기 위해서 VM 컴포넌는 사용합니다.
  • VM(가상머신)은 트랜잭션에 포함 된 프로그램을 실행하고 결과를 결정하는 데 사용됩니다.

Storage

Storage는 합의 된 트랜잭션 블록과 해당 실행 결과를 유지하는 데 사용됩니다.

간단하게 Libra Protocol의 주요 개념을 알아 봤습니다. 좀 더 깊이 있는 내용은 리브라 공식 문서(https://developers.libra.org/docs/libra-protocol)를 참조 하시면 됩니다. 아마 이더리움 같은 다른 블록체인에 대한 지식이 있는 분들은 좀 더 수월하게 이해 하셨을거라 생각합니다. 여기까지는 사실 개념에 대한 용어만 다를분이지, 사실 기존 블록체인과 큰 차이를 느끼지 못했습니다.

--

--