검수요청.png검수요청.png

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

위키원
이동: 둘러보기, 검색
(용어)
잔글 (같이 보기)
 
(사용자 3명의 중간 판 59개는 보이지 않습니다)
1번째 줄: 1번째 줄:
'''플라즈마'''(plasma)모든 거래내역을 메인체인에서 처리하는 기존 [[블록체인]]과 달리, 메인체인(또는 루트체인)에 나뭇가지처럼 이어진 차일드체인에서 사전에 수집된 정보들을 처리한 후 결과만 루트체인에 전달함으로써 처리 속도를 향상시킨 [[알고리즘]]이다. '''플라스마'''라고도 한다. 플라즈마 알고리즘은 [[비탈릭 부테린]]과 [[조셉 푼]]이 공동 개발했다. 한국은 [[㈜온더]]의 [[정순형]] 대표 등이 플라즈마 기술 개발에 참여하고 있다.
+
'''플라즈마 알고리즘'''<!--플라스마 알고리즘-->(plasma)이란 모든 거래명세를 [[메인체인]]에서 처리하는 기존 [[블록체인]]과 달리, 메인체인(또는 루트체인)에 나뭇가지처럼 이어진 [[차일드체인]]에서 사전에 수집된 정보들을 처리한 후 결과만 [[루트체인]]에 전달함으로써 처리 속도를 향상한 [[알고리즘]]이다. '''플라스마 알고리즘'''이라고도 한다. 플라즈마 알고리즘은 [[비탈릭 부테린]]과 [[조셉 푼]]이 공동 개발했다. 한국은 [[㈜온더]]의 [[정순형]] 대표 등이 플라즈마 알고리즘 기술 개발에 참여하고 있다.
 +
 
 +
== 개요 ==
 +
플라즈마 알고리즘은 [[조셉 푼]](Joseph Poon)과 [[비탈릭 부테린]](Vitalik Buterin)이 함께 제시한 [[이더리움]] 확장성 솔루션이며, 이더리움 메인넷을 부모 체인(parent chain)으로 보고 이에 종속되는 자식 체인(child chain)을 생성하여 기존에 이더리움 메인넷에서만 발생하던 [[트랜잭션]]을 자식 체인에서도 생성할 수 있게 함으로써 이더리움 네트워크 전체의 단위 시간당 [[트랜잭션]] 처리량을 증가시킬 수 있다는 개념이다. 이를 활용하면 단순하게는 이더리움 메인넷을 부모 체인으로 하는 다수의 자식 체인을 생성할 수도 있지만, 자식 체인들이 또 다른 손자/손녀 체인들의 부모 체인이 되는 계층적(hierarchical)인 구조로 반복적으로 확장이 가능하기에 이론적으로는 단위 시간당 [[트랜잭션]] 처리량을 무한히 향상할 수 있다. 물론 [[플라즈마체인]] 간 자금의 이동에는 긴 시간이 소요되고, 깊은 계층에서 생성된 [[트랜잭션]]은 확정까지 걸리는 시간이 오래 걸리는 등, 무한한 확장성은 아직은 현실적이지 않다.<ref name="개요">Daniel Dongyeon Woo, 〈[https://medium.com/hashed-kr/plasma-review-90dd031086a0 플라즈마 리뷰]〉, 《Medium》, 2018-09-12</ref>
  
 
== 도입 배경==
 
== 도입 배경==
이더리움 네트워크는 확장성 문제를 겪고 있었다. 이를 해결하기 위해 캐스퍼, 샤딩, 라이덴 네트워크 등 다양한 확장성 솔루션들이 제시되어 왔고 플라즈마도 그러한 확장성 솔루션 중 하나다.
+
이더리움 네트워크는 확장성 문제를 겪고 있었다. 이를 해결하기 위해 캐스퍼, 샤딩, 라이덴 네트워크 등 다양한 확장성 솔루션들이 제시되어 왔고 플라즈마 알고리즘도 그러한 확장성 솔루션 중 하나이다. 기본적으로 플라즈마 알고리즘은 [[라이트닝 네트워크]]와 유사하다. [[샤딩]]과 [[캐스퍼]]가 [[온체인]](on-chain) 확장성 솔루션인 것과 달리, 플라즈마 알고리즘과 라이트닝 네트워크는 오프체인 [[확장성]] 솔루션이다. 라이트닝 네트워크를 활용하면 메인넷의 [[트랜잭션]] 속도와 관계없이, 개인간에 채널만 연결되어 있다면 상호간에 빠른 지불(토큰 송금)이 가능하다. 플라즈마 알고리즘은 이러한 라이트닝 네트워크의 접근 방식을 단순한 지불이 아닌 스마트 컨트랙트의 상태 전이에도 활용해 보려는 생각으로부터 시작되었다.<ref name="블록체인">Gong Hyuncheol, 〈[https://medium.com/decipher-media/%EB%B8%94%EB%A1%9D%EC%B2%B4%EC%9D%B8-%ED%99%95%EC%9E%A5%EC%84%B1-%EC%86%94%EB%A3%A8%EC%85%98-%EC%8B%9C%EB%A6%AC%EC%A6%88-2-1-plasma-overview-7e6875f4c20d 블록체인 확장성 솔루션 시리즈 2-1 :: Plasma Overview]〉, 《Medium》, 2018-04-26</ref>
기본적으로 플라즈마는 라이트닝 네트워크와 유사하다. 샤딩과 캐스퍼가 온체인(on-chain) 확장성 솔루션인 것과 달리, 플라즈마와 라이트닝 네트워크는 오프체인 확장성 솔루션이다. 라이트닝 네트워크를 활용하면 메인넷의 트랜잭션 속도와 관계없이, 개인간에 채널만 연결되어 있다면 상호간에 빠른 지불(토큰 송금)이 가능하다. 플라즈마는 이러한 라이트닝 네트워크의 접근 방식을 단순한 지불이 아닌 스마트 컨트랙트의 상태 전이에도 활용해 보려는 생각으로부터 시작되었다.
 
  
 
== 용어 ==
 
== 용어 ==
플라즈마는 물리학에서 나온 용어이다. 물리학에서 플라즈마(plasma)란 이온화된 기체가 전도성을 띄게 물질을 말한다. 고체, 액체, 기체, 플라즈마를 물질의 4가지 상태라고 한다. [[플라즈마 물질]]에는 번개, 오로라, 네온사인, 레이저, 태양 등이 있다. {{자세히|플라즈마 물질}}
+
[[플라즈마]](plasma)는 [[물리학]]에서 나온 용어이다. 물리학에서 [[플라즈마 물질]]이란 이온화된 기체가 전도성을 띠게 [[물질]]을 말한다. 고체, 액체, 기체, 플라즈마를 물질의 4가지 상태라고 한다. 플라즈마 물질에는 번개, 오로라, 네온사인, 레이저, 태양 등이 있다. {{자세히|플라즈마 물질}}
  
 
===플라즈마 블록체인 용어===
 
===플라즈마 블록체인 용어===
 
* 차일드 체인(Child Chain)과 패런트 체인(Parent Chain)
 
* 차일드 체인(Child Chain)과 패런트 체인(Parent Chain)
: 이 둘의 개념은 상대적이다. A와 B 두체인이 연결되어 있다고 했을 때, 화살표가 시작되는 쪽의 체인이 차일드 체인이고, 화살표가 끝나는 쪽의 체인이 패런트 체인이다. 차일드 체인도 하위 체인의 패런트 체인이 될 수 있고, 패런트 체인도 상위 체인의 차일드 체인이 될 수 있다.
+
: 이 둘의 개념은 상대적이다. A와 B 두 체인이 연결되어 있다고 했을 때, 화살표가 시작되는 쪽의 체인이 차일드 체인이고, 화살표가 끝나는 쪽의 체인이 패런트 체인이다. 차일드 체인도 하위 체인의 패런트 체인이 될 수 있고, 패런트 체인도 상위 체인의 차일드 체인이 될 수 있다.
 
* 플라즈마 체인(Plasma Chain)
 
* 플라즈마 체인(Plasma Chain)
: 차일드 체인과 패런트 체인은 상대적인 개념이므로, 혼란을 주지 않기 위해서는 별도의 용어를 사용할 필요가 있다. 플라즈마에서는 이더리움 메인 체인을 제외한 모든 체인들을 플라즈마 체인이라 칭한다. 각 플라즈마 체인은 독립적인 거버넌스 시스템을 가질 수 있다.
+
: 차일드 체인과 패런트 체인은 상대적인 개념이므로, 혼란을 주지 않기 위해서는 별도의 용어를 사용할 필요가 있다. 플라즈마에서는 이더리움 메인 체인을 제외한 모든 체인을 플라즈마 체인이라 칭한다. 각 플라즈마 체인은 독립적인 거버넌스 시스템을 가질 수 있다.
 
*루트 체인(Root Chain)
 
*루트 체인(Root Chain)
 
: 이더리움 메인 체인을 의미한다. 루트 체인도 다른 체인의 패런트 체인이다. 플라즈마는 루트 체인이 제대로 동작(non-byzantine)하는 한 신뢰할 수 있다.
 
: 이더리움 메인 체인을 의미한다. 루트 체인도 다른 체인의 패런트 체인이다. 플라즈마는 루트 체인이 제대로 동작(non-byzantine)하는 한 신뢰할 수 있다.
 
* 클라이언트(Client)  
 
* 클라이언트(Client)  
: 플라즈마 체인에 실제로 참여하는 참여자다. 플라즈마 체인을 생성하거나 참가할 때 필요한 deposit 요청, 해당 플라즈마 체인에서 나오기 위한 exit 요청, 플라즈마 체인 내부의 트랜잭션 생성, 플라즈마 체인 내부의 부정 행위 감독 등의 역할을 수행한다.
+
: 플라즈마 체인에 실제로 참여하는 참여자다. 플라즈마 체인을 생성하거나 참가할 때 필요한 deposit 요청, 해당 플라즈마 체인에서 나오기 위한 exit 요청, 플라즈마 체인 내부의 [[트랜잭션]] 생성, 플라즈마 체인 내부의 부정행위 감독 등의 역할을 수행한다.
 
* 플라즈마 컨트랙트(Plasma Smart Contract)
 
* 플라즈마 컨트랙트(Plasma Smart Contract)
: 클라이언트와 deposit, exit, challenge 요청 등을 주고 받는 스마트 컨트랙트를 의미한다. 플라즈마 컨트랙트는 기본적으로 루트 체인에 위치해 있지만, 구체적인 설계에 따라 패런트 체인이나 패런트 체인의 패런트 체인 등에도 위치해 있을 수 있다.
+
: 클라이언트와 deposit, exit, challenge 요청 등을 주고 받는 스마트 컨트랙트를 의미한다. 플라즈마 컨트랙트는 기본적으로 루트 체인에 위치해 있지만, 구체적인 설계에 따라 패런트 체인이나 패런트 체인의 패런트 체인 등에도 있을 수 있다.
 
* 오퍼레이터(Operator)
 
* 오퍼레이터(Operator)
: 플라즈마 체인의 합의 알고리즘이 PoA일 때의 블록 생성자를 일컫는다. 플라즈마 동작 흐름은 단 한 명의 오퍼레이터가 존재한다는 가정하에 서술할 예정이다. 플라즈마에서 오퍼레이터나 PoS 스테이커(Staker)는 블록을 생성하는 일 뿐만 아니라 블록의 헤더를 패런트 체인에 커밋하는 일을 담당한다.
+
: 플라즈마 체인의 합의 [[알고리즘]]이 권한증명 방식([[PoA]])일 때의 블록 생성자를 일컫는다. 플라즈마 동작 흐름은 단 한 명의 오퍼레이터가 존재한다는 가정하에 서술할 예정이다. 플라즈마에서 오퍼레이터나 지분증명 방식 스테이커(Staker)는 블록을 생성하는 일뿐만 아니라 블록의 헤더를 패런트 체인에 커밋하는 일을 담당한다.
 
* PETH(Plasma ETH)  
 
* PETH(Plasma ETH)  
: 플라즈마 체인에 deposit된 ETH를 말한다. 루트 체인의 ETH와 구분하기 위해 편의상 PETH라 칭한다.
+
: 플라즈마 체인에 deposit된 ETH를 말한다. 루트 체인의 ETH와 구분하기 위해 편의상 PETH라 칭한다.<ref name="블록체인"></ref>
 +
 
 +
== 동작원리 ==
 +
라이트닝 네트워크에서는 모든 [[트랜잭션]]을 메인 체인에 기록하지 않고 최종적인 결과만을 저장하여도 메인 체인에서 이를 신뢰할 수 있다. 이와 비슷하게 플라즈마 체인에서도 차일드 체인의 모든 [[트랜잭션]]이 아닌 블록 헤더의 해시값만을 패런트 체인에 올리더라도, 루트 체인만 정상적으로 작동한다면 문제가 발생하지 않는다. 이것이 정확히 무엇을 의미하는지는 플라즈마 체인 참여 시작(Deposit),  플라즈마 체인 내부 프로세스(Transaction, Periodic Commitment), 플라즈마 체인 참여 종료(Exit) 순으로 이어지는 동작 흐름을 통해 살펴봐야 한다. 플라즈마 백서에서는 구현의 편의를 위해 플라즈마 체인들이 스테이트 모델(State model)이 아닌, UTXO 구조를 가진다는 것을 전제하였다. 또한 앞서 언급하였듯이 각 플라즈마 체인은 독립적인 거버넌스를 가질 수 있는데, 편의를 위해 동작 흐름 설명 부분에서는 단일 오퍼레이터가 존재하는 권한증명 방식(Proof of Authority)을 가정하고 서술하고자 한다.<ref name="블록체인"></ref>
 +
 
 +
===Deposit===
 +
Deposit은 클라이언트가 플라즈마 체인에 참여하기 위해 필요한 과정이다. Deposit은 클라이언트와 플라즈마 계약 간 상호작용이므로, deposit을 하기 위해서는 먼저 루트 체인에 플라즈마 계약이 배포(Deploy)되어 있어야 한다.
 +
# 플라즈마 체인에 참여하고자 하는 Alice는 루트 체인의 플라즈마 계약으로 3 ETH(일정량)를 보내는 [[트랜잭션]]을 생성하여 계약의 deposit 함수를 호출한다.
 +
# 플라즈마 계약에 Alice의 3 ETH가 Lock-in 된다. 이때, 플라즈마 계약에는 누가 ETH를 보냈는지는 기록되지 않고, 총량만이 기록된다.
 +
# 플라즈마 체인의 블록 생성자(오퍼레이터)는 루트 체인의 [[트랜잭션]]을 확인하고, 플라즈마 체인의 블록에 Alice가 3 PETH를 소유하고 있다는 내용의 새로운 UTXO를 생성해 담는다.
 +
# Alice는 플라즈마 블록을 확인하고, 플라즈마 체인의 [[트랜잭션]]에 서명하여 컨펌한다. Alice의 컨펌과 함께 [[트랜잭션]]은 유효해지고, Alice는 플라즈마 체인에서 3 PETH를 소유하게 된다.<ref name="블록체인"></ref>
 +
 
 +
===플라즈마 체인의 트랜잭션===
 +
플라즈마 체인의 [[트랜잭션]] 과정을 예시를 통해 설명하고자 한다. Alice가 Depth 3의 플라즈마 체인에 참여하고 있는 상황을 가정해보겠다.
 +
# Alice는 Bob에게 3 PETH를 보내는 [[트랜잭션]]을 생성한다.
 +
# 플라즈마 체인의 오퍼레이터 Charlie는 Alice가 생성한 [[트랜잭션]]을 플라즈마 블록에 담는다.
 +
# 정상적인 상황(non-byzantine)에서, Alice의 [[트랜잭션]]이 담긴 블록의 헤더는 오퍼레이터에 의해 패런트 체인의 블록에 커밋된다. 커밋 과정의 반복 결과, 블록 헤더의 정보는 최종적으로 루트 체인에 커밋된다.
 +
# Alice와 Bob은 모든 상위 체인들을 지켜봄으로써 루트 체인에 블록의 헤더가 커밋되는지 확인할 수 있다. 확인되면, Alice와 Bob은 Alice가 생성한 [[트랜잭션]]에 서명하여 [[트랜잭션]]을 컨펌한다.
 +
# [[트랜잭션]]에 대한 컨펌 서명이 플라즈마 블록에 담긴다. 블록에 서명이 담기면 [[트랜잭션]]은 Finalized된다.
 +
이더리움 루트 체인에서는 2번이 완료되면 유효한 [[트랜잭션]]으로 취급되지만, 플라즈마 체인에서는 5번이 완료되고 나서야 유효한 [[트랜잭션]]으로 취급된다. 다시 말해 Alice나 Bob이 컨펌 서명을 하지 않은 상태에서 3 PETH의 소유권은 여전히 Alice에게 있다. 플라즈마 설계의 중요한 전제 중 하나는 루트 체인을 제외한 모든 플라즈마 체인에서 부정행위가 일어날 수 있다는 것이다. 플라즈마 체인의 [[트랜잭션]]에서 3, 4, 5번의 과정이 존재하는 이유도 부정행위를 방지하거나, 부정행위에 의한 손실이 일어나지 않도록 하기 위해서다. 3번의 커밋은 부정행위에 의해 손실이 일어나지 않도록 하는 장치인 인출을 가능케 한다. 4번의 컨펌은 부정행위를 방지하기 위해 설계된 장치이다.<ref name="블록체인"></ref>
 +
 
 +
===Periodic Commitments===
 +
플라즈마에서 차일드 체인의 블록 헤더는 매 블록이 생성될 때마다 패런트 체인의 블록에 담기는 것이 아니라, 효율성을 위해 일정한 주기마다 담긴다. 이를 Periodic Commitment라 부른다. 정확한 주기는 체인마다 달라질 수 있다. 주기적으로 커밋한다고 했을 때 N, N+3, N+6 번 블록의 헤더만이 커밋된다고 오해할 수 있는데, 주기는 커밋되는 텀을 의미할 뿐이다. 주기적으로 커밋한다고 해도, 모든 블록의 헤더가 상위 체인에 커밋되어야 한다.<ref name="블록체인"></ref>
 +
 
 +
===Exit Process===
 +
Deposit이 클라이언트가 플라즈마 체인에 참여할 수 있게 해주는 과정이라면, Exit은 플라즈마 체인에 있는 참여자의 자금을 루트 체인, 패런트 체인 등으로 옮길 수 있게 해주는 과정이다. 플라즈마가 도입되지 않은 이더리움 네트워크에서는 부정행위나 블록 생성자의 비잔틴 행위가 발생하면 체인의 참여자(토큰 보유자)들이 손실을 볼 수 있다. 플라즈마가 도입된 이더리움 네트워크에서는 루트 체인이 제대로 동작하는 한, 참여자가 속해 있는 플라즈마 체인, 패런트 체인, 패런트 체인의 패런트 체인 등에서 부정행위나 비잔틴 상황이 발생해도 루트 체인만 제대로 동작하면 참여자가 손실을 보지 않고 안전하게 자산을 보전할 수 있다. 이를 가능하게 해주는 것이 바로 Exit이다. Exit의 종류는 단순 인출(simple withdrawal), 빠른 인출(fast withdrawal), 대량 인출(mass withdrawal) 세 가지다.<ref name="블록체인"></ref>
 +
 
 +
====단순 인출(Simple withdrawal)====
 +
빠른 인출과 대량 인출은 플라즈마 참여자의 편의를 위해 존재한다. 반면, 단순 인출은 플라즈마에서 핵심적인 역할을 담당한다. 단순 인출이 구현되어 있지 않으면, 플라즈마의 안전성은 보장될 수 없다. 플라즈마 체인의 참여자는 본인이 원할 때 언제든 단순 인출을 요청할 수 있다. 여기서 '언제든'은 참여자의 인출 목적이 무엇이든, 체인의 상황이 어떻든(비잔틴 상황이어도) 인출을 요청할 수 있다는 것을 의미한다. 중요한 점은 단순 인출은 참여자가 속한 체인이 아닌, 플라즈마 계약에 요청된다는 점이다. Alice가 Depth 3의 플라즈마 체인에 참여하고 있고, 이 체인의 계약이 Depth 2 체인, Depth 1 체인 그리고 루트 체인에 존재한다면, Alice는 이 셋 중 어디로든 Exit을 할 수 있다. 더불어 단순 인출에는 부정 인출을 방지할 수 있는 챌린지(Challenge)라는 과정이 존재한다. 플라즈마 계약이 있는 체인 어디로든 Exit할 수 있다는 점과 부정 인출을 방지할 수 있다는 점 덕분에 Alice는 참여하고 있는 체인에서 부정행위가 발생하는 상황뿐만 아니라, 루트 체인을 제외한 조상 체인들에서 부정행위가 발생한 상황에서도 안전하게 자금을 보전하여 인출할 수 있다.
 +
 
 +
# 플라즈마 체인에서 Exit하고자 하는 참여자 Sam은 루트 체인이나 패런트 체인에 존재하는 플라즈마 계약에 인출을 요청한다. 이때 Sam은 자금 전부(3 PETH)를 인출하여야만 한다. Sam의 자금은 여러 개의 UTXO에 나눠 기록되어 있을 수 있기 때문에, 상황에 따라 여러 개의 UTXO가 인출 대상에 포함될 수 있다. 이때 인출 대상 UTXO들은 플라즈마 체인에서 Finalized 되어 있어야 한다. 인출 요청의 결과, 인출 대상 UTXO들의 위치(해당 블록 넘버와 블록 안에서의 인덱스)는 참여자에게 공개된다.
 +
# Sam의 인출 요청은 챌린지 기간을 거친 후에 처리된다. 이 기간에 플라즈마 체인의 참여자는 누구나 Sam의 인출 요청에 대한 이의 신청을 할 수 있다. 이의 신청이 받아들여지면 Sam의 출금은 취소되고 Sam의 자금 중 일부(fidelity bond)가 이의 신청자(reporter)에게 보상으로 지급된다. 부정 인출의 예로는, 플라즈마 체인의 참여자가 이미 지불된 UTXO에 대한 인출을 요청하는 경우(Double Spending), 플라즈마 오퍼레이터가 자기 소유의 허위 UTXO를 생성하여 블록에 담고 이에 대한 인출을 요청하는 경우 등이 있다.
 +
# 아무도 Sam에게 이의 제기를 하지 않은 경우, Sam의 인출 요청은 또 한 번의 유예 기간을 거친 후 처리된다. 이 기간은 먼저 생성된 UTXO(만약 서로 다른 블록에 담겼다면 height가 더 낮은 블록의 UTXO가 우선, 서로 같은 블록에 담겼다면 index가 더 낮은 UTXO가 우선)에 담긴 자산이 먼저 인출되도록 하기 위해 존재하는 기간이다. 먼저 생성된 UTXO의 양에 따라 유예 기간은 아예 존재하지 않을 수도 있고, 다소 길어질 수도 있다.
 +
# 먼저 생성된 UTXO들이 모두 처리되고 나면, Sam의 UTXO에 기록된 자산들도 인출 처리된다. Sam은 플라즈마 계약에서 인출을 신청한 양 만큼의 ETH(Exit한 곳이 루트 체인이 아니라면 PETH)를 돌려받는다.
 +
# 인출 과정의 결과, 플라즈마 계약에 기록된 ETH(Exit한 곳이 루트 체인이 아니라면 PETH)의 총량이 Sam이 인출한 양 만큼 줄어들고 인출 처리된 UTXO들은 TXO가 된다. 단순 인출 과정에서 이의 제기를 어떻게 하는 것인지 궁금할 수 있다. 이의 제기는 플라즈마 계약에 머클 증명을 함으로써 이루어진다. Periodic Commitment에 의해 상위 체인에 커밋되는 블록 헤더 안에는 [[트랜잭션]] 아웃풋(UTXO 또는 TXO) 머클 트리의 루트 해시가 포함되어 있다. 만약 부정 인출이어서 UTXO가 허위라면, UTXO의 머클 해시가 달라지므로 이 UTXO를 담은 머클 트리의 루트 해시가 플라즈마 계약에 기록된 루트 해시와 다를 것이다. 이 사실을 머클 증명을 통해 입증하는 것이 이의 신청이다. 또한 앞서 플라즈마 계약에는 (P)ETH 총량만이 기록된다고 언급하였다. 플라즈마에서 플라즈마 체인 내부의 거래에 의해 개인의 자산이 어떻게 변화하였는지는 상위 체인에 기록되지 않는다. 그런데도 누구나 잘못된 인출 요청에 대해서는 챌린지를 할 수 있기 때문에, 개인이 실제로 가진 자산 만큼만 인출될 수 있다는 점이 보장된다. 따라서 루트 체인(패런트 체인)에 플라즈마 체인의 모든 내부 거래를 기록할 필요가 없어지고, 총량만을 기록해도 문제가 발생하지 않는다. 다만, 아무도 챌린지를 하지 않으면 부정 인출일 경우에도 인출이 될 수 있음으로, 플라즈마 체인 참여자는 참여하고 있는 체인 및 상위 체인을 잘 감독하여야 한다.
 +
 
 +
* 참여자가 모든 상위 체인을 지켜봐야 할 이유
 +
: 참여자가 상위 체인을 지켜봐야 할 이유는 크게 두 가지이며, 모두 인출 과정과 관련되어 있다. 먼저 상위 체인에 커밋되지 않은 블록에 담긴 UTXO에 대해서는 (설령 거래 당사자들이 컨펌을 했다고 하더라도) 인출 신청을 할 수 없기 때문에 상위 체인을 지켜봐야 한다. 인출 신청은 상위 체인(패런트 체인)의 플라즈마 계약에 하는 것인데, 플라즈마 계약엔 차일드 체인의 최신 블록 넘버가 기록되어 있다. 따라서 그 블록 넘버보다 큰 곳에 있는 UTXO는 애초에 인출 신청이 받아들여지지 않는다. 예를 들어 루트 체인으로 인출 신청을 하기 위해서는, 커밋이 루트 체인까지 최종적으로 제대로 되어 있어야 하고, 제대로 커밋되고 있는지 확인하려면 모든 상위 체인을 지켜봐야 한다. 두 번째 이유는 앞서 언급하였듯 부정 인출을 막기 위해서다. 인출 자체가 상위 체인에 요청되는 것이고, 어떠한 상위 체인에 요청될지 모르는 것이므로, 모든 상위 체인들을 지켜보아야 요청 여부를 알 수 있다.
 +
 
 +
* 단순 인출에서 먼저 생성된 UTXO가 먼저 인출되는 이유
 +
: 그렇다면 먼저 생성된 UTXO가 먼저 인출되는 이유는 무엇일까? 바로 플라즈마 체인의 비잔틴 상황에 대비하기 위함이다.
 +
# 플라즈마 블록 생성자(오퍼레이터) Charlie은 자신 소유로 100 PETH 잔액을 가진 허위 UTXO를 생성해 블록에 담고 인출 요청을 한다.
 +
# 허위 UTXO를 생성했다는 사실을 발견한 플라즈마 체인의 참여자 Alice와 Bob(실제 플라즈마 체인에는 이보다 많은 참여자가 있을 수 있다)는 자신의 자금을 지키기 위해 루트 체인의 플라즈마 계약에 Exit 요청을 보낸다.
 +
# Alice와 Bob의 UTXO가 Charlie의 허위 UTXO보다 먼저 생성되었으므로, 먼저 인출이 된다. Alice와 Bob이 인출을 한 PETH 양 만큼 플라즈마 계약 ETH 총량에서 빠진다.
 +
# Charlie의 인출 차례가 되었지만, 플라즈마 계약에 남은 ETH가 없어 Charlie는 인출할 수 없다. 먼저 생성되는 UTXO가 먼저 인출되기 때문에 권한증명 방식의 오퍼레이터가 비잔틴이어도 참여자들은 자산을 안전하게 보전할 수 있다. 권한증명 방식의 오퍼레이터가 허위 UTXO를 생성해 블록에 담기만 하고 인출은 하지 않을 때도 마찬가지로 그냥 먼저 Exit을 하여 자산을 지키면 된다. 라이트닝 네트워크에서는 부정행위가 발견되면 채널의 현재 정보를 온 체인에 공개하여 챌린지하는 방식으로 이에 대응하였다. 플라즈마의 Exit을 통하면 라이트닝 네트워크처럼 상위 체인에 플라즈마 체인이 비잔틴 상황이라는 사실을 알릴 필요 없이, 간단히 참여자의 자금을 지킬 수 있다. 상위 체인이 비잔틴 상황이어서 더 상위 체인으로 블록 헤더가 제대로 커밋되지 않거나, 참여 체인이 비잔틴 상황에 있거나, 참여 체인에서 부정 인출이 일어나면 그냥 상위 체인 중 제대로 동작하는 체인으로 Exit을 하면 된다. 이것이 루트 체인이 제대로 동작하기만 하면 모든 참여자가 자산을 안전히 보전할 수 있는 이유다. 만약 루트 체인이 제대로 동작하지 않는다면 안전하게 Exit 할 곳이 없는 것이므로, 참여자는 자신의 자산 안전성에 대해 확신할 수 없다.<ref name="블록체인"></ref>
 +
 
 +
====빠른 인출(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되지 않는다면 빠른 인출을 할 수 없기 때문이다. 비잔틴 상황에서는 단순 인출이나 대량 인출을 통해 자금을 인출하여야 한다.<ref name="블록체인"></ref>
 +
 
 +
====대량 인출(Mass Withdrawal)====
 +
대량 인출은 비잔틴 상황에서 활용되는 인출 방식이다. 대량 인출의 동작 방식은 현실 세계의 공동 구매와 유사하다. 인출 작업이 개인마다 따로 이루어지는 단순 인출이나 빠른 인출과는 달리, 대량 인출에서는 한 명이 대량 인출을 오픈하고 다른 사람들은 오픈된 대량 인출에 참여한다.
 +
# 플라즈마 체인이 비잔틴 상황이어서 플라즈마 체인 참여자들은 인출을 하고 싶어 한다. Pat은 이에 따라 대량 인출을 연다. 대량 인출을 위해 Pat은 루트 체인에 존재하는 인출 목적지 플라즈마 체인과 계약을 맺는다. 이 계약의 내용은 Pat이 목적지 플라즈마 체인의 계약에 대량 인출 자금을 보내면, 보낸 만큼 목적지 플라즈마 체인에서 사용 가능한 자금이 생긴다는 것이다.
 +
# Pat은 성공적으로 계약이 맺어졌다는 사실을 공표한다. 이를 확인한 Alice를 비롯한 플라즈마 체인 참여자들은 Pat의 대량 인출에 인출 대상 자금(UTXO)과 서명을 보내 참여한다. Pat은 대량 인출 참여자들에게 일정량의 수수료를 받을 수 있다. 이때 대량 인출은 누구나 열 수 있기 때문에 동시에 여러 개가 열릴 수 있지만, 참여자들은 중복 신청을 해서는 안된다.(중복 신청을 하면 확인 가능하다.)
 +
# 참여자들의 서명을 받은 후 Pat은 충분한 시간에 거쳐 블록을 검증한다. 검증 과정에서 Pat은 각 참여자가 제출한 UTXO들이 사용된 적이 없는지, 제출된 서명이 맞는지 등을 확인한다. 그 후 제출된 서명을 기반으로 대량 인출 [[트랜잭션]]을 생성한다.
 +
# 대량 인출 참여자들은 생성된 대량 인출 [[트랜잭션]]을 다운받은 후, 2차 서명을 한다. 이 서명 작업은 현재까지의 정보가 올바르다는 것을 확인해주는 역할을 한다. Pat은 이 서명 이후에 플라즈마 체인에서 일어나는 부정행위에 대해서는 책임이 없음으로, 처벌받지 않는다. 2차 서명을 제출하면, 앞서 제출한 자신의 자금(UTXO)이 잠기게 된다. 2차 서명하지 않은 참여자는 대량 인출에서 제외된다.
 +
# Pat은 중복 인출을 신청한 참여자가 없는지 확인하고, 중복 인출자가 있다면 대량 인출에서 제외한다. 중복 인출 검증이 끝난 후, Pat은 최종적으로 자신이 서명하여 대량 인출 [[트랜잭션]]을 루트 체인이나 패런트 체인에 공표한다. 공표 시 참여자가 제출한 UTXO들의 머클화 정보, 참여자의 서명 등을 함께 제출하여 Pat의 대량 인출 [[트랜잭션]]이 올바르다는 것을 증명해야 한다.
 +
# 루트 체인이나 패런트 체인의 참여자는 공표된 대량 인출 [[트랜잭션]]을 확인하고, 이의 신청을 할 수 있다. 이러한 이의 신청 과정에는 최대 몇 주가 소요될 수 있으며, 이의 신청이 제기되지 않으면 대량 인출이 완료된다.
 +
 
 +
대량 인출은 앞서 언급하였듯이 필수적이지 않다. 100개의 인출 요청이 모인 1개의 대량 인출 요청과 100개의 개별적인 단순 인출 요청을 비교해 보았을 때, 1개의 대량 인출 요청이 100개의 개별적인 단순 인출 요청보다 데이터의 크기가 작으므로, 전체 네트워크의 측면에서 보았을 때 1개의 대량 인출 요청이 더 이로운 것은 사실이다. 하지만 Alice의 입장에서 보면, 대량 인출은 단순 인출보다 완료되는 데 시간이 훨씬 오래 걸리고 복잡하므로, 비잔틴 상황이라 하더라도 굳이 대량 인출을 통해 인출할 이유가 없다.<ref name="블록체인"></ref>
 +
 
 +
==합의 알고리즘==
 +
앞선 동작 흐름 부분에서는 플라즈마 체인의 합의 [[알고리즘]]이 권한증명 방식이라고 가정하고 서술하였지만, 사실 다른 합의 [[알고리즘]]을 채택하는 것도 가능하다. 다만, 작업증명 방식([[PoW]])은 채택되기 힘든데, 그 이유는 플라즈마 체인의 인출과 [[트랜잭션]] 처리는 Finality를 전제하지만, 작업증명 방식에서는 Finality가 보장되지 않기 때문이다. 더불어 작업증명 방식이 안정성을 확보하기 위해선 기본적으로 많은 수의 채굴자가 필요한데, 플라즈마 체인에서는 그것이 현실적으로 불가능할 수 있다.
 +
 
 +
* 지분증명 방식(Proof of Stake)
 +
: 지분증명 방식([[PoS]])은 해당 암호화폐를 보유하고 있는 지분(Stake)율에 비례하여 의사결정 권한을 주는 방식이다. 이 방식도 작업증명과 마찬가지로 블록이 생성될 때 보상이 지급되는 데 지분에 대한 이자의 개념으로 보상이 지급된다. 다시 말해서 옳다고 생각하는 블록에 투표하면서 자신이 가진 지분(Stake)을 해당 블록에 보여주어 증명하는 것이다.<ref>장경재, 〈[https://medium.com/blockmakers/makers-basic-8-%ED%95%A9%EC%9D%98-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%A7%80%EB%B6%84%EC%A6%9D%EB%AA%85-pos-db21d6c34eb5 (Makers Basic 8) 합의 알고리즘(2)-지분증명(PoS)]〉, 《Medium》, 2018-09-27</ref>
 +
 
 +
* 지분증명 방식의 이점
 +
: 플라즈마 체인에서 비잔틴 상황이 발생해도 대처할 수는 있지만, 대처하는 과정에서 불필요한 비용이 발생할 것이므로 비잔틴 상황이 발생하지 않는 것이 가장 좋을 것이다. 지분증명 방식에서는 여러 명의 스테이커(Staker)가 존재하므로 비잔틴 상황이 일어날 가능성을 권한증명 방식(단일 오퍼레이터일 경우)에 비해 줄일 수 있다.
 +
이와 더불어, 지분증명 방식 플라즈마 체인에서 자체 토큰을 활용한다면 비잔틴 상황의 가능성을 더더욱 줄일 수 있다. 자체 토큰을 활용하는 지분증명 방식에서, 플라즈마 체인의 스테이커들은 토큰을 스테이킹(Staking)한 후 블록을 생성하며, 이에 대한 보상을 자체 토큰으로 받는다. 플라즈마 체인이 비잔틴 상황에 빠지면 토큰의 가치가 하락하게 되므로, 자연스레 플라즈마 체인의 스테이커들이 비잔틴 행동을 할 유인이 줄어들게 된다. 물론 이러한 효과는 ETH를 활용해도 얻을 수는 있겠지만, 자체 토큰과 플라즈마 체인 간의 관계가 ETH와 플라즈마 체인 간의 관계보다 훨씬 직접적이므로 자체 토큰을 활용했을 때 훨씬 큰 효과를 얻을 수 있을 것이다.
 +
 
 +
* 플라즈마 체인의 지분증명 방식과 Block Withholding Attack
 +
: 플라즈마에서는 블록 헤더가 상위 체인에 커밋되는 것이 매우 중요하다. 그런데 만약 플라즈마 체인의 블록 생성자들이 고의로 블록을 더 이상 생성하지 않거나 블록을 생성하고도 공표하지 않으면 블록 헤더가 더 이상 상위 체인에 커밋될 수 없다. 이러한 공격을 Block Withholding Attack(BWH)이라 부른다. 플라즈마에서는 이러한 BWH가 가장 주요한 공격 경로로 다루어진다. 따라서 플라즈마 체인의 지분증명 방식은 51% 어택보다는 BWH를 최소화하는 것에 초점이 맞춰져 있다. 이 목표를 달성하기 위해 플라즈마 체인의 지분증명 방식은 나카모토 합의(비트코인의 합의 [[알고리즘]])의 유인을 차용한다.
 +
나카모토 합의에서는 리더(블록 생성자)를 확률적으로 선출하여 BWH를 막는다. 비트코인에서 A라는 블록 생성자가 특정 블록 높이에서 블록을 생성했다고 가정해보자. A는 리더가 될 확률이 높지만 확신할 수는 없다. 다른 사람들이 동시에 같은 높이의 블록을 생성했을 수 있기 때문이다. A가 생성한 블록이 메인 체인의 블록이 될 것인지는 일정 시간(비트코인에서는 6 컨펌)이 지난 후에야 알 수 있다. 비트코인에서는 가장 긴 체인이 메인 체인이 되는 만큼, A가 해시 파워의 51% 이상을 소유하고 있지 않은 이상 A가 리더가 되기 위해서 취할 수 있는 가장 좋은 방법은 생성하자마자 최대한 빨리 블록을 다른 노드들에 전파(propagate)하는 것이다.
 +
 
 +
* 플라즈마 체인의 지분증명 방식 모델
 +
: 플라즈마 체인의 지분증명 방식 모델을 다루기에 앞서, 먼저 일반적인 지분증명 방식 모델을 생각해보자. 일반적인 지분증명 방식에서는 리더가 확정적이다. 예를 들어, coinage를 활용한 지분증명 방식 모델에서는 (proofhash < coinage)라는 블록 생성 공식이 있음으로, 누구나 풀 노드(Full node)에 질의(Query)를 날려 누가 다음 블록을 생성할 것인지 예측할 수 있다. 만약 단 한 명만이 블록을 생성할 예정인 경우 생성 예정인 블록은 51% 어택이 일어나지 않는 이상 메인 체인에 무조건 포함될 것이다. 그런데 이처럼 리더가 확정적이면 블록 전파를 할 유인이 부족하여 BWH이 일어날 수 있음으로, 플라즈마 체인의 지분증명 방식 모델은 일반적인 지분증명 방식 모델과 달라져야 한다. 그래서 플라즈마 체인의 지분증명 방식에서는 나카모토 합의처럼 리더를 확률적으로 선출하고 블록 전파를 장려하는 장치들을 둔다. 먼저 플라즈마 체인의 지분증명 방식에서 지분 보유자(stake holder)들은 자신들의 기금을 위임받은 스테이커(staker)에게 할당한다. 스테이커들은 지분 보유자를 대신해서 행동할 책임이 있으며, 만약 잘못 행동할 시 지분 보유자들이 트랜젝션 수수료를 받지 못하는 등 불이익을 받게 된다. 스테이커들은 특정 기간동안 활동하게 되며, 스테이커가 되기 위해서는 총 토큰 발행량의 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시킨다. 예를 들어, 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는 자신이 생성한 블록이 리더가 될지 확신할 수 없다. 이는 반대로 말하면, 자신이 생성한 블록이 메인 체인에 포함될 확률이 늘 존재한다는 뜻이다.<ref name="블록체인"></ref>
 +
 
 +
==한계점==
 +
기존 플라즈마 모델에서 가장 중요한 문제로 꼽는 것은 세 가지이다. 첫 번째는 검증에 필요한 리소스가 너무 많다는 것, 두 번째는 거래 승인의 과정이 복잡하다는 것이며 마지막은 operator의 부정행위에 대해선, exit으로 대처할 수밖에 없다는 것이다.
 +
 
 +
* 무거운 검증
 +
: 플라즈마 체인은 아래 그림과 같이 계층 형태의 구조로 이루어져있으며, 각 체인은 독자적인 합의 방식을 가질 수 있다. 독자적인 구조를 가질 수 있단 것은, 지분증명 방식뿐만이 아니라 한 집단에 의해 체인이 관리되는 권한증명 방식의 합의 방식도 가질 수 있단 것이다. 앞선 글에서 이야기한 바와 같이, 다소 중앙화되어있는 합의 방식이 채택되었음에도 플라즈마 체인의 안정성을 보장할 수 있는 이유는 Challenging 시스템에 있다. 누군가 부정한 출금을 시도했을 때, 체인을 관찰하고 있는 누구라도 해당 출금이 부정함을 증명하여 부정 출금을 막을 수 있다. 이러한 장점 덕에, 플라즈마는 무한한 확장을 꿈꿀 수 있다. 그러나 역설적이게도, 이러한 확장성이 검증의 자율성을 헤치며 도리어 무한한 확장성의 발목을 잡는다.
 +
 
 +
* 불편한 거래
 +
: 기존 플라즈마 모델의 두 번째 문제는 거래 승인의 과정이 복잡하다는 것이다. A→B로의 거래가 있을 때,
 +
# A가 A→B의 거래를 생성한다.
 +
# 해당 거래를 operator에게 전달한다.
 +
# operator는 P-chain에서 해당 거래 내용을 담은 블록을 생성한다.
 +
# 부모 chain으로 해당 내용을 올리며, 결과적으로 Root chain까지 내용이 올라가게 된다.
 +
# A는 해당 사실을 확인하고 서명하여 B에게 전달한다.
 +
# B 역시 Root chain을 확인하고 사인을 한다.
 +
# 둘다 사인하고 사인 [[트랜잭션]]이 블록에 담기면 [[트랜잭션]]은 유효해진다.
 +
위 과정은 필요하나, 사용자 입장에서 번거롭다. 더군다나, 거래의 마지막 결정권은 마지막 사인을 하는 사람에게 있기 때문에, 사용 가능한 옵션 문제 역시 생기게 된다. 물론 이는 라이트닝 네트워크의 방법을 차용하면 어느 정도 도움이 될 수 있다고 이전 글에서 서술되었으나, 이 역시 불편함을 야기한다.
 +
 
 +
* 대응책의 부재
 +
: 권한증명 방식의 플라즈마 체인에서 아래의 어택 상황을 가정한다.
 +
# Operator가 자신에게 9999PETH를 주는 부정한 거래 생성
 +
# 해당 정보를 통해 exit을 요청
 +
: 단순한 공격 상황이지만, 기존 모델에선, 참여자는 이 공격 상황을 직접적으로 방어할 수 없었다. 대신 참여자는 operator와 같이 출금 요청을 한다. 여러 출금 요청이 들어온 경우, 플라즈마는 우선순위가 높은 거래부터 출금을 시켜준다. 이때, 이 우선순위란 utxo의 '나이'라고 볼 수 있다. Operator의 부정한 거래보다 참여자가 소지한 utxo가 먼저 생성되었기 때문에 같이 출금 신청을 할 경우, 참여자의 자금부터 출금이 되어 operator의 부정한 출금 요청은 잔액 부족으로 실패하게 된다. 참여자는 공격으로부터 자금을 보호할 수는 있지만, 참여 중이었던 네트워크는 마비된다. 만일, 이 네트워크와 교류가 많은 이웃 네트워크가 있다고 한다면 피해는 확산할 것이다. 가장 좋은 방법은, operator의 부정 출금을 맞 출금으로 대응하는 것이 아닌, 해당 출금을 취소시키는 것이다.<ref name="한계점과 캐시">Jihyeok Choy, 〈[https://medium.com/decipher-media/%EB%B8%94%EB%A1%9D%EC%B2%B4%EC%9D%B8-%ED%99%95%EC%9E%A5%EC%84%B1-%EC%86%94%EB%A3%A8%EC%85%98-%EC%8B%9C%EB%A6%AC%EC%A6%88-2-3-plasma-cash-89bd7993d44f 블록체인 확장성 솔루션 시리즈 2–3 :: Plasma Cash]〉, 《Medium》, 2018-05-03</ref>
 +
 
 +
==플라즈마 캐시==
 +
[[플라즈마 캐시]]가 기존 플라즈마 모델과 다른 점은 id와 양이 적혀 있고, 분할, 병합이 불가능한 [[플라즈마 캐시]]를 플라즈마 알고리즘에서 사용한다는 것이다.
 +
 
 +
* 플라즈마 캐시의 생성
 +
: 고유한 id와 양을 가지는 플라즈마 캐시의 생성은 deposit에서 이루어진다.
 +
# A가 P-chain으로 1ETH를 deposit한다.
 +
# A의 1ETH는 플라즈마 체인에 lock 된다.
 +
# 루트 체인에서 새로운 id를 생성하고 그 id와 가치(1ETH)가 매핑된다.
 +
# 체인 내에서는 그 id와 1ETH의 가치를 가지는 [[플라즈마 캐시]]가 생성되어 A가 이 소유권을 가지고 있다.
 +
: 위 과정으로부터 플라즈마 체인내에서 사용될 수 있는 [[플라즈마 캐시]]가 생성되며, 이는 대체 불가능(non-fungible)한 특성을 보인다.
 +
 
 +
* 플라즈마 캐시의 머클트리
 +
: 플라즈마 체인의 블록은 이제 다른 방식으로 거래를 저장한다. 기존의 모델에서는, 비트코인의 utxo 모델과 같이 거래를 머클화 시켜 저장했다. 또한, utxo 모델이기에 이 거랫값이 곧 새로운 token이 되었다. [[플라즈마 캐시]]를 도입했을 때, 블록에 담겨 머클화 되는 정보는 거래가 아닌 거래에 사용된 토큰과 새로운 주인이다. 즉, 토큰의 상태 변화를 머클 트리에 담는다고 할 수 있다. 누군가 조작을 위해 Address, 혹은 Id를 바꿀 경우 Root Hash역시 변화하여 담긴 정보가 다름을 쉽게 파악 할 수 있다. 또한, utxo 모델과 다르게, 거래와 상관없이 토큰의 양과 id는 불변이기에, 새로운 utxo도 이전과 같은 id를 가지고 있다.
 +
 
 +
* 토큰의 소비
 +
: [[플라즈마 캐시]]를 소비하기 위해서는 다음 두 가지 정보가 필요하다.
 +
# 해당 id의 토큰이 소비된 이전 모든 거래 기록
 +
# 해당 id의 토큰이 소비되지 않은 이전 모든 블록에 대해, 각 블록의 머클 트리에 해당 id의 토큰이 포함되지 않았음을 보여주는 증명
 +
: 플라즈마 체인 위 [[플라즈마 캐시]]의 생성, 저장, 거래 과정에서 기존 모델과 다른 특징을 갖고 있다.<ref name="한계점과 캐시"></ref>
 +
 
 +
==최소기능제품(MVP)==
 +
2018년 1월, 가능한 단순화된 플라즈마의 개발을 위해 기본적인 보안성만을 제공하는 [[최소기능제품]](Minimal Viable Plasma)이 제시되었다. [[최소기능제품]]은 크게 세 가지 요소로 나누어 볼 수 있다. 우선 이더리움 메인넷에는 플라즈마 체인의 관리를 담당하는 플라즈마 계약(plasma contract)이 위치하고, 플라즈마 체인에서는 플라즈마 블록을 생성하고 머클 루트(Merkle root) 값을 메인넷으로 지속적으로 전송하는 오퍼레이터가 있으며, 이 플라즈마 체인을 이용하여 [[트랜잭션]]을 발생시키려는 유저들이 있다. 일반적인 사이드체인을 이용한 인터체인 확장성 솔루션과 플라즈마를 구분 짓는 가장 큰 핵심은 메인넷과 사이드체인 사이의 연결 관계이다. 일반적인 인터체인 솔루션에서는 메인넷과 사이드체인이 비교적 동등한 관계에서 교류가 일어나며, 각각의 체인이 그 자체로 충분한 안전성을 제공해야 한다. 반면 플라즈마에서는 메인넷의 플라즈마 계약을 통하여 플라즈마 체인이 메인넷에 종속된 형태를 가지며, 플라즈마 체인의 안전성은 메인넷에 의존적이다. 새로운 플라즈마 블록이 생성될 때는 이 플라즈마 체인에 참여하고 있는 노드들과 플라즈마 블록을 공유하지만, 메인넷에는 블록의 루트 값만을 플라즈마 계약에 저장한다. 따라서 플라즈마 체인의 일종의 압축된 정보만이 메인넷에 저장되기 때문에 메인넷 단독으로 존재할 때와 비교하여 더 많은 수의 [[트랜잭션]]을 병렬적으로 처리할 수 있고, 메인넷 사용 비용 절감의 효과를 얻을 수 있으며, 단일 오퍼레이터가 블록 생성 권한을 가지면서 발생할 수 있는 악의적인 행동을 메인넷에서 사후 검증할 수 있게 된다. 플라즈마 계약은 메인넷에서 플라즈마 체인을 관리하는 역할을 하며, [[최소기능제품]]에서는 기본적으로 다음의 함수들이 담겨있다.
 +
 
 +
* submitBlock : 오퍼레이터가 생성한 블록의 머클 루트를 받아서 저장한다.
 +
* deposit : 새로운 이용자가 플라즈마 체인에 참여하려 할 때 예치금(deposit)을 저장한다.
 +
* startExit : 플라즈마 체인에 있는 특정 UTXO(unspent transaction output)를 인출한다.
 +
* challengeExit : 정당하지 못한 인출 시도를 막는다.
 +
 
 +
오퍼레이터는 플라즈마 체인에서 블록을 생성하는 일종의 권한증명(Proof of Authority) 방식의 단일 채굴자 노드로 볼 수 있다. 기존 플라즈마 백서에서는 다수의 오퍼레이터들이 합의 [[알고리즘]]에 따라 플라즈마 블록을 생성하는 디자인을 제시하고 있으나, [[최소기능제품]]에서는 합의 [[알고리즘]]을 도입함에 따라 발생하는 복잡성을 일단은 배제하기 위해 단일 오퍼레이터에게 블록 생성 권한을 주는 상황을 상정하고 있다. 따라서 오퍼레이터는 플라즈마 체인상에서 발생하는 [[트랜잭션]]들을 모아 블록을 생성하고, 블록의 머클 루트를 플라즈마 계약에 보내어 저장하는 역할을 맡는다. 새로운 유저가 플라즈마 체인에 참여하기 위해서는, 플라즈마 체인에서 사용할 자신의 코인을 플라즈마 계약으로 전송한다. 계약에서는 이용자가 보내준 예치금을 저장하고, 해당 값만큼의 UTXO(unspent transaction output)를 생성하는 블록을 플라즈마 체인에 추가한다. 유저는 이 이후부터 자신의 UTXO를 이용하여 플라즈마 체인 내부에서 [[트랜잭션]]을 발생시키고 이를 오퍼레이터를 통해 플라즈마 블록에 기록하여 승인받게 된다. [[최소기능제품]]에서의 [[트랜잭션]]은 2개의 input, 2개의 output으로 이루어진 가장 단순한 구조를 갖는다. 각 블록에는 2¹⁶개의 [[트랜잭션]]이 담길 수 있고, 따라서 depth-16의 머클 트리 루트가 플라즈마 계약에 담기게 된다. 실제로 A가 B에게 UTXO를 보내는 [[트랜잭션]]을 생성하려면 다음과 같은 절차가 이루어진다.
 +
 
 +
* A가 B의 주소(address)를 묻는다.
 +
* A의 UTXO들을 B의 주소로 보내는 [[트랜잭션]]을 생성하여 블록 생성자에게 보낸다.
 +
# A의 UTXO 정보: blknum, txindex, oindex
 +
# A의 서명: sig
 +
# B의 주소: newowner
 +
# 보내는 UTXO의 크기: denom
 +
* [[트랜잭션]]이 블록에서 확정되기를 기다린다.
 +
* 서명된 확정(confirm) 메시지를 생성하여 B에게 발송한다.
 +
 
 +
유저가 자신의 UTXO를 메인넷으로 인출하고자 할 때는, 플라즈마 계약의 startExit 함수를 호출한다. 인출이 요청된 UTXO는 우선 계약의 우선순위 대기열에 저장되어있다가, 해당 UTXO가 14일 이상 지나게 되면 과거에 발생한 UTXO부터 순차적으로 메인넷으로 인출해준다. 이 기간은 정당하지 못한 UTXO에 대한 인출 시도를 막기 위한 이의제기(challenge) 기간인데, 이미 사용된 TXO(spent transaction output)를 인출하려는 시도를 관찰한 다른 이용자는 플라즈마 계약의 challengeExit 함수를 호출한다. 이때, 해당 TXO가 사용된 [[트랜잭션]]에 대한 증거를 함께 제공함으로써 플라즈마 계약은 UTXO가 사용됐는지 여부를 확인할 수 있다. [[최소기능제품]]은 플라즈마 구현을 위한 가능한 단순한 디자인을 제시했지만, 아직 고려해야 할 문제점들이 남아있다.
  
 +
# 플라즈마 체인 상에서 오퍼레이터로 인한 문제가 발생할 경우, [[최소기능제품]] 이용자는 플라즈마 체인을 빠져나오는 것이 유일한 방법이다. 특히 단일 오퍼레이터를 가정하고 있는 [[최소기능제품]]에서는 오퍼레이터가 가짜 [[트랜잭션]]을 생성하여 자신에게 임의의 UTXO를 생성한 후 인출을 시도할 수 있다. 플라즈마 체인의 모든 정보를 일일이 확인할 수 없는 플라즈마 계약에서는 UTXO가 정당한지 여부를 알 수 없기 때문에, 계약에 예치된 금액을 오퍼레이터가 가져가고, 따라서 일반 이용자들이 자신의 자산을 온전히 돌려받을 수 없게 된다. 따라서 [[최소기능제품]] 이용자들은 가짜 UTXO가 생성된다면, 플라즈마 체인에서의 모든 활동을 멈추고 자신의 UTXO를 1주일 이내에 인출을 시도해야 손해를 피할 수 있다. 그뿐만 아니라 오퍼레이터가 새로 생성된 블록을 이용자에게 공유하지 않는 경우에도, 이용자의 입장에서는 플라즈마 체인을 빠져나오는 것이 안전한 방법이다.
 +
# [[최소기능제품]] 이용자는 적어도 일주일에 한 번 이상은 플라즈마 체인 상의 모든 새로운 [[트랜잭션]]들을 검증해야 하며, 메인넷의 플라즈마 계약에 요청된 인출 요청까지도 확인하고 있어야 한다는 부담을 갖는다. 플라즈마 체인을 지속적으로 검증해야 문제가 발생하는지 여부를 확인할 수 있으며, 메인넷의 플라즈마 계약을 관찰해야 악의적인 이용자가 TXO를 인출하려는지를 확인하고 이의제기를 할 수 있다.
 +
# 악의적인 이용자가 플라즈마 체인에서 이미 사용된 TXO를 인출하려고 시도하는 경우에는 다른 이용자가 이를 확인하고 이의제기를 수행해야 하는데, 이 과정에서 이용자들 간에 일종의 눈치싸움이 발생할 수 있다. [[최소기능제품]]에서는 악의적인 이용자에 의해 TXO가 인출되면, 다음에 나머지 이용자들이 인출을 시도할 때 플라즈마 계약의 잔액이 부족해서 누군가는 자신의 자산을 인출하지 못하는 사태가 일어날 수 있다. 따라서 모든 이용자가 플라즈마 계약에서 부정한 TXO 인출이 일어나지 못하게 감시를 하고 있어야 하고, 모두가 플라즈마 블록 정보를 가지고 있기에 이의제기를 할 정보를 가지고 있다. 그러나 반대로 살펴보면, 어느 한 이용자가 이의제기해야 할 의무를 갖지 않지만, 심지어 이의제기를 위해서는 자신의 자산에서 메인넷의 가스 사용료(gas fee)를 부담해야 한다. 또한 TXO 인출을 막지 않더라도, 플라즈마 계약의 잔액이 다 떨어지기 전에 이용자가 자신의 자산을 인출하면, 본인은 손해를 보지 않기 때문에 이기적인 행동을 할 수도 있다.
 +
# [[최소기능제품]] 이용자가 플라즈마 체인을 빠져나오거나(exit), 이의제기할 때는 메인넷에서 [[트랜잭션]]을 발생시켜야 하는데, 메인넷의 [[트랜잭션]] 처리량이 충분하지 못하여 모든 [[트랜잭션]]을 처리하지 못하거나 가스(gas)값이 비정상적으로 높은 상황에서는 [[최소기능제품]] 이용자가 손해를 입게 될 수 있다. 특히 플라즈마 체인에서 문제가 발생하거나 TXO 인출이 시도되는 경우에는, 7일이 지나기 전에 exit 혹은 이의제기 [[트랜잭션]]을 발생시켜야 하고, 이 기간 내에 성공하지 못하면 손해를 입게 된다.
 +
# 임의의 A가 B에게 UTXO를 전송하는 [[트랜잭션]]을 발생시킬 때 완료될 때까지의 절차가 복잡하다. A는 [[트랜잭션]]을 생성하여 오퍼레이터가 블록에 포함하도록 해야 하며, 블록의 머클 루트가 메인넷에 포함됐는지를 확인하고, 해당 블록까지의 모든 블록이 정당한지(validity)를 확인하여, 확정 메시지를 B에게 전달해야 [[트랜잭션]]이 완료된다.<ref name="개요"></ref>
  
 
{{각주}}
 
{{각주}}
  
 
== 참고자료 ==
 
== 참고자료 ==
 +
* ''Joseph Poon, Vitalik Buterin'', 〈[https://plasma.io/plasma.pdf?source=post_page--------------------------- ''Plasma: Scalable Autonomous Smart Contracts'']〉, 《PLASMA.IO》, 2017-08-11
 +
* Gong Hyuncheol, 〈[https://medium.com/decipher-media/%EB%B8%94%EB%A1%9D%EC%B2%B4%EC%9D%B8-%ED%99%95%EC%9E%A5%EC%84%B1-%EC%86%94%EB%A3%A8%EC%85%98-%EC%8B%9C%EB%A6%AC%EC%A6%88-2-1-plasma-overview-7e6875f4c20d 블록체인 확장성 솔루션 시리즈 2-1 :: Plasma Overview]〉, 《Medium》, 2018-04-26
 +
* Jihyeok Choy, 〈[https://medium.com/decipher-media/%EB%B8%94%EB%A1%9D%EC%B2%B4%EC%9D%B8-%ED%99%95%EC%9E%A5%EC%84%B1-%EC%86%94%EB%A3%A8%EC%85%98-%EC%8B%9C%EB%A6%AC%EC%A6%88-2-3-plasma-cash-89bd7993d44f 블록체인 확장성 솔루션 시리즈 2–3 :: Plasma Cash]〉, 《Medium》, 2018-05-03
 +
* Daniel Dongyeon Woo, 〈[https://medium.com/hashed-kr/plasma-review-90dd031086a0 플라즈마 리뷰]〉, 《Medium》, 2018-09-12
 +
* 장경재, 〈[https://medium.com/blockmakers/makers-basic-8-%ED%95%A9%EC%9D%98-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%A7%80%EB%B6%84%EC%A6%9D%EB%AA%85-pos-db21d6c34eb5 (Makers Basic 8) 합의 알고리즘(2)-지분증명(PoS)]〉, 《Medium》, 2018-09-27
 +
* easyblockchain, 〈[https://banksalad.com/contents/%EC%89%BD%EA%B2%8C-%EC%84%A4%EB%AA%85%ED%95%98%EB%8A%94-%EB%B8%94%EB%A1%9D%EC%B2%B4%EC%9D%B8-%EC%A7%80%EB%B6%84%EC%A6%9D%EB%AA%85%EC%9D%B4%EB%9E%80-lr7RH 쉽게 설명하는 블록체인 : 지분증명이란?]〉, 《뱅크샐러드》, 2018-06-15
 +
 
== 같이 보기 ==
 
== 같이 보기 ==
 
* [[체인 알고리즘]]
 
* [[체인 알고리즘]]
 +
* [[플라즈마체인]]
 
* [[플라즈마캐시]]
 
* [[플라즈마캐시]]
 
* [[비탈릭 부테린]]
 
* [[비탈릭 부테린]]
36번째 줄: 190번째 줄:
 
* [[정순형]]
 
* [[정순형]]
 
* [[블록체인]]
 
* [[블록체인]]
 +
* [[트랜잭션]]
 +
* [[알고리즘]]
 
* [[앵커]]
 
* [[앵커]]
 +
* [[PoS]]
 +
* [[PoA]]
 +
* [[PoW]]
 +
* [[최소기능제품]]
 +
* [[플라즈마]]
 
* [[플라즈마 물질]]
 
* [[플라즈마 물질]]
  
{{블록체인 기술|토막글}}
+
{{블록체인 기술|검토 필요}}

2021년 8월 28일 (토) 00:56 기준 최신판

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

개요[편집]

플라즈마 알고리즘은 조셉 푼(Joseph Poon)과 비탈릭 부테린(Vitalik Buterin)이 함께 제시한 이더리움 확장성 솔루션이며, 이더리움 메인넷을 부모 체인(parent chain)으로 보고 이에 종속되는 자식 체인(child chain)을 생성하여 기존에 이더리움 메인넷에서만 발생하던 트랜잭션을 자식 체인에서도 생성할 수 있게 함으로써 이더리움 네트워크 전체의 단위 시간당 트랜잭션 처리량을 증가시킬 수 있다는 개념이다. 이를 활용하면 단순하게는 이더리움 메인넷을 부모 체인으로 하는 다수의 자식 체인을 생성할 수도 있지만, 자식 체인들이 또 다른 손자/손녀 체인들의 부모 체인이 되는 계층적(hierarchical)인 구조로 반복적으로 확장이 가능하기에 이론적으로는 단위 시간당 트랜잭션 처리량을 무한히 향상할 수 있다. 물론 플라즈마체인 간 자금의 이동에는 긴 시간이 소요되고, 깊은 계층에서 생성된 트랜잭션은 확정까지 걸리는 시간이 오래 걸리는 등, 무한한 확장성은 아직은 현실적이지 않다.[1]

도입 배경[편집]

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

용어[편집]

플라즈마(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)일 때의 블록 생성자를 일컫는다. 플라즈마 동작 흐름은 단 한 명의 오퍼레이터가 존재한다는 가정하에 서술할 예정이다. 플라즈마에서 오퍼레이터나 지분증명 방식 스테이커(Staker)는 블록을 생성하는 일뿐만 아니라 블록의 헤더를 패런트 체인에 커밋하는 일을 담당한다.
  • PETH(Plasma ETH)
플라즈마 체인에 deposit된 ETH를 말한다. 루트 체인의 ETH와 구분하기 위해 편의상 PETH라 칭한다.[2]

동작원리[편집]

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

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를 소유하게 된다.[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번의 컨펌은 부정행위를 방지하기 위해 설계된 장치이다.[2]

Periodic Commitments[편집]

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

Exit Process[편집]

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

단순 인출(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가 먼저 인출되기 때문에 권한증명 방식의 오퍼레이터가 비잔틴이어도 참여자들은 자산을 안전하게 보전할 수 있다. 권한증명 방식의 오퍼레이터가 허위 UTXO를 생성해 블록에 담기만 하고 인출은 하지 않을 때도 마찬가지로 그냥 먼저 Exit을 하여 자산을 지키면 된다. 라이트닝 네트워크에서는 부정행위가 발견되면 채널의 현재 정보를 온 체인에 공개하여 챌린지하는 방식으로 이에 대응하였다. 플라즈마의 Exit을 통하면 라이트닝 네트워크처럼 상위 체인에 플라즈마 체인이 비잔틴 상황이라는 사실을 알릴 필요 없이, 간단히 참여자의 자금을 지킬 수 있다. 상위 체인이 비잔틴 상황이어서 더 상위 체인으로 블록 헤더가 제대로 커밋되지 않거나, 참여 체인이 비잔틴 상황에 있거나, 참여 체인에서 부정 인출이 일어나면 그냥 상위 체인 중 제대로 동작하는 체인으로 Exit을 하면 된다. 이것이 루트 체인이 제대로 동작하기만 하면 모든 참여자가 자산을 안전히 보전할 수 있는 이유다. 만약 루트 체인이 제대로 동작하지 않는다면 안전하게 Exit 할 곳이 없는 것이므로, 참여자는 자신의 자산 안전성에 대해 확신할 수 없다.[2]

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

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

대량 인출은 앞서 언급하였듯이 필수적이지 않다. 100개의 인출 요청이 모인 1개의 대량 인출 요청과 100개의 개별적인 단순 인출 요청을 비교해 보았을 때, 1개의 대량 인출 요청이 100개의 개별적인 단순 인출 요청보다 데이터의 크기가 작으므로, 전체 네트워크의 측면에서 보았을 때 1개의 대량 인출 요청이 더 이로운 것은 사실이다. 하지만 Alice의 입장에서 보면, 대량 인출은 단순 인출보다 완료되는 데 시간이 훨씬 오래 걸리고 복잡하므로, 비잔틴 상황이라 하더라도 굳이 대량 인출을 통해 인출할 이유가 없다.[2]

합의 알고리즘[편집]

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

  • 지분증명 방식(Proof of Stake)
지분증명 방식(PoS)은 해당 암호화폐를 보유하고 있는 지분(Stake)율에 비례하여 의사결정 권한을 주는 방식이다. 이 방식도 작업증명과 마찬가지로 블록이 생성될 때 보상이 지급되는 데 지분에 대한 이자의 개념으로 보상이 지급된다. 다시 말해서 옳다고 생각하는 블록에 투표하면서 자신이 가진 지분(Stake)을 해당 블록에 보여주어 증명하는 것이다.[3]
  • 지분증명 방식의 이점
플라즈마 체인에서 비잔틴 상황이 발생해도 대처할 수는 있지만, 대처하는 과정에서 불필요한 비용이 발생할 것이므로 비잔틴 상황이 발생하지 않는 것이 가장 좋을 것이다. 지분증명 방식에서는 여러 명의 스테이커(Staker)가 존재하므로 비잔틴 상황이 일어날 가능성을 권한증명 방식(단일 오퍼레이터일 경우)에 비해 줄일 수 있다.

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

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

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

  • 플라즈마 체인의 지분증명 방식 모델
플라즈마 체인의 지분증명 방식 모델을 다루기에 앞서, 먼저 일반적인 지분증명 방식 모델을 생각해보자. 일반적인 지분증명 방식에서는 리더가 확정적이다. 예를 들어, coinage를 활용한 지분증명 방식 모델에서는 (proofhash < coinage)라는 블록 생성 공식이 있음으로, 누구나 풀 노드(Full node)에 질의(Query)를 날려 누가 다음 블록을 생성할 것인지 예측할 수 있다. 만약 단 한 명만이 블록을 생성할 예정인 경우 생성 예정인 블록은 51% 어택이 일어나지 않는 이상 메인 체인에 무조건 포함될 것이다. 그런데 이처럼 리더가 확정적이면 블록 전파를 할 유인이 부족하여 BWH이 일어날 수 있음으로, 플라즈마 체인의 지분증명 방식 모델은 일반적인 지분증명 방식 모델과 달라져야 한다. 그래서 플라즈마 체인의 지분증명 방식에서는 나카모토 합의처럼 리더를 확률적으로 선출하고 블록 전파를 장려하는 장치들을 둔다. 먼저 플라즈마 체인의 지분증명 방식에서 지분 보유자(stake holder)들은 자신들의 기금을 위임받은 스테이커(staker)에게 할당한다. 스테이커들은 지분 보유자를 대신해서 행동할 책임이 있으며, 만약 잘못 행동할 시 지분 보유자들이 트랜젝션 수수료를 받지 못하는 등 불이익을 받게 된다. 스테이커들은 특정 기간동안 활동하게 되며, 스테이커가 되기 위해서는 총 토큰 발행량의 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시킨다. 예를 들어, 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는 자신이 생성한 블록이 리더가 될지 확신할 수 없다. 이는 반대로 말하면, 자신이 생성한 블록이 메인 체인에 포함될 확률이 늘 존재한다는 뜻이다.[2]

한계점[편집]

기존 플라즈마 모델에서 가장 중요한 문제로 꼽는 것은 세 가지이다. 첫 번째는 검증에 필요한 리소스가 너무 많다는 것, 두 번째는 거래 승인의 과정이 복잡하다는 것이며 마지막은 operator의 부정행위에 대해선, exit으로 대처할 수밖에 없다는 것이다.

  • 무거운 검증
플라즈마 체인은 아래 그림과 같이 계층 형태의 구조로 이루어져있으며, 각 체인은 독자적인 합의 방식을 가질 수 있다. 독자적인 구조를 가질 수 있단 것은, 지분증명 방식뿐만이 아니라 한 집단에 의해 체인이 관리되는 권한증명 방식의 합의 방식도 가질 수 있단 것이다. 앞선 글에서 이야기한 바와 같이, 다소 중앙화되어있는 합의 방식이 채택되었음에도 플라즈마 체인의 안정성을 보장할 수 있는 이유는 Challenging 시스템에 있다. 누군가 부정한 출금을 시도했을 때, 체인을 관찰하고 있는 누구라도 해당 출금이 부정함을 증명하여 부정 출금을 막을 수 있다. 이러한 장점 덕에, 플라즈마는 무한한 확장을 꿈꿀 수 있다. 그러나 역설적이게도, 이러한 확장성이 검증의 자율성을 헤치며 도리어 무한한 확장성의 발목을 잡는다.
  • 불편한 거래
기존 플라즈마 모델의 두 번째 문제는 거래 승인의 과정이 복잡하다는 것이다. A→B로의 거래가 있을 때,
  1. A가 A→B의 거래를 생성한다.
  2. 해당 거래를 operator에게 전달한다.
  3. operator는 P-chain에서 해당 거래 내용을 담은 블록을 생성한다.
  4. 부모 chain으로 해당 내용을 올리며, 결과적으로 Root chain까지 내용이 올라가게 된다.
  5. A는 해당 사실을 확인하고 서명하여 B에게 전달한다.
  6. B 역시 Root chain을 확인하고 사인을 한다.
  7. 둘다 사인하고 사인 트랜잭션이 블록에 담기면 트랜잭션은 유효해진다.

위 과정은 필요하나, 사용자 입장에서 번거롭다. 더군다나, 거래의 마지막 결정권은 마지막 사인을 하는 사람에게 있기 때문에, 사용 가능한 옵션 문제 역시 생기게 된다. 물론 이는 라이트닝 네트워크의 방법을 차용하면 어느 정도 도움이 될 수 있다고 이전 글에서 서술되었으나, 이 역시 불편함을 야기한다.

  • 대응책의 부재
권한증명 방식의 플라즈마 체인에서 아래의 어택 상황을 가정한다.
  1. Operator가 자신에게 9999PETH를 주는 부정한 거래 생성
  2. 해당 정보를 통해 exit을 요청
단순한 공격 상황이지만, 기존 모델에선, 참여자는 이 공격 상황을 직접적으로 방어할 수 없었다. 대신 참여자는 operator와 같이 출금 요청을 한다. 여러 출금 요청이 들어온 경우, 플라즈마는 우선순위가 높은 거래부터 출금을 시켜준다. 이때, 이 우선순위란 utxo의 '나이'라고 볼 수 있다. Operator의 부정한 거래보다 참여자가 소지한 utxo가 먼저 생성되었기 때문에 같이 출금 신청을 할 경우, 참여자의 자금부터 출금이 되어 operator의 부정한 출금 요청은 잔액 부족으로 실패하게 된다. 참여자는 공격으로부터 자금을 보호할 수는 있지만, 참여 중이었던 네트워크는 마비된다. 만일, 이 네트워크와 교류가 많은 이웃 네트워크가 있다고 한다면 피해는 확산할 것이다. 가장 좋은 방법은, operator의 부정 출금을 맞 출금으로 대응하는 것이 아닌, 해당 출금을 취소시키는 것이다.[4]

플라즈마 캐시[편집]

플라즈마 캐시가 기존 플라즈마 모델과 다른 점은 id와 양이 적혀 있고, 분할, 병합이 불가능한 플라즈마 캐시를 플라즈마 알고리즘에서 사용한다는 것이다.

  • 플라즈마 캐시의 생성
고유한 id와 양을 가지는 플라즈마 캐시의 생성은 deposit에서 이루어진다.
  1. A가 P-chain으로 1ETH를 deposit한다.
  2. A의 1ETH는 플라즈마 체인에 lock 된다.
  3. 루트 체인에서 새로운 id를 생성하고 그 id와 가치(1ETH)가 매핑된다.
  4. 체인 내에서는 그 id와 1ETH의 가치를 가지는 플라즈마 캐시가 생성되어 A가 이 소유권을 가지고 있다.
위 과정으로부터 플라즈마 체인내에서 사용될 수 있는 플라즈마 캐시가 생성되며, 이는 대체 불가능(non-fungible)한 특성을 보인다.
  • 플라즈마 캐시의 머클트리
플라즈마 체인의 블록은 이제 다른 방식으로 거래를 저장한다. 기존의 모델에서는, 비트코인의 utxo 모델과 같이 거래를 머클화 시켜 저장했다. 또한, utxo 모델이기에 이 거랫값이 곧 새로운 token이 되었다. 플라즈마 캐시를 도입했을 때, 블록에 담겨 머클화 되는 정보는 거래가 아닌 거래에 사용된 토큰과 새로운 주인이다. 즉, 토큰의 상태 변화를 머클 트리에 담는다고 할 수 있다. 누군가 조작을 위해 Address, 혹은 Id를 바꿀 경우 Root Hash역시 변화하여 담긴 정보가 다름을 쉽게 파악 할 수 있다. 또한, utxo 모델과 다르게, 거래와 상관없이 토큰의 양과 id는 불변이기에, 새로운 utxo도 이전과 같은 id를 가지고 있다.
  • 토큰의 소비
플라즈마 캐시를 소비하기 위해서는 다음 두 가지 정보가 필요하다.
  1. 해당 id의 토큰이 소비된 이전 모든 거래 기록
  2. 해당 id의 토큰이 소비되지 않은 이전 모든 블록에 대해, 각 블록의 머클 트리에 해당 id의 토큰이 포함되지 않았음을 보여주는 증명
플라즈마 체인 위 플라즈마 캐시의 생성, 저장, 거래 과정에서 기존 모델과 다른 특징을 갖고 있다.[4]

최소기능제품(MVP)[편집]

2018년 1월, 가능한 단순화된 플라즈마의 개발을 위해 기본적인 보안성만을 제공하는 최소기능제품(Minimal Viable Plasma)이 제시되었다. 최소기능제품은 크게 세 가지 요소로 나누어 볼 수 있다. 우선 이더리움 메인넷에는 플라즈마 체인의 관리를 담당하는 플라즈마 계약(plasma contract)이 위치하고, 플라즈마 체인에서는 플라즈마 블록을 생성하고 머클 루트(Merkle root) 값을 메인넷으로 지속적으로 전송하는 오퍼레이터가 있으며, 이 플라즈마 체인을 이용하여 트랜잭션을 발생시키려는 유저들이 있다. 일반적인 사이드체인을 이용한 인터체인 확장성 솔루션과 플라즈마를 구분 짓는 가장 큰 핵심은 메인넷과 사이드체인 사이의 연결 관계이다. 일반적인 인터체인 솔루션에서는 메인넷과 사이드체인이 비교적 동등한 관계에서 교류가 일어나며, 각각의 체인이 그 자체로 충분한 안전성을 제공해야 한다. 반면 플라즈마에서는 메인넷의 플라즈마 계약을 통하여 플라즈마 체인이 메인넷에 종속된 형태를 가지며, 플라즈마 체인의 안전성은 메인넷에 의존적이다. 새로운 플라즈마 블록이 생성될 때는 이 플라즈마 체인에 참여하고 있는 노드들과 플라즈마 블록을 공유하지만, 메인넷에는 블록의 루트 값만을 플라즈마 계약에 저장한다. 따라서 플라즈마 체인의 일종의 압축된 정보만이 메인넷에 저장되기 때문에 메인넷 단독으로 존재할 때와 비교하여 더 많은 수의 트랜잭션을 병렬적으로 처리할 수 있고, 메인넷 사용 비용 절감의 효과를 얻을 수 있으며, 단일 오퍼레이터가 블록 생성 권한을 가지면서 발생할 수 있는 악의적인 행동을 메인넷에서 사후 검증할 수 있게 된다. 플라즈마 계약은 메인넷에서 플라즈마 체인을 관리하는 역할을 하며, 최소기능제품에서는 기본적으로 다음의 함수들이 담겨있다.

  • submitBlock : 오퍼레이터가 생성한 블록의 머클 루트를 받아서 저장한다.
  • deposit : 새로운 이용자가 플라즈마 체인에 참여하려 할 때 예치금(deposit)을 저장한다.
  • startExit : 플라즈마 체인에 있는 특정 UTXO(unspent transaction output)를 인출한다.
  • challengeExit : 정당하지 못한 인출 시도를 막는다.

오퍼레이터는 플라즈마 체인에서 블록을 생성하는 일종의 권한증명(Proof of Authority) 방식의 단일 채굴자 노드로 볼 수 있다. 기존 플라즈마 백서에서는 다수의 오퍼레이터들이 합의 알고리즘에 따라 플라즈마 블록을 생성하는 디자인을 제시하고 있으나, 최소기능제품에서는 합의 알고리즘을 도입함에 따라 발생하는 복잡성을 일단은 배제하기 위해 단일 오퍼레이터에게 블록 생성 권한을 주는 상황을 상정하고 있다. 따라서 오퍼레이터는 플라즈마 체인상에서 발생하는 트랜잭션들을 모아 블록을 생성하고, 블록의 머클 루트를 플라즈마 계약에 보내어 저장하는 역할을 맡는다. 새로운 유저가 플라즈마 체인에 참여하기 위해서는, 플라즈마 체인에서 사용할 자신의 코인을 플라즈마 계약으로 전송한다. 계약에서는 이용자가 보내준 예치금을 저장하고, 해당 값만큼의 UTXO(unspent transaction output)를 생성하는 블록을 플라즈마 체인에 추가한다. 유저는 이 이후부터 자신의 UTXO를 이용하여 플라즈마 체인 내부에서 트랜잭션을 발생시키고 이를 오퍼레이터를 통해 플라즈마 블록에 기록하여 승인받게 된다. 최소기능제품에서의 트랜잭션은 2개의 input, 2개의 output으로 이루어진 가장 단순한 구조를 갖는다. 각 블록에는 2¹⁶개의 트랜잭션이 담길 수 있고, 따라서 depth-16의 머클 트리 루트가 플라즈마 계약에 담기게 된다. 실제로 A가 B에게 UTXO를 보내는 트랜잭션을 생성하려면 다음과 같은 절차가 이루어진다.

  • A가 B의 주소(address)를 묻는다.
  • A의 UTXO들을 B의 주소로 보내는 트랜잭션을 생성하여 블록 생성자에게 보낸다.
  1. A의 UTXO 정보: blknum, txindex, oindex
  2. A의 서명: sig
  3. B의 주소: newowner
  4. 보내는 UTXO의 크기: denom
  • 트랜잭션이 블록에서 확정되기를 기다린다.
  • 서명된 확정(confirm) 메시지를 생성하여 B에게 발송한다.

유저가 자신의 UTXO를 메인넷으로 인출하고자 할 때는, 플라즈마 계약의 startExit 함수를 호출한다. 인출이 요청된 UTXO는 우선 계약의 우선순위 대기열에 저장되어있다가, 해당 UTXO가 14일 이상 지나게 되면 과거에 발생한 UTXO부터 순차적으로 메인넷으로 인출해준다. 이 기간은 정당하지 못한 UTXO에 대한 인출 시도를 막기 위한 이의제기(challenge) 기간인데, 이미 사용된 TXO(spent transaction output)를 인출하려는 시도를 관찰한 다른 이용자는 플라즈마 계약의 challengeExit 함수를 호출한다. 이때, 해당 TXO가 사용된 트랜잭션에 대한 증거를 함께 제공함으로써 플라즈마 계약은 UTXO가 사용됐는지 여부를 확인할 수 있다. 최소기능제품은 플라즈마 구현을 위한 가능한 단순한 디자인을 제시했지만, 아직 고려해야 할 문제점들이 남아있다.

  1. 플라즈마 체인 상에서 오퍼레이터로 인한 문제가 발생할 경우, 최소기능제품 이용자는 플라즈마 체인을 빠져나오는 것이 유일한 방법이다. 특히 단일 오퍼레이터를 가정하고 있는 최소기능제품에서는 오퍼레이터가 가짜 트랜잭션을 생성하여 자신에게 임의의 UTXO를 생성한 후 인출을 시도할 수 있다. 플라즈마 체인의 모든 정보를 일일이 확인할 수 없는 플라즈마 계약에서는 UTXO가 정당한지 여부를 알 수 없기 때문에, 계약에 예치된 금액을 오퍼레이터가 가져가고, 따라서 일반 이용자들이 자신의 자산을 온전히 돌려받을 수 없게 된다. 따라서 최소기능제품 이용자들은 가짜 UTXO가 생성된다면, 플라즈마 체인에서의 모든 활동을 멈추고 자신의 UTXO를 1주일 이내에 인출을 시도해야 손해를 피할 수 있다. 그뿐만 아니라 오퍼레이터가 새로 생성된 블록을 이용자에게 공유하지 않는 경우에도, 이용자의 입장에서는 플라즈마 체인을 빠져나오는 것이 안전한 방법이다.
  2. 최소기능제품 이용자는 적어도 일주일에 한 번 이상은 플라즈마 체인 상의 모든 새로운 트랜잭션들을 검증해야 하며, 메인넷의 플라즈마 계약에 요청된 인출 요청까지도 확인하고 있어야 한다는 부담을 갖는다. 플라즈마 체인을 지속적으로 검증해야 문제가 발생하는지 여부를 확인할 수 있으며, 메인넷의 플라즈마 계약을 관찰해야 악의적인 이용자가 TXO를 인출하려는지를 확인하고 이의제기를 할 수 있다.
  3. 악의적인 이용자가 플라즈마 체인에서 이미 사용된 TXO를 인출하려고 시도하는 경우에는 다른 이용자가 이를 확인하고 이의제기를 수행해야 하는데, 이 과정에서 이용자들 간에 일종의 눈치싸움이 발생할 수 있다. 최소기능제품에서는 악의적인 이용자에 의해 TXO가 인출되면, 다음에 나머지 이용자들이 인출을 시도할 때 플라즈마 계약의 잔액이 부족해서 누군가는 자신의 자산을 인출하지 못하는 사태가 일어날 수 있다. 따라서 모든 이용자가 플라즈마 계약에서 부정한 TXO 인출이 일어나지 못하게 감시를 하고 있어야 하고, 모두가 플라즈마 블록 정보를 가지고 있기에 이의제기를 할 정보를 가지고 있다. 그러나 반대로 살펴보면, 어느 한 이용자가 이의제기해야 할 의무를 갖지 않지만, 심지어 이의제기를 위해서는 자신의 자산에서 메인넷의 가스 사용료(gas fee)를 부담해야 한다. 또한 TXO 인출을 막지 않더라도, 플라즈마 계약의 잔액이 다 떨어지기 전에 이용자가 자신의 자산을 인출하면, 본인은 손해를 보지 않기 때문에 이기적인 행동을 할 수도 있다.
  4. 최소기능제품 이용자가 플라즈마 체인을 빠져나오거나(exit), 이의제기할 때는 메인넷에서 트랜잭션을 발생시켜야 하는데, 메인넷의 트랜잭션 처리량이 충분하지 못하여 모든 트랜잭션을 처리하지 못하거나 가스(gas)값이 비정상적으로 높은 상황에서는 최소기능제품 이용자가 손해를 입게 될 수 있다. 특히 플라즈마 체인에서 문제가 발생하거나 TXO 인출이 시도되는 경우에는, 7일이 지나기 전에 exit 혹은 이의제기 트랜잭션을 발생시켜야 하고, 이 기간 내에 성공하지 못하면 손해를 입게 된다.
  5. 임의의 A가 B에게 UTXO를 전송하는 트랜잭션을 발생시킬 때 완료될 때까지의 절차가 복잡하다. A는 트랜잭션을 생성하여 오퍼레이터가 블록에 포함하도록 해야 하며, 블록의 머클 루트가 메인넷에 포함됐는지를 확인하고, 해당 블록까지의 모든 블록이 정당한지(validity)를 확인하여, 확정 메시지를 B에게 전달해야 트랜잭션이 완료된다.[1]

각주[편집]

  1. 1.0 1.1 Daniel Dongyeon Woo, 〈플라즈마 리뷰〉, 《Medium》, 2018-09-12
  2. 2.00 2.01 2.02 2.03 2.04 2.05 2.06 2.07 2.08 2.09 2.10 Gong Hyuncheol, 〈블록체인 확장성 솔루션 시리즈 2-1 :: Plasma Overview〉, 《Medium》, 2018-04-26
  3. 장경재, 〈(Makers Basic 8) 합의 알고리즘(2)-지분증명(PoS)〉, 《Medium》, 2018-09-27
  4. 4.0 4.1 Jihyeok Choy, 〈블록체인 확장성 솔루션 시리즈 2–3 :: Plasma Cash〉, 《Medium》, 2018-05-03

참고자료[편집]

같이 보기[편집]


  검수요청.png검수요청.png 이 플라즈마 알고리즘 문서는 블록체인 기술에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.