Libra — Validator 핵심 컴포넌트 이해하기

Seungwon Go
Jun 23, 2019 · 13 min read

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

Validator의 핵심 컴포넌트를 살펴보기 전에, 앞서 작성된 “Libra Protocol”, “Libra — Life of a Transaction” 을 읽어보시기 바랍니다.

우리는 앞서 클라이언트가 요청한 트랜잭션을 Validator가 어떤 과정을 거쳐 검증하고 다른 Validator들과 합의를 한 후 블록체인에 저장하는지 살펴봤습니다.

이때 Validator의 핵심 컴포넌트인 AC(Admission Control), VM(Virtual Machine), Mempool, Consensus, Execution, Storage 컴포넌트에 대해서 알게 되었습니다.

각각의 컴포넌트가 어떻게 동작을 하고, 어떤 역할을 수행하는지 좀더 자세히 알아보도록 하겠습니다.

Admission Control

Image for post
Image for post
이미지 출처 : 리브라 공식문서

Client → AC (AC.1)

AC → VM (AC.2)

AC → Mempool (AC.3)

AC → Storage (AC.4)

Virtual Machine (VM)

Image for post
Image for post
이미지 출처 : 리브라 공식문서

AC → VM (VM.1)

VM → Storage (VM.2)

  • 트랜잭션에 서명된 정보가 트래잭션을 보낸 사람의 account의 서명과 동일한지 검증합니다.
  • 보낸 사람의 account의 인증키가 공개키의 hash와 같은지 검증합니다.
  • 트랜잭션의 sequence 번호가 보낸사람의 account의 sequence 번호 보다 작지 않은지 검증합니다. 동일한 트랜잭션이 재호출 되는것을 방지하기 위함입니다.
  • 트랜잭션에 포함된 Program의 형식이 잘못되었는지 확인합니다. 형식이 잘못된 프로그램이 VM에서 실행되는것을 방지 하기 위함입니다.
  • 보낸 사람 계정에 충분한 잔액이 있는지 확인합니다. 트랜잭션에 지정된 최대 가스금액 보다 잔고가 더 많아야 합니다.

Execution → VM (VM.3)

Mempool → VM (VM.4)

Mempool

Image for post
Image for post
이미지 출처 : 리브라 공식문서

AC → Mempool (MP.1)

  • Mempool은 트랜잭션의 sequence 번호가 보낸사람의 account의 sequence 번호보다 같거나 클때만 추가하게 됩니다.

Mempool → Other Validators (MP.2)

  • 다른 Validator들은 공유된 트랜잭션을 자신의 Mempool에 추가합니다.

Consensus → Mempool (MP.3)

Mempool → VM (MP.4)

Consensus

Image for post
Image for post
이미지 출처 : 리브라 공식문서

Consensus → Mempool (CO.1)

Consensus → Other Validators (CO.2)

Consensus → Execution, Consensus → Other Validators (CO.3)

  • 블록안의 트랜잭션 모두를 실행하고 나면, Execution 컴포넌트는 Consensus 컴포넌트로 실행 결과를 보내줍니다.
  • Consensus 컴포넌트는 실행된 결과에 서명을 하고, 이 결과를 바탕으로 다른 Validator들과 합의에 도달하도록 시도합니다.

Consensus → Execution (CO.4)

Execution

Image for post
Image for post
이미지 출처 : 리브라 공식문서

Consensus → Execution (EX.1)

  • Execution 컴포넌트는 Merkle accumulators 의 관련 부분의 사본을 보유하는 “scratchpad”를 관리합니다. 이 정보는 블록 체인의 현재 상태의 루트 해시를 계산하는 데 사용됩니다. Scratchpad(ScratchPad Memory) 는 캐시에서 하드웨어적으로 제공하는 태그 및 일관성 기능이 제외된 메모리입니다. Scratchpad는데이터를 직접적으로 관리해야 한다는 부담이 있는 반면, 확장성이나 에너지, 공간 효율성 등에서 캐시에 비해 뛰어난 성능을 보이므로 다양한 아키텍처에서 이를 도입하고 있습니다.
  • 현재 상태의 루트 해시는 블록의 트랜잭션에 대한 정보와 결합되어 accumulator의 새로운 루트 해시를 결정합니다. 이는 데이터를 저장하기 전에 수행되며 Validator의 쿼럼에 의해 합의가 이루어지기 전까지 상태나 트랜잭션이 저장되지 않도록합니다.
  • Execution 컴포넌트가 speculative 루트 해시를 계산 한 다음 Consensus 컴포넌트는 이 루트 해시에 서명을 하고 다른 Validator들과 함께 이 루트 해시에 대한 합의를 시도합니다.

Execution → VM (EX.2)

Consensus → Execution (EX.3)

Execution → Storage (EX.4)

Storage

Image for post
Image for post
이미지 출처 : 리브라 공식문서

VM → Storage (ST.1)

Execution → Storage (ST.2)

Execution → Storage (ST.3)

  • The in-memory data in “scratchpad” for this block is passed to updated storage and persist the transactions. 현재 저장되는 블록을 위한 Scratchpad의 인메모리 데이터는
  • Storage가 갱신되면, 각 트랜잭션에 의해 수정 된 모든 자원의 sequence 번호가 그에 따라 업데이트됩니다.

AC → Storage (ST.4)

좀 긴 내용이지만, Validator의 핵심 컴포넌트인 AC, VM, Mempool, Consensus, Execution, Storage에 대해서 알아봤습니다. 여기까지 보고 나서, 앞서 작성되었던 “Libra — Life a Transaction” 글을 다시 읽어 보신다면 좀더 쉽게 이해를 하실 수 있을것입니다.

ReturnValues

ReturnValues Blogs

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store