블록체인 확장성 솔루션 시리즈 2-1 :: Plasma Overview

Hyun-Cheol Gong(Hyun Cheol Gong)
Ji-Hyeok Choy (
Jihyeok Choy)
Gyeo-Re Han (
Han Geore)
Special thanks to Geon-gi Mun(
Geon-gi Mun), Youngtaek OH(Robbie OH)
Seoul Nat’l Univ. Blockchain Academy Decipher(@decipher-media)

서울대학교 블록체인 학회 ‘디사이퍼(Decipher)’에서 블록체인의 스케일링 솔루션에 관한 글들을 시리즈로 연재합니다. 시리즈의 두 번째 주인공은 이더리움의 “Plasma: Scalable Autonomous Smart Contracts” 입니다. 2–1. 플라즈마 Overview, 2–2. 플라즈마 — Q&A 및 플라즈마 MVP(Minimum Viable Plasma) 코드 리뷰, 2–3. 플라즈마 캐시로 나누어 설명합니다.

두 번째 주제로 이더리움의 트랜잭션 성능을 올리기 위한 오프체인(off-chain) 솔루션인 플라즈마에 대해 알아보고자 한다. 플라즈마는 이더리움 창시자인 Vitalik Buterin과 라이트닝 네트워크(백서, 한글 설명 글)를 고안했던 Joseph Poon에 의해 제시된 확장성 솔루션이다. 이번 글에서는 Vitalik Buterin과 Joseph Poon이 작성한 “Plasma: Scalable Autonomous Smart Contracts” 백서와 여러 자료를 바탕으로 플라즈마가 무엇이고, 어떻게 동작하는지 알아보도록 하자.

플라즈마 도입 배경

이더리움 네트워크는 확장성 문제로 고통받고 있다. 이를 해결하기 위해 캐스퍼, 샤딩, 라이덴 네트워크 등 다양한 확장성 솔루션들이 제시되어 왔고 플라즈마도 그러한 확장성 솔루션 중 하나다.

기본적으로 플라즈마는 라이트닝 네트워크와 유사하다. 샤딩과 캐스퍼가 온체인(on-chain) 확장성 솔루션인 것과 달리, 플라즈마와 라이트닝 네트워크는 오프체인 확장성 솔루션이다. 라이트닝 네트워크를 활용하면 메인넷의 트랜잭션 속도와 관계없이, 개인간에 채널만 연결되어 있다면 상호간에 빠른 지불(토큰 송금)이 가능하다. 이러한 라이트닝 네트워크의 접근 방식을 단순한 지불이 아닌 스마트 컨트랙트의 상태 전이에도 활용한다면 어떨까? 플라즈마는 이러한 생각에서 시작되었다.

플라즈마의 구조

먼저 플라즈마의 전체적인 구조를 설명하고자 한다. 플라즈마의 구조는 다음의 그림과 같다.

그림 1. 플라즈마의 구조(출처: 플라즈마 백서)

그림과 같이 플라즈마에서는 수많은 블록체인들이 트리 구조로 연결되며, 그 끝에는 루트 체인(이더리움 메인넷)이 위치해 있다. 여기서 A(화살표의 시작점) 체인이 B(화살표의 끝) 체인에 연결되어 있다는 것은 A 체인의 블록 정보가 B 체인에 담긴다는 것을 의미한다.

그런데 여기서 한 가지 의문이 들 수 있다. A 체인과 B 체인이 연결되었을 때, A 체인의 블록 정보가 그대로 B 블록체인에 담긴다면 체인을 연결시켜 트랜잭션을 처리하는 것의 이점이 없다. B 체인에서 홀로 모든 트랜잭션을 처리하는 것과 크게 차이가 없을테니 말이다.

그래서 플라즈마에서는 블록 헤더의 해시값만을 올리는 방법을 취한다. 위 그림을 예로 들면, Depth 3 체인의 여러 블록 헤더들이 Depth 2 체인의 트랜잭션 하나가 되고, 다시 Depth 2 체인의 여러 블록 헤더들이 Depth 1 체인의 트랜잭션 하나가 되는 식이다. 이러한 반복적인 과정의 결과, 루트 체인의 트랜잭션 하나에는 하위 체인의 수 많은 블록 정보들이 담길 수 있다. 플라즈마가 일차원적인 사이드 체인 구조가 아니라, 다차원의 트리 구조를 취하는 이유도 여기에 있다.

그림 2. 플라즈마가 도입된 이더리움 네트워크의 예상 모습(출처: 플라즈마 백서)

플라즈마에서는 누구나 블록체인을 만들어 루트 체인에 연결할 수 있다. 플라즈마가 도입되기 전의 이더리움에서는 모든 Dapp이 이더리움 메인 체인 위에서 동작했다. 반면 플라즈마가 도입된 이더리움에서는 그림과 같이 사용 목적 별로 별도의 블록체인이 형성되어, 대부분의 규모 있는 Dapp들은 개별적인 블록체인 위에서 동작하게 될 것이다.

플라즈마 주요 용어

이제 플라즈마의 구조를 대략적으로 파악했으니, 플라즈마의 주요 용어들을 알아보도록 하겠다. 플라즈마 동작 흐름에 대한 설명은 플라즈마의 주요 용어들을 알고 있다는 것을 전제하므로, 주요 용어에 대한 이해가 없으면 동작 흐름을 이해하기 힘들 것이다. 이러한 용어를 이미 알고 있다면, 넘어가도 좋다.

  1. 차일드 체인(Child Chain)과 패런트 체인(Parent Chain) — 이 둘의 개념은 상대적이다. A와 B 두체인이 연결되어 있다고 했을 때, 화살표가 시작되는 쪽의 체인이 차일드 체인이고, 화살표가 끝나는 쪽의 체인이 패런트 체인이다. 차일드 체인도 하위 체인의 패런트 체인이 될 수 있고, 패런트 체인도 상위 체인의 차일드 체인이 될 수 있다.
  2. 플라즈마 체인(Plasma Chain) — 차일드 체인과 패런트 체인은 상대적인 개념이므로, 혼란을 주지 않기 위해서는 별도의 용어를 사용할 필요가 있다. 플라즈마에서는 이더리움 메인 체인을 제외한 모든 체인들을 플라즈마 체인이라 칭한다. 각 플라즈마 체인은 독립적인 거버넌스 시스템을 가질 수 있다.
  3. 루트 체인(Root Chain) — 이더리움 메인 체인을 의미한다. 루트 체인도 다른 체인의 패런트 체인이다. 플라즈마는 루트 체인이 제대로 동작(non-byzantine)하는 한 신뢰할 수 있다.
  4. 클라이언트(Client) — 플라즈마 체인에 실제로 참여하는 참여자다. 플라즈마 체인을 생성하거나 참가할 때 필요한 deposit 요청, 해당 플라즈마 체인에서 나오기 위한 exit 요청, 플라즈마 체인 내부의 트랜잭션 생성, 플라즈마 체인 내부의 부정 행위 감독 등의 역할을 수행한다.
  5. 플라즈마 컨트랙트(Plasma Smart Contract) — 클라이언트와 deposit, exit, challenge 요청 등을 주고 받는 스마트 컨트랙트를 의미한다. 플라즈마 컨트랙트는 기본적으로 루트 체인에 위치해 있지만, 구체적인 설계에 따라 패런트 체인이나 패런트 체인의 패런트 체인 등에도 위치해 있을 수 있다.
  6. 오퍼레이터(Operator) — 플라즈마 체인의 합의 알고리즘이 PoA일 때의 블록 생성자를 일컫는다. 플라즈마 동작 흐름은 단 한 명의 오퍼레이터가 존재한다는 가정하에 서술할 예정이다. 플라즈마에서 오퍼레이터나 PoS 스테이커(Staker)는 블록을 생성하는 일 뿐만 아니라 블록의 헤더를 패런트 체인에 커밋하는 일을 담당한다.
  7. PETH(Plasma ETH) — 플라즈마 체인에 deposit된 ETH를 말한다. 루트 체인의 ETH와 구분하기 위해 편의상 PETH라 칭한다.

플라즈마 동작 흐름

라이트닝 네트워크에서는 모든 트랜잭션을 메인 체인에 기록하지 않고 최종적인 결과만을 저장하여도 메인 체인에서 이를 신뢰할 수 있다. 이와 비슷하게 플라즈마에서도 차일드 체인의 모든 트랜잭션이 아닌 블록 헤더의 해시값만을 패런트 체인에 올리더라도, 루트 체인만 정상적으로 작동한다면 문제가 발생하지 않는다. 이것이 정확히 무엇을 의미하는지는 플라즈마 체인 참여 시작(Deposit) → 플라즈마 체인 내부 프로세스(Transaction, Periodic Commitment) → 플라즈마 체인 참여 종료(Exit)으로 이어지는 동작 흐름을 통해 살펴보기로 하자.

플라즈마 백서에서는 구현의 편의를 위해 플라즈마 체인들이 스테이트 모델(State model)이 아닌, UTXO 구조를 가진다는 것을 전제하였다. 이 글에서도 UTXO를 기준으로 설명하고자 한다. 또한 앞서 언급하였듯이 각 플라즈마 체인은 독립적인 거버넌스를 가질 수 있는데, 편의를 위해 동작 흐름 설명 부분에서는 단일 오퍼레이터가 존재하는 PoA(Proof of Authority)를 가정하고 서술하고자 한다.

1. Deposit

Deposit은 클라이언트가 플라즈마 체인에 참여하기 위해 필요한 과정이다. Deposit은 클라이언트와 플라즈마 컨트랙트 간 상호작용이므로, deposit을 하기 위해서는 먼저 루트 체인에 플라즈마 컨트랙트가 배포(Deploy)되어 있어야 한다. Deposit 과정을 예시를 통해 설명하면 다음과 같다.

1) 플라즈마 체인에 참여하고자 하는 Alice는 루트 체인의 플라즈마 컨트랙트로 3 ETH(일정량)를 보내는 트랜잭션을 생성하여 컨트랙트의 deposit 함수를 호출한다.

2) 플라즈마 컨트랙트에 Alice의 3 ETH가 Lock-in 된다. 이때, 플라즈마 컨트랙트에는 누가 ETH를 보냈는지는 기록되지 않고, 총량만이 기록된다.

3) 플라즈마 체인의 블록 생성자(오퍼레이터)는 루트 체인의 트랜잭션을 확인하고, 플라즈마 체인의 블록에 Alice가 3 PETH를 소유하고 있다는 내용의 새로운 UTXO를 생성해 담는다.

4) Alice는 플라즈마 블록을 확인하고, 플라즈마 체인의 트랜잭션에 서명을 하여 컨펌한다. Alice의 컨펌과 함께 트랜잭션은 유효해지고, Alice는 플라즈마 체인에서 3 PETH를 소유하게 된다.

2. 플라즈마 체인의 트랜잭션

플라즈마 체인의 트랜잭션 과정을 예시를 통해 설명하고자 한다. Alice가 Depth 3의 플라즈마 체인에 참여하고 있는 상황을 가정해보자.

1) Alice는 Bob에게 3 PETH를 보내는 트랜잭션을 생성한다.

2) 플라즈마 체인의 오퍼레이터 Charlie는 Alice가 생성한 트랜잭션을 플라즈마 블록에 담는다.

3) 정상적인 상황(non-byzantine)에서, Alice의 트랜잭션이 담긴 블록의 헤더는 오퍼레이터에 의해 패런트 체인의 블록에 커밋된다. 커밋 과정의 반복 결과, 블록 헤더의 정보는 최종적으로 루트 체인에 커밋된다.

4) Alice와 Bob은 모든 상위 체인들을 지켜봄으로써 루트 체인에 블록의 헤더가 커밋되는지 확인할 수 있다. 확인이 되면, Alice와 Bob은 Alice가 생성한 트랜잭션에 서명을 하여 트랜잭션을 컨펌한다.

5) 트랜잭션에 대한 컨펌 서명이 플라즈마 블록에 담긴다. 블록에 서명이 담기면 트랜잭션은 Finalized된다.

이더리움 루트 체인에서는 2)가 완료되면 유효한 트랜잭션으로 취급되지만, 플라즈마 체인에서는 5)가 완료되고 나서야 유효한 트랜잭션으로 취급된다. 다시 말해 Alice나 Bob이 컨펌 서명을 하지 않은 상태에서 3 PETH의 소유권은 여전히 Alice에게 있다.

플라즈마 설계의 중요한 전제 중 하나는 루트 체인을 제외한 모든 플라즈마 체인에서 부정 행위가 일어날 수 있다는 것이다. 플라즈마 체인의 트랜잭션에서 3), 4), 5)의 과정이 존재하는 이유도 부정 행위를 방지하거나, 부정 행위에 의한 손실이 일어나지 않도록 하기 위해서다. 3)의 커밋은 부정 행위에 의해 손실이 일어나지 않도록 하는 장치인 인출을 가능케 한다. 이에 관해선 인출 부분에서 좀 더 자세히 다루고자 한다. 4)의 컨펌은 부정 행위를 방지하기 위해 설계된 장치인데, 구체적으로 컨펌이 어떠한 부정 행위를 막기 위한 것인지 궁금하다면, 이 글의 단순 인출 부분까지 읽은 후, 다음 링크의 거래 과정의 축소 부분을 살펴보기 바란다.

3. Periodic Commitments

플라즈마에서 차일드 체인의 블록 헤더는 매 블록이 생성될 때마다 패런트 체인의 블록에 담기는 것이 아니라, 효율성을 위해 일정한 주기마다 담긴다. 이를 Periodic Commitment라 부른다. 아래 그림은 블록 3개 주기로 Periodic Commitment가 이루어지는 것을 나타낸다.

그림 3. Periodic Commitments(출처: 플라즈마 백서)

정확한 주기는 체인마다 달라질 수 있다. 주기적으로 커밋한다고 했을 때 N, N+3, N+6 번 블록의 헤더만이 커밋된다고 오해할 수 있는데, 주기는 커밋되는 텀을 의미할 뿐이다. 주기적으로 커밋한다고 해도, 모든 블록의 헤더가 상위 체인에 커밋되어야 한다.

4. Exit Process

Deposit이 클라이언트가 플라즈마 체인에 참여할 수 있게 해주는 과정이라면, Exit은 플라즈마 체인에 있는 참여자의 자금을 루트 체인, 패런트 체인 등으로 옮길 수 있게 해주는 과정이다.

플라즈마가 도입되지 않은 이더리움 네트워크에서는 부정 행위나 블록 생성자의 비잔틴 행위가 발생하면 체인의 참여자(토큰 보유자)들이 손실을 입을 수 있다. 플라즈마가 도입된 이더리움 네트워크에서는 루트 체인이 제대로 동작하는 한, 참여자가 속해 있는 플라즈마 체인, 패런트 체인, 패런트 체인의 패런트 체인 등에서 부정 행위나 비잔틴 상황이 발생해도 루트 체인만 제대로 동작하면 참여자가 손실을 입지 않고 안전하게 자산을 보전할 수 있다. 이를 가능하게 해주는 것이 바로 Exit이다. Exit의 종류는 단순 인출(simple withdrawal), 빠른 인출(fast withdrawal), 대량 인출(mass withdrawal) 세 가지다. 각각의 구체적인 과정을 살펴보도록 하자.

단순 인출(Simple withdrawal)

빠른 인출과 대량 인출은 플라즈마 참여자의 편의를 위해 존재한다. 반면, 단순 인출은 플라즈마에서 핵심적인 역할을 담당한다. 단순 인출이 구현되어 있지 않으면, 플라즈마의 안전성은 보장될 수 없다.

플라즈마 체인의 참여자는 본인이 원할 때 언제든 단순 인출을 요청할 수 있다. 여기서 ‘언제든’은 참여자의 인출 목적이 무엇이든, 체인의 상황이 어떻든(비잔틴 상황이어도) 인출을 요청할 수 있다는 것을 의미한다.

중요한 점은 단순 인출은 참여자가 속한 체인이 아닌, 플라즈마 컨트랙트에 요청된다는 점이다. Alice가 Depth 3의 플라즈마 체인에 참여하고 있고, 이 체인의 컨트랙트가 Depth 2 체인, Depth 1 체인 그리고 루트 체인에 존재한다면, Alice는 이 셋 중 어디로든 Exit을 할 수 있다. 더불어 단순 인출에는 부정 인출을 방지할 수 있는 챌린지(Challenge)라는 과정이 존재한다. 플라즈마 컨트랙트가 있는 체인 어디로든 Exit할 수 있다는 점과 부정 인출을 방지할 수 있다는 점 덕분에 Alice는 참여하고 있는 체인에서 부정 행위가 발생하는 상황뿐만 아니라, 루트 체인을 제외한 조상 체인들에서 부정 행위가 발생한 상황에서도 안전하게 자금을 보전하여 인출할 수 있다. 더 구체적인 내용은 단순 인출 과정을 예시를 통해 살펴보면서 알아보도록 하자.

1) 플라즈마 체인에서 Exit하고자 하는 참여자 Sam은 루트 체인이나 패런트 체인에 존재하는 플라즈마 컨트랙트에 인출을 요청한다. 이때 Sam은 자금 전부(3 PETH)를 인출하여야만 한다. Sam의 자금은 여러 개의 UTXO에 나눠 기록되어 있을 수 있기 때문에, 상황에 따라 여러 개의 UTXO가 인출 대상에 포함될 수 있다. 이때 인출 대상 UTXO들은 플라즈마 체인에서 Finalized 되어 있어야 한다. 인출 요청의 결과, 인출 대상 UTXO들의 위치(해당 블록 넘버와 블록 안에서의 인덱스)이 참여자들에게 공개된다.

2) Sam의 인출 요청은 챌린지 기간을 거친 후에 처리된다. 이 기간 동안 플라즈마 체인의 참여자는 누구나 Sam의 인출 요청에 대한 이의 신청을 할 수 있다. 이의 신청이 받아들여지면 Sam의 출금은 취소되고 Sam의 자금 중 일부(fidelity bond)가 이의 신청자(reporter)에게 보상으로 지급된다.

* 부정 인출의 예로는, 플라즈마 체인의 참여자가 이미 지불된 UTXO에 대한 인출을 요청하는 경우(Double Spending), 플라즈마 오퍼레이터가 자기 소유의 허위 UTXO를 생성하여 블록에 담고 이에 대한 인출을 요청하는 경우 등이 있다.

3) 아무도 Sam에게 이의 제기를 하지 않은 경우, Sam의 인출 요청은 또 한 번의 유예 기간을 거친 후 처리된다. 이 기간은 먼저 생성된 UTXO(만약 서로 다른 블록에 담겼다면 height가 더 낮은 블록의 UTXO가 우선, 서로 같은 블록에 담겼다면 index가 더 낮은 UTXO가 우선)에 담긴 자산이 먼저 인출되도록 하기 위해 존재하는 기간이다. 먼저 생성된 UTXO의 양에 따라 유예 기간은 아예 존재하지 않을 수도 있고, 다소 길어질 수도 있다.

4) 먼저 생성된 UTXO들이 모두 처리되고 나면, Sam의 UTXO에 기록된 자산들도 인출 처리된다. Sam은 플라즈마 컨트랙트에서 인출을 신청한 양 만큼의 ETH(Exit한 곳이 루트 체인이 아니라면 PETH)를 돌려받는다.

5) 인출 과정의 결과, 플라즈마 컨트랙트에 기록된 ETH(Exit한 곳이 루트 체인이 아니라면 PETH)의 총량이 Sam이 인출한 양(3) 만큼 줄어들고 인출 처리된 UTXO들은 TXO가 된다.

단순 인출 과정에서 이의 제기를 어떻게 하는 것인지 궁금할 수 있다. 이의 제기는 플라즈마 컨트랙트에 머클 증명을 함으로써 이루어진다. Periodic Commitment에 의해 상위 체인에 커밋되는 블록 헤더 안에는 트랜잭션 아웃풋(UTXO 또는 TXO) 머클 트리의 루트 해시가 포함되어 있다. 만약 부정 인출이어서 UTXO가 허위라면, UTXO의 머클 해시가 달라지므로 이 UTXO를 담은 머클 트리의 루트 해시가 플라즈마 컨트랙트에 기록된 루트 해시와 다를 것이다. 이 사실을 머클 증명을 통해 입증하는 것이 이의 신청이다.

또한 앞서 플라즈마 컨트랙트에는 (P)ETH 총량만이 기록된다고 언급하였다. 플라즈마에서 플라즈마 체인 내부의 거래에 의해 개인의 자산이 어떻게 변화하였는지는 상위 체인에 기록되지 않는다. 그럼에도 불구하고 누구나 잘못된 인출 요청에 대해서는 챌린지를 할 수 있기 때문에, 개인이 실제로 가진 자산 만큼만 인출될 수 있다는 점이 보장된다. 따라서 루트 체인(패런트 체인)에 플라즈마 체인의 모든 내부 거래를 기록할 필요가 없어지고, 총량만을 기록해도 문제가 발생하지 않는다. 다만, 아무도 챌린지를 하지 않으면 부정 인출일 경우에도 인출이 될 수 있으므로, 플라즈마 체인 참여자는 참여하고 있는 체인 및 상위 체인을 잘 감독하여야 한다. 상위 체인 감독과 관련된 내용은 바로 다음 장에서 조금 더 상세히 다루도록 하겠다.

참여자가 모든 상위 체인을 지켜봐야 할 이유

참여자가 상위 체인을 지켜봐야 할 이유는 크게 두 가지이며, 모두 인출 과정과 관련되어 있다. 먼저 상위 체인에 커밋되지 않은 블록에 담긴 UTXO에 대해서는 (설령 거래 당사자들이 컨펌을 했다고 하더라도) 인출 신청을 할 수 없기 때문에 상위 체인을 지켜봐야 한다. 인출 신청은 상위 체인(패런트 체인)의 플라즈마 컨트렉트에 하는 것인데, 플라즈마 컨트렉트엔 차일드 체인의 최신 블록 넘버가 기록되어 있다. 따라서 그 블록 넘버보다 큰 곳에 위치한 UTXO는 애초에 인출 신청이 받아들여지지 않는다. 예를 들어 루트 체인으로 인출 신청을 하기 위해서는, 커밋이 루트 체인까지 최종적으로 제대로 되어 있어야 하고, 제대로 커밋되고 있는지 확인하려면 모든 상위 체인을 지켜봐야 한다.

두 번째 이유는 앞서 언급하였듯 부정 인출을 막기 위해서다. 인출 자체가 상위 체인에 요청되는 것이고, 어떠한 상위 체인에 요청될지 모르는 것이므로, 모든 상위 체인들을 지켜보아야 요청 여부를 알 수 있다.

플라즈마 체인 참여자는 파란색과 초록색으로 표시된 체인들을 지켜봐야 한다. (출처: 플라즈마 백서)

단순 인출에서 먼저 생성된 UTXO가 먼저 인출되는 이유

그렇다면 먼저 생성된 UTXO가 먼저 인출되는 이유는 무엇일까? 바로 플라즈마 체인의 비잔틴 상황에 대비하기 위함이다. 이를 예시를 통해 알아보자.

1) 플라즈마 블록 생성자(오퍼레이터) Charlie은 자신 소유로 100 PETH 잔액을 가진 허위 UTXO를 생성해 블록에 담고 인출 요청을 한다.

2) 허위 UTXO를 생성했다는 사실을 발견한 플라즈마 체인의 참여자 Alice와 Bob(실제 플라즈마 체인에는 이보다 많은 참여자들이 있을 수 있다)는 자신의 자금을 지키기 위해 루트 체인의 플라즈마 컨트랙트에 Exit 요청을 보낸다.

3) Alice와 Bob의 UTXO가 Charlie의 허위 UTXO보다 먼저 생성되었으므로, 먼저 인출이 된다. Alice와 Bob이 인출을 한 PETH 양 만큼 플라즈마 컨트랙트 ETH 총량에서 빠진다.

4) Charlie의 인출 차례가 되었지만, 플라즈마 컨트랙트에 남은 ETH가 없어 Charlie는 인출할 수 없다.

먼저 생성되는 UTXO가 먼저 인출되기 때문에 PoA의 오퍼레이터가 비잔틴이어도 참여자들은 자산을 안전하게 보전할 수 있다. PoA의 오퍼레이터가 허위 UTXO를 생성해 블록에 담기만 하고 인출은 하지 않을 때에도 마찬가지로 그냥 먼저 Exit을 하여 자산을 지키면 된다. 라이트닝 네트워크에서는 부정 행위가 발견되면 채널의 현재 정보를 온 체인에 공개하여 챌린지하는 방식으로 이에 대응하였다. 플라즈마의 Exit을 통하면 라이트닝 네트워크처럼 상위 체인에 플라즈마 체인이 비잔틴 상황이라는 사실을 알릴 필요 없이, 간단히 참여자의 자금을 지킬 수 있다.

다시 한 번 강조하지만, 상위 체인이 비잔틴 상황이어서 더 상위 체인으로 블록 헤더가 제대로 커밋되지 않거나, 참여 체인이 비잔틴 상황에 있거나, 참여 체인에서 부정 인출이 일어나면 그냥 상위 체인 중 제대로 동작하는 체인으로 Exit을 하면 된다. 이것이 루트 체인이 제대로 동작하기만 하면 모든 참여자가 자산을 안전히 보전할 수 있는 이유다. 만약 루트 체인이 제대로 동작하지 않는다면 안전하게 Exit 할 곳이 없는 것이므로, 참여자는 자신의 자산 안전성에 대해 확신할 수 없다.

빠른 인출(Fast Withdrawal)

만약 참여자가 자신의 자산을 보전하기 위해 플라즈마 체인을 Exit하려는 상황이 아니라 간단히 PETH를 출금하려는 상황이라면, 단순 인출은 시간이 많이 걸리고 번거로운 과정으로 느껴질 것이다. 빠른 인출은 이러한 불편을 해소해준다. 빠른 인출은 아토믹 스왑(Atomic swap)을 활용한 인출 방법이다.

Alice가 플라즈마 체인에서 루트 체인으로 빠른 인출을 통해 자금을 옮기려고 하는 상황을 생각해 보자. Larry는 Alice의 자금 이전을 도와줄 의향이 있다. Alice는 플라즈마 체인에서 Larry에게 3 PETH를 보내고, Larry는 루트 체인에서 Alice에게 3 ETH를 보낸다. 이제 Alice는 3 PETH 대신 3 ETH를 가지게 되었고, Larry는 3 ETH 대신 3 PETH를 가지게 되었다. 이 과정은 아토믹 스왑에 의해 안전하게 이루어질 수 있다. 플라즈마 컨트랙트에 요청을 보내지 않아도 되므로, 아토믹 스왑을 지원하는 체인이기만 하면 조상 체인이 아닌 체인으로도 빠른 인출 과정을 통해 자금을 옮길 수 있다. 아토믹 스왑의 구체적인 과정은 링크를 참조하길 바란다.

여기서 중요한 점은 만약 플라즈마 체인이 비잔틴 상황이라면 빠른 인출을 활용할 수 없다는 점이다. 왜냐하면 빠른 인출 과정에는 플라즈마 체인 내부의 거래(Alice → Larry)가 포함되기에, 이 거래가 포함된 트랜잭션이 finalize되지 않는다면 빠른 인출을 할 수 없기 때문이다. 비잔틴 상황에서는 단순 인출이나 대량 인출을 통해 자금을 인출하여야 한다.

대량 인출(Mass Withdrawal)

대량 인출은 비잔틴 상황에서 활용되는 인출 방식이다. 대량 인출의 동작 방식은 현실 세계의 공동 구매와 유사하다. 인출 작업이 개개인마다 따로 이루어지는 단순 인출이나 빠른 인출과는 달리, 대량 인출에서는 한 명이 대량 인출을 오픈하고 다른 사람들은 오픈된 대량 인출에 참여한다. 자세한 과정은 다음과 같다.

1) 플라즈마 체인이 비잔틴 상황이어서 플라즈마 체인 참여자들은 인출을 하고 싶어한다. Pat은 이에 따라 대량 인출을 연다. 대량 인출을 위해 Pat은 루트 체인에 존재하는 인출 목적지 플라즈마 체인과 계약을 맺는다. 이 계약의 내용은 Pat이 목적지 플라즈마 체인의 컨트랙트에 대량 인출 자금을 보내면, 보낸 만큼 목적지 플라즈마 체인에서 사용 가능한 자금이 생긴다는 것이다.

2) Pat은 성공적으로 계약이 맺어졌다는 사실을 공표한다. 이를 확인한 Alice를 비롯한 플라즈마 체인 참여자들은 Pat의 대량 인출에 인출 대상 자금(UTXO)과 서명을 보내 참여한다. Pat은 대량 인출 참여자들에게 일정량의 수수료를 받을 수 있다. 이때 대량 인출은 누구나 열 수 있기 때문에 동시에 여러 개가 열릴 수 있지만, 참여자들은 중복 신청을 해서는 안된다(중복 신청을 하면 확인 가능하다.)

3) 참여자들의 서명을 받은 후 Pat은 충분한 시간에 거쳐 블록을 검증한다. 검증 과정에서 Pat은 각 참여자가 제출한 UTXO들이 사용된 적이 없는지, 제출된 서명이 맞는지 등을 확인한다. 그 후 제출된 서명을 기반으로 대량 인출 트랜잭션을 생성한다.

4) 대량 인출 참여자들은 생성된 대량 인출 트랜잭션을 다운받은 후, 2차 서명을 한다. 이 서명 작업은 현재까지의 정보가 올바르다는 것을 확인해주는 역할을 한다. Pat은 이 서명 이후에 플라즈마 체인에서 일어나는 부정 행위에 대해서는 책임이 없으므로, 처벌받지 않는다. 2차 서명을 제출하면, 앞서 제출한 자신의 자금(UTXO)이 잠기게 된다. 2차 서명을 하지 않은 참여자는 대량 인출에서 제외된다.

5) Pat은 중복 인출을 신청한 참여자가 없는지 확인하고, 중복 인출자가 있다면 대량 인출 에서 제외한다. 중복 인출 검증이 끝난 후, Pat은 최종적으로 자신이 서명하여 대량 인출 트랜잭션을 루트 체인이나 패런트 체인에 공표한다. 공표 시 참여자가 제출한 UTXO들의 머클화 정보, 참여자의 서명 등을 함께 제출하여 Pat의 대량 인출 트랜잭션이 올바르다는 것을 증명해야 한다.

6) 루트 체인이나 패런트 체인의 참여자는 공표된 대량 인출 트랜잭션을 확인하고, 이의 신청을 할 수 있다. 이러한 이의 신청 과정에는 최대 몇 주가 소요될 수 있으며, 이의 신청이 제기되지 않으면 대량 인출이 완료된다.

6) 이후에 루트 체인에서 그래서 자금이 어떻게 목적지 플라즈마 체인으로 보내는지에 대한 언급이 있어야 하지만, 백서에는 명시되어 있지 않다.(사실 애초에 목적지 플라즈마 체인으로 바로 자금을 이전할 필요도 크게 없어 보인다.)

그런데 대량 인출과 관련해서 조금 더 근본적인 의문점이 하나 들 수 있다. ‘비잔틴 상황에서 Alice(개인)이 대량 인출에 참여할 유인이 있는가? Alice는 비잔틴 상황일 때 그냥 단순 인출을 통해 빠져나가면 되지 않는가?’ 맞다. 대량 인출은 앞서 언급하였듯이 필수적이지 않다. 100개의 인출 요청이 모인 1개의 대량 인출 요청과 100개의 개별적인 단순 인출 요청을 비교해 보았을 때, 1개의 대량 인출 요청이 100개의 개별적인 단순 인출 요청보다 데이터의 크기가 작으므로, 전체 네트워크의 측면에서 보았을 때 1개의 대량 인출 요청이 더 이로운 것은 사실이다. 하지만 Alice의 입장에서 보면, 대량 인출은 단순 인출보다 완료되는데 시간이 훨씬 오래 걸리고 복잡하므로, 비잔틴 상황이라 하더라도 굳이 대량 인출을 통해 인출할 이유가 없다.

플라즈마 체인의 합의 알고리즘

앞선 동작 흐름 부분에서는 플라즈마 체인의 합의 알고리즘이 PoA라고 가정하고 서술하였지만, 사실 다른 합의 알고리즘을 채택하는 것도 가능하다. 다만, PoW는 채택되기 힘든데, 그 이유는 플라즈마 체인의 인출과 트랜잭션 처리는 Finality를 전제하지만, PoW에서는 Finality가 보장되지 않기 때문이다. 더불어 PoW가 안정성을 확보하기 위해선 기본적으로 많은 수의 채굴자가 필요한데, 플라즈마 체인에서는 그것이 현실적으로 불가능할 수 있다. 따라서 이번 장에서는 플라즈마 체인에 현실적으로 적용될 수 있는 또 다른 합의 알고리즘인 PoS를 살펴보도록 하자.

PoS의 이점

플라즈마 체인에서 비잔틴 상황이 발생해도 대처할 수는 있지만, 대처하는 과정에서 불필요한 비용이 발생될 것이므로 비잔틴 상황이 발생하지 않는 것이 가장 좋을 것이다. PoS에서는 여러 명의 스테이커(Staker)가 존재하므로 비잔틴 상황이 일어날 가능성을 PoA(단일 오퍼레이터일 경우)에 비해 줄일 수 있다.

이와 더불어, PoS 플라즈마 체인에서 자체 토큰을 활용한다면 비잔틴 상황의 가능성을 더더욱 줄일 수 있다. 자체 토큰을 활용하는 PoS에서, 플라즈마 체인의 스테이커들은 토큰을 스테이킹(Staking)한 후 블록을 생성하며, 이에 대한 보상을 자체 토큰으로 받는다. 플라즈마 체인이 비잔틴 상황에 빠지면 토큰의 가치가 하락하게 되므로, 자연스레 플라즈마 체인의 스테이커들이 비잔틴 행동을 할 유인이 줄어들게 된다. 물론 이러한 효과는 ETH를 활용해도 얻을 수는 있겠지만, 자체 토큰과 플라즈마 체인간의 관계가 ETH와 플라즈마 체인간의 관계보다 훨씬 직접적이므로 자체 토큰을 활용했을 때 훨씬 큰 효과를 얻을 수 있을 것이다.

플라즈마 체인의 PoS와 Block Withholding Attack

플라즈마에서는 블록 헤더가 상위 체인에 커밋되는 것이 매우 중요하다. 그런데 만약 플라즈마 체인의 블록 생성자들이 고의적으로 블록을 더 이상 생성하지 않거나 블록을 생성하고도 공표하지 않으면 블록 헤더가 더 이상 상위 체인에 커밋될 수 없다. 이러한 공격을 Block Withholding Attack(BWH)이라 부른다. 플라즈마에서는 이러한 BWH가 가장 주요한 공격 경로로 다루어진다. 따라서 플라즈마 체인의 PoS는 51% 어택보다는 BWH를 최소화하는 것에 초점이 맞춰져 있다. 이 목표를 달성하기 위해 플라즈마 체인의 PoS는 나카모토 합의(비트코인의 합의 알고리즘)의 유인을 차용한다.

나카모토 합의에서는 리더(블록 생성자)를 확률적으로 선출하여 BWH를 막는다. 비트코인에서 A라는 블록 생성자가 특정 블록 높이에서 블록을 생성했다고 가정해보자. A는 리더가 될 확률이 높지만 확신할 수는 없다. 다른 사람들이 동시에 같은 높이의 블록을 생성했을 수 있기 때문이다. A가 생성한 블록이 메인 체인의 블록이 될 것인지는 일정 시간(비트코인에서는 6 컨펌)이 지난 후에야 알 수 있다. 비트코인에서는 가장 긴 체인이 메인 체인이 되는 만큼, A가 해시 파워의 51% 이상을 소유하고 있지 않은 이상 A가 리더가 되기 위해서 취할 수 있는 가장 좋은 방법은 생성하자마자 최대한 빨리 블록을 다른 노드들에게 전파(propagate)하는 것이다.

플라즈마 체인의 PoS 모델(백서 기준)

플라즈마 체인의 PoS 모델을 다루기에 앞서, 먼저 일반적인 PoS 모델을 생각해보자. 일반적인 PoS에서는 리더가 확정적이다. 예를 들어, coinage를 활용한 PoS 모델에서는 (proofhash < coinage)라는 블록 생성 공식이 있으므로, 누구나 풀 노드(Full node)에 질의(Query)를 날려 누가 다음 블록을 생성할 것인지 예측할 수 있다. 만약 단 한 명만이 블록을 생성할 예정인 경우 생성 예정인 블록은 51% 어택이 일어나지 않는 이상 메인 체인에 무조건 포함될 것이다. 그런데 이와 같이 리더가 확정적이면 블록 전파를 할 유인이 부족하여 BWH이 일어날 수 있으므로, 플라즈마 체인의 PoS 모델은 일반적인 PoS 모델과 달라져야 한다. 그래서 플라즈마 체인의 PoS에서는 나카모토 합의처럼 1) 리더를 확률적으로 선출하고 2) 블록 전파를 장려하는 장치들을 둔다.

먼저 플라즈마 체인의 PoS에서 지분 보유자(stake holder)들은 자신들의 기금을 위임받은 스테이커(staker)에게 할당한다. 스테이커들은 지분 보유자를 대신해서 행동할 책임이 있으며, 만약 잘못 행동할 시 지분 보유자들이 트랜젝션 수수료를 받지 못하는 등 불이익을 받게 된다. 스테이커들은 특정 기간(e.g. 3개월) 동안 활동하게 되며, 스테이커가 되기 위해서는 총 토큰 발행량의 1%(최소) ~ 5%(최대)를 할당 받아야 한다. 5% 이상 할당받으려는 경우, 여러 개의 스테이커 계정에 나눠서 할당받아야 한다. 이는 1 개 계정의 영향력을 5%로 제한하여, 51% 어택이나 BWH 담합의 가능성을 줄이기 위해 필요한 과정이다.

블록 생성 보상은 지난 100 개의 블록들의 스테이킹 비율 대표 여부에 따라 달라진다. 지난 100 개의 블록들이 스테이킹 비율을 대표한다면 스테이커들은 추가적인 블록 생성 보상을 받을 수 있다. Alice가 총 토큰 발행량의 3%를 할당 받은 스테이커라고 가정해보자. 지난 100 개의 블록이 스테이킹 비율을 대표하려면, Alice가 생성한 블록의 개수가 3 개여야 한다. 만약 Alice가 3개를 초과해서 생성한다면, 지난 100 개의 블록이 스테이킹 비율을 대표하지 못하게 된다. 이때 Alice는 초과 생성분에 대해서는 앞에서 말한 추가적인 블록 생성 보상을 받을 수 없다. 마찬가지로 지난 100 개의 블록 기간 동안 Alice가 3 개보다 적은 블록을 생성한 경우에도 스테이킹 비율을 대표하지 못하게 되므로, 현재의 블록 생성자는 추가 보상을 받을 수 없게 된다. 지난 100 개의 블록이 스테이킹 비율을 대표하지 못해 아무에게도 지급되지 않은 추가 보상이 생기면, 이는 미래의 블록 생성을 보상하기 위한 풀(pool)로 들어가게 된다.

이러한 구조 속에서 스테이커들은 다른 모든 스테이커가 블록 생성 과정에 참여할 수 있도록 협력하게 될 것이다. 만약 Alice가 3%를 할당받은 스테이커고, 블록을 초과해서 생성했다고 가정해보자. 다른 스테이커들 입장에선, Alice의 초과 생성 블록 뒤에 생성하면 추가 보상을 못받게 되므로, Alice의 초과 생성 블록 뒤에 이어서 블록을 생성할 유인이 없다. 그러므로 스테이커들은 지난 100 개의 블록이 스테이킹 비율을 최대한 대표하는 브랜치를 찾아서 그 뒤에 블록을 붙여나갈 것이고, 그러기 위해 지속적으로 서로 싱크를 할 것이다.

그런데 위의 과정은 엄밀히 말하면 스테이커마다 생성할 블록의 양을 할당하고 협력하게 하는 과정이지, 전파를 장려하는 과정은 아니다. 전파를 장려하기 위해 플라즈마 체인에서는 일정 기간마다 지난 모든 블록(처음부터 끝까지)의 보상 합이 가장 큰 브랜치를 메인 체인에 체인 팁(Chain Tip)으로 포함시켜 finalized시킨다.(정확한 finalization 스펙은 백서에 명시되어 있지 않다.)

예를 들어, height n까지 finalized 되었고, finalization는 블록 6 개 주기로 이루어진다고 가정해보자. 다음에 메인 체인에 포함되어 finalized되는 브랜치는 height n+6까지의 모든 블록의 보상 합이 가장 큰 브랜치일 것이다. 이 점이 매우 중요하다. Alice는 height n+1의 블록을 생성하였고, 모든 브랜치중 Alice의 블록이 담긴 브랜치가 height n+1까지의 보상 합이 가장 크다. 그럼에도 불구하고 Alice의 블록은 메인 체인에 포함되지 않을 수도 있다. Alice 뒤의 height n+2 ~ n+6의 블록 생성자들이 생성한 블록들이 스테이킹 비율을 대표하지 못해 적은 보상을 받을 경우, 다른 브랜치가 Alice 브랜치의 보상 합을 역전해 height n+6에서 메인 체인으로 채택될 수 있기 때문이다. 이처럼 Alice는 자신이 생성한 블록이 리더가 될지 확신할 수 없다. 이는 반대로 말하면, 자신이 생성한 블록이 메인 체인에 포함될 확률이 늘 존재한다는 뜻이다. 따라서 Alice는 자신이 생성한 블록 뒤에 스테이킹 비율을 대표할 수 있는 블록 생성자들이 블록을 붙여 자신의 블록이 메인 체인에 포함될 수 있도록 열심히 자신이 생성한 블록을 전파할 것이다.

이더리움의 다른 확장성 솔루션들과 플라즈마

끝으로 플라즈마와 이더리움의 다른 확장성 솔루션들간의 관계를 간단히 언급하고 글을 마치고자 한다. 몇몇 사람들이 이더리움의 여러 확장성 솔루션들이 경쟁적 관계에 있다고 생각하는 것과 달리, 플라즈마와 다른 확장성 솔루션들은 공존 가능하다. 먼저, 이 글에서 다루지 않은 플라즈마의 Free option problem을 해결하거나 플라즈마 체인간의 통신을 구축하려면 라이트닝 네트워크와 같은 추가적인 오프체인 레이어가 필요해질 수 있다. 또 플라즈마는 전적으로 루트 체인의 안정성에 의존하기 때문에, 루트 체인에 캐스퍼와 같은 finality 툴이 도입된다면, 플라즈마의 안정성이 증가할 수 있을 것이다. 뿐만 아니라 플라즈마 체인이 PoS로 운영된다면, 플라즈마 체인에도 캐스퍼와 같은 finality 툴을 도입해 플라즈마 체인 내부의 안정성을 높일 수 있을 것이다. 마지막으로 플라즈마는 샤딩과도 공존 가능하다. 기본적으로 샤딩은 루트 체인에 도입되는 것이고, 플라즈마는 루트 체인에 다른 블록체인을 연결하는 작업인 만큼, 샤딩이 도입된 루트 체인에 플라즈마를 도입하는 것도 충분히 가능할 것이다. 물론 플라즈마 체인에 샤딩을 도입하는 것도 고려해볼 수 있다.다음글) 블록체인 확장성 솔루션 시리즈 2–2 :: Plasma — Q&A / Code Review

References

  1. Plasma whitepaper (http://plasma.io/)
  2. Plasma MVP Overview by Karl (https://www.youtube.com/watch?v=jTc_2tyT_lY)
  3. Plasma MVP spec (https://ethresear.ch/t/minimal-viable-plasma/426)
  4. Construction of a Plasma Chain 0x1 (https://blog.omisego.network/construction-of-a-plasma-chain-0x1-614f6ebd1612)
  5. Smart contracts on plasma (https://www.youtube.com/watch?v=KzyqzEtEc3I)
  6. Scaling Ethereum with Plasma (https://www.youtube.com/watch?v=plf-kG8jt9c)
  7. Plasma Overview and Transaction Data Availability (https://www.youtube.com/watch?v=yjySP0t6lYo)