이더리움은 어떻게 동작하는가 ? — Part 1.

강솔
TOMAK
Published in
7 min readJul 29, 2018

이 글은 Preethi Kasireddy의 How does Ethereum work, anyway?라는 글을 번역한 것이다. 지금까지 우리 학회에서 연구했던 이더리움 프로토콜의 내용들을 잘 요약하고 있기 때문에 블록 체인에 관심을 갖는 사람이라면 한번 읽어 보면 좋을 것 같다. 만약 원문을 보고 싶다면 아래 링크를 참조하자.

How does Ethereum work, anyway?

원문은 이더리움 황서의 내용을 요약하여 정리하고 있다. 따라서 이더리움을 처음 접하는 사람들에게는 대부분의 내용이 어려울 수 있다. 하지만 이더리움 백서를 읽고 나서 황서를 살펴보고 싶어하는 사람들에게는 전체적으로 이더리움 프로토콜의 맥락을 잡는데 도움이 될 것이라고 생각한다. 만약에 더 깊은 내용을 알고 싶다면, 이더리움 황서나 토막에서 포스팅하는 다른 글들을 참고하면 좋을 것 같다. 이더리움 프로토콜을 하나의 포스팅에서 다루기에는 양이 많기 때문에 세 부분으로 나누어 올리도록 하겠다. 첫 번째 포스팅에서는 블록 체인의 정의를 살펴보도록 하자.

블록 체인 정의하기

먼저 블록 체인을 정의하자면, “cryptographically secure transitional singleton machine with shared-state”라고 할 수 있다.

‘cryptographically secure’하다는 말은 정말 깨기 힘든 복잡한 수학적 알고리즘에 의해서 암호 화폐의 생성이 안전하다는 것을 의미한다. 즉 가짜 트랜잭션을 생성하거나 트랜잭션을 삭제하는 행위가 거의 불가능하다.

‘Transitional singleton machine’은 정식으로 인정되는 단일 개체가 시스템 상에서 생성되는 모든 트랜잭션에 대해서 책임을 갖는다는 것을 의미이다. 즉 모든 사람이 신뢰할 수 있는 하나의 global truth가 존재한다.

‘with shared state’란 이 machine에 저장되는 state가 모두에게 오픈되고 공유됨을 말한다.

이더리움은 이러한 블록 체인 패러다임을 실행한다.

이더리움 블록 체인 패러다임

이더리움 블록 체인은 본질적으로 트랜잭션에 기반한 state machine이다. 컴퓨터 사이언스에서 state machine은 일련의 정보를 읽고 이러한 정보들을 바탕으로 새로운 state로 이동하는 어떤 시스템을 의미한다.

이더리움 state machine은 소위 제네시스(Genesis)라고 불리는 state에서 출발한다. 제네시스는 어떠한 트랜잭션이 네트워크 상에서 발생하기도 전 state를 말하며, 비어 있는 슬레이트 정도로 생각하면 좋을 것 같다.

이더리움의 state는 수백만의 트랜잭션들로 이루어져 있는데, 이는 블록 단위로 묶여 있다. 블록은 일련의 트랜잭션들을 포함하고, 각 각의 블록들은 이전 블록과 연결되어 있다.

하나의 state로부터 다음의 state로 넘어가기 위해서는 반드시 해당 트랜잭션이 유효한 트랜잭션이어야만 한다. 만약 트랜잭션이 유효하다면, 채굴이라고 불리는 증명 과정으로 넘어가는데, 채굴은 노드들의 집단이 그들의 컴퓨팅 자원을 유효한 트랜잭션들의 블록을 생성하는데 지불하는 것을 의미한다.

이더리움 네트워크에서는 누구든 채굴자 노드가 되어 블록을 생성하고 입증하는 시도를 할 수 있으며, 이 작업은 채굴을 시도하는 모든 노드에서 동시에 이루어진다. 그리고 각 각의 채굴자들은 블록 체인에 블록을 제출할 때 수학적인 증거를 제시하며, 이는 일종의 보증서(guarantee : 만약에 증거가 존재한다면 블록은 반드시 유효하다)로서 동작한다. 또한 블록을 메인 블록 체인에 올리기 위해서 채굴자는 반드시 다른 경쟁 채굴자보다 빨리 이를 증명해야 한다. 이렇게 채굴자가 수학적 증거를 제공함으로써 각 각의 블록을 증명하는 과정을 PoW(작업 증명 방식)라고 부른다.

이렇게 새로운 블록을 증명한 채굴자는 채굴 작업에 대해서 일정한 양의 보상을 받게된다. 이 때 그 보상이란 무엇일까? 이더리움 블록 체인 내에서는 이더라고 불리는 전자 토큰을 사용하는데, 채굴자가 블록을 입증할 때 새로운 이더 토큰을 함께 생성하고, 이를 보상으로 가져간다.

이 글을 보고 있는 독자는 아마 궁금할 것이다 :

무엇을 통해서 모두가 하나의 블록 체인에 연결되어 있는지를 증명할 수 있을까?

그리고 자신들만의 블록들을 생성하기로 결정한 채굴자들의 집단이 존재하지 않는다고 어떻게 확신할 수 있을까?

처음에 우리는 블록 체인을 transitional singleton machine with shared-state로 정의했다. 이 정의를 이해할 수 있다면, 적절한 현재의 state가 하나의 global truth이며, 이를 모든 사람이 동의해야 한다는 사실을 받아들일 수 있을 것이다. 만약 여러 개의 state 또는 체인을 갖는다면, 어떤 것이 적절한지를 결정하는 것이 불가능하기 때문에 결국 전체 시스템을 파괴할 것이다.

예를 들어, 만약에 체인이 분기(fork)되어 한 체인에는 10 코인을 소유하고, 다른 체인에 20 코인, 또 다른 체인에 40코인을 소유할 경우, 어떤 체인이 가장 유효한가를 결정할 방법이 없다. 즉 다양한 path가 생성 될 때마다 분기(fork)가 발생하여 시스템을 혼란스럽게 하고 사람들에게 유효한 체인을 선택하도록 강요하기 때문에 이를 피하는 것이 좋다.

이더리움에서도 다른 블록체인처럼 포크가 발생한다. 이 때 어떤 path가 가장 유효한지 선택하여 여러 체인들이 생겨나는 것을 방지하기 위해서 이더리움은 GHOST 프로토콜이라는 메커니즘을 사용한다.

GHOST = “Greedy Heaviest Observed Subtree”

간단하게 설명하면, GHOST 프로토콜은 가장 많은 연산이 이루어진 path를 선택한다. 그 path를 결정할 하나의 방법은 가장 최신 블록의 블록 넘버를 사용하는 것이며 이는 현재 path의 블록들의 총 개수를 나타낸다(제네시스 블록은 세지 않는다). 일반적으로 블록 넘버가 높을수록 path는 더 길고 마지막 블록에 도달하기까지 더 많은 채굴 노력이 발생하기 때문에. 이를 통해서 하나의 메인 체인을 선택한다.

지금까지 블록 체인이 무엇인지 대략적으로 살펴보았는데, 다음 포스팅에서는 이더리움을 구성하고 있는 중요한 부분들로 들어가 보도록 하겠다. 앞으로 우리가 다루게 될 주제는 다음과 같다.

1. Accounts

2. State

3. Gas and fees

4. Transactions

5. Blocks

6. Transition execution

7. Mining

8. Proof of Work

한 가지 시작하기 전에 주목하자면, x를 hash하는다는 것은 Keccak-256 hash함수를 사용한다는 것을 의미한다는 것을 기억하도록 하자.

--

--