의견.png

"플라즈마 알고리즘"의 두 판 사이의 차이

해시넷
이동: 둘러보기, 검색
(단순 인출(Simple withdrawal))
50번째 줄: 50번째 줄:
  
 
====단순 인출(Simple withdrawal)====
 
====단순 인출(Simple withdrawal)====
: 빠른 인출과 대량 인출은 플라즈마 참여자의 편의를 위해 존재한다. 반면, 단순 인출은 플라즈마에서 핵심적인 역할을 담당한다. 단순 인출이 구현되어 있지 않으면, 플라즈마의 안전성은 보장될 수 없다. 플라즈마 체인의 참여자는 본인이 원할 때 언제든 단순 인출을 요청할 수 있다. 여기서 '언제든'은 참여자의 인출 목적이 무엇이든, 체인의 상황이 어떻든(비잔틴 상황이어도) 인출을 요청할 수 있다는 것을 의미한다. 중요한 점은 단순 인출은 참여자가 속한 체인이 아닌, 플라즈마 컨트랙트에 요청된다는 점이다. Alice가 Depth 3의 플라즈마 체인에 참여하고 있고, 이 체인의 컨트랙트가 Depth 2 체인, Depth 1 체인 그리고 루트 체인에 존재한다면, Alice는 이 셋 중 어디로든 Exit을 할 수 있다. 더불어 단순 인출에는 부정 인출을 방지할 수 있는 챌린지(Challenge)라는 과정이 존재한다. 플라즈마 컨트랙트가 있는 체인 어디로든 Exit할 수 있다는 점과 부정 인출을 방지할 수 있다는 점 덕분에 Alice는 참여하고 있는 체인에서 부정 행위가 발생하는 상황뿐만 아니라, 루트 체인을 제외한 조상 체인들에서 부정 행위가 발생한 상황에서도 안전하게 자금을 보전하여 인출할 수 있다.
+
빠른 인출과 대량 인출은 플라즈마 참여자의 편의를 위해 존재한다. 반면, 단순 인출은 플라즈마에서 핵심적인 역할을 담당한다. 단순 인출이 구현되어 있지 않으면, 플라즈마의 안전성은 보장될 수 없다. 플라즈마 체인의 참여자는 본인이 원할 때 언제든 단순 인출을 요청할 수 있다. 여기서 '언제든'은 참여자의 인출 목적이 무엇이든, 체인의 상황이 어떻든(비잔틴 상황이어도) 인출을 요청할 수 있다는 것을 의미한다. 중요한 점은 단순 인출은 참여자가 속한 체인이 아닌, 플라즈마 컨트랙트에 요청된다는 점이다. Alice가 Depth 3의 플라즈마 체인에 참여하고 있고, 이 체인의 컨트랙트가 Depth 2 체인, Depth 1 체인 그리고 루트 체인에 존재한다면, Alice는 이 셋 중 어디로든 Exit을 할 수 있다. 더불어 단순 인출에는 부정 인출을 방지할 수 있는 챌린지(Challenge)라는 과정이 존재한다. 플라즈마 컨트랙트가 있는 체인 어디로든 Exit할 수 있다는 점과 부정 인출을 방지할 수 있다는 점 덕분에 Alice는 참여하고 있는 체인에서 부정 행위가 발생하는 상황뿐만 아니라, 루트 체인을 제외한 조상 체인들에서 부정 행위가 발생한 상황에서도 안전하게 자금을 보전하여 인출할 수 있다.
  
 
# 플라즈마 체인에서 Exit하고자 하는 참여자 Sam은 루트 체인이나 패런트 체인에 존재하는 플라즈마 컨트랙트에 인출을 요청한다. 이때 Sam은 자금 전부(3 PETH)를 인출하여야만 한다. Sam의 자금은 여러 개의 UTXO에 나눠 기록되어 있을 수 있기 때문에, 상황에 따라 여러 개의 UTXO가 인출 대상에 포함될 수 있다. 이때 인출 대상 UTXO들은 플라즈마 체인에서 Finalized 되어 있어야 한다. 인출 요청의 결과, 인출 대상 UTXO들의 위치(해당 블록 넘버와 블록 안에서의 인덱스)는 참여자들에게 공개된다.
 
# 플라즈마 체인에서 Exit하고자 하는 참여자 Sam은 루트 체인이나 패런트 체인에 존재하는 플라즈마 컨트랙트에 인출을 요청한다. 이때 Sam은 자금 전부(3 PETH)를 인출하여야만 한다. Sam의 자금은 여러 개의 UTXO에 나눠 기록되어 있을 수 있기 때문에, 상황에 따라 여러 개의 UTXO가 인출 대상에 포함될 수 있다. 이때 인출 대상 UTXO들은 플라즈마 체인에서 Finalized 되어 있어야 한다. 인출 요청의 결과, 인출 대상 UTXO들의 위치(해당 블록 넘버와 블록 안에서의 인덱스)는 참여자들에게 공개된다.

2019년 7월 30일 (화) 11:05 판

플라즈마(plasma)란 모든 거래내역을 메인체인에서 처리하는 기존 블록체인과 달리, 메인체인(또는 루트체인)에 나뭇가지처럼 이어진 차일드체인에서 사전에 수집된 정보들을 처리한 후 결과만 루트체인에 전달함으로써 처리 속도를 향상시킨 알고리즘이다. 플라스마라고도 한다. 플라즈마 알고리즘은 비탈릭 부테린조셉 푼이 공동 개발했다. 한국은 ㈜온더정순형 대표 등이 플라즈마 기술 개발에 참여하고 있다.

도입 배경

이더리움 네트워크는 확장성 문제를 겪고 있었다. 이를 해결하기 위해 캐스퍼, 샤딩, 라이덴 네트워크 등 다양한 확장성 솔루션들이 제시되어 왔고 플라즈마도 그러한 확장성 솔루션 중 하나다. 기본적으로 플라즈마는 라이트닝 네트워크와 유사하다. 샤딩과 캐스퍼가 온체인(on-chain) 확장성 솔루션인 것과 달리, 플라즈마와 라이트닝 네트워크는 오프체인 확장성 솔루션이다. 라이트닝 네트워크를 활용하면 메인넷의 트랜잭션 속도와 관계없이, 개인간에 채널만 연결되어 있다면 상호간에 빠른 지불(토큰 송금)이 가능하다. 플라즈마는 이러한 라이트닝 네트워크의 접근 방식을 단순한 지불이 아닌 스마트 컨트랙트의 상태 전이에도 활용해 보려는 생각으로부터 시작되었다.[1]

용어

플라즈마는 물리학에서 나온 용어이다. 물리학에서 플라즈마(plasma)란 이온화된 기체가 전도성을 띄게 된 물질을 말한다. 고체, 액체, 기체, 플라즈마를 물질의 4가지 상태라고 한다. 플라즈마 물질에는 번개, 오로라, 네온사인, 레이저, 태양 등이 있다. 가기.png 플라즈마 물질에 대해 자세히 보기

플라즈마 블록체인 용어

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

동작원리

라이트닝 네트워크에서는 모든 트랜잭션을 메인 체인에 기록하지 않고 최종적인 결과만을 저장하여도 메인 체인에서 이를 신뢰할 수 있다. 이와 비슷하게 플라즈마에서도 차일드 체인의 모든 트랜잭션이 아닌 블록 헤더의 해시값만을 패런트 체인에 올리더라도, 루트 체인만 정상적으로 작동한다면 문제가 발생하지 않는다. 이것이 정확히 무엇을 의미하는지는 플라즈마 체인 참여 시작(Deposit), 플라즈마 체인 내부 프로세스(Transaction, Periodic Commitment), 플라즈마 체인 참여 종료(Exit)순으로 이어지는 동작 흐름을 통해 살펴봐야 한다. 플라즈마 백서에서는 구현의 편의를 위해 플라즈마 체인들이 스테이트 모델(State model)이 아닌, UTXO 구조를 가진다는 것을 전제하였다. 또한 앞서 언급하였듯이 각 플라즈마 체인은 독립적인 거버넌스를 가질 수 있는데, 편의를 위해 동작 흐름 설명 부분에서는 단일 오퍼레이터가 존재하는 PoA(Proof of Authority)를 가정하고 서술하고자 한다.[1]

Deposit

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

  1. 플라즈마 체인에 참여하고자 하는 Alice는 루트 체인의 플라즈마 컨트랙트로 3 ETH(일정량)를 보내는 트랜잭션을 생성하여 컨트랙트의 deposit 함수를 호출한다.
  2. 플라즈마 컨트랙트에 Alice의 3 ETH가 Lock-in 된다. 이때, 플라즈마 컨트랙트에는 누가 ETH를 보냈는지는 기록되지 않고, 총량만이 기록된다.
  3. 플라즈마 체인의 블록 생성자(오퍼레이터)는 루트 체인의 트랜잭션을 확인하고, 플라즈마 체인의 블록에 Alice가 3 PETH를 소유하고 있다는 내용의 새로운 UTXO를 생성해 담는다.
  4. Alice는 플라즈마 블록을 확인하고, 플라즈마 체인의 트랜잭션에 서명을 하여 컨펌한다. Alice의 컨펌과 함께 트랜잭션은 유효해지고, Alice는 플라즈마 체인에서 3 PETH를 소유하게 된다.[1]

플라즈마 체인의 트랜잭션

플라즈마 체인의 트랜잭션 과정을 예시를 통해 설명하고자 한다. 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번의 컨펌은 부정 행위를 방지하기 위해 설계된 장치이다.[1]

Periodic Commitments

플라즈마에서 차일드 체인의 블록 헤더는 매 블록이 생성될 때마다 패런트 체인의 블록에 담기는 것이 아니라, 효율성을 위해 일정한 주기마다 담긴다. 이를 Periodic Commitment라 부른다. 정확한 주기는 체인마다 달라질 수 있다. 주기적으로 커밋한다고 했을 때 N, N+3, N+6 번 블록의 헤더만이 커밋된다고 오해할 수 있는데, 주기는 커밋되는 텀을 의미할 뿐이다. 주기적으로 커밋한다고 해도, 모든 블록의 헤더가 상위 체인에 커밋되어야 한다.[1]

Exit Process

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

단순 인출(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이 인출한 양 만큼 줄어들고 인출 처리된 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 할 곳이 없는 것이므로, 참여자는 자신의 자산 안전성에 대해 확신할 수 없다.[1]

빠른 인출(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되지 않는다면 빠른 인출을 할 수 없기 때문이다. 비잔틴 상황에서는 단순 인출이나 대량 인출을 통해 자금을 인출하여야 한다.[1]

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

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

각주

  1. 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 Gong Hyuncheol, 〈블록체인 확장성 솔루션 시리즈 2-1 :: Plasma Overview〉, 《Decipher Media》, 2018-04-26

참고자료

같이 보기


  의견.png 이 플라즈마 알고리즘 문서는 블록체인 기술에 관한 토막글입니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 이 문서의 내용을 채워주세요.