플라즈마 알고리즘 편집하기

이동: 둘러보기, 검색

경고: 로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다. 로그인하거나 계정을 생성하면 편집자가 아이디(ID)으로 기록되고, 다른 장점도 있습니다.

편집을 되돌릴 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 저장해주세요.
최신판 당신의 편집
30번째 줄: 30번째 줄:
  
 
===Deposit===
 
===Deposit===
Deposit은 클라이언트가 플라즈마 체인에 참여하기 위해 필요한 과정이다. Deposit은 클라이언트와 플라즈마 계약 간 상호작용이므로, deposit을 하기 위해서는 먼저 루트 체인에 플라즈마 계약이 배포(Deploy)되어 있어야 한다.
+
Deposit은 클라이언트가 플라즈마 체인에 참여하기 위해 필요한 과정이다. Deposit은 클라이언트와 플라즈마 컨트랙트 간 상호작용이므로, deposit을 하기 위해서는 먼저 루트 체인에 플라즈마 컨트랙트가 배포(Deploy)되어 있어야 한다.
# 플라즈마 체인에 참여하고자 하는 Alice는 루트 체인의 플라즈마 계약으로 3 ETH(일정량)를 보내는 [[트랜잭션]]을 생성하여 계약의 deposit 함수를 호출한다.
+
# 플라즈마 체인에 참여하고자 하는 Alice는 루트 체인의 플라즈마 컨트랙트로 3 ETH(일정량)를 보내는 [[트랜잭션]]을 생성하여 컨트랙트의 deposit 함수를 호출한다.
# 플라즈마 계약에 Alice의 3 ETH가 Lock-in 된다. 이때, 플라즈마 계약에는 누가 ETH를 보냈는지는 기록되지 않고, 총량만이 기록된다.
+
# 플라즈마 컨트랙트에 Alice의 3 ETH가 Lock-in 된다. 이때, 플라즈마 컨트랙트에는 누가 ETH를 보냈는지는 기록되지 않고, 총량만이 기록된다.
 
# 플라즈마 체인의 블록 생성자(오퍼레이터)는 루트 체인의 [[트랜잭션]]을 확인하고, 플라즈마 체인의 블록에 Alice가 3 PETH를 소유하고 있다는 내용의 새로운 UTXO를 생성해 담는다.
 
# 플라즈마 체인의 블록 생성자(오퍼레이터)는 루트 체인의 [[트랜잭션]]을 확인하고, 플라즈마 체인의 블록에 Alice가 3 PETH를 소유하고 있다는 내용의 새로운 UTXO를 생성해 담는다.
 
# Alice는 플라즈마 블록을 확인하고, 플라즈마 체인의 [[트랜잭션]]에 서명하여 컨펌한다. Alice의 컨펌과 함께 [[트랜잭션]]은 유효해지고, Alice는 플라즈마 체인에서 3 PETH를 소유하게 된다.<ref name="블록체인"></ref>
 
# Alice는 플라즈마 블록을 확인하고, 플라즈마 체인의 [[트랜잭션]]에 서명하여 컨펌한다. Alice의 컨펌과 함께 [[트랜잭션]]은 유효해지고, Alice는 플라즈마 체인에서 3 PETH를 소유하게 된다.<ref name="블록체인"></ref>
41번째 줄: 41번째 줄:
 
# 플라즈마 체인의 오퍼레이터 Charlie는 Alice가 생성한 [[트랜잭션]]을 플라즈마 블록에 담는다.
 
# 플라즈마 체인의 오퍼레이터 Charlie는 Alice가 생성한 [[트랜잭션]]을 플라즈마 블록에 담는다.
 
# 정상적인 상황(non-byzantine)에서, Alice의 [[트랜잭션]]이 담긴 블록의 헤더는 오퍼레이터에 의해 패런트 체인의 블록에 커밋된다. 커밋 과정의 반복 결과, 블록 헤더의 정보는 최종적으로 루트 체인에 커밋된다.
 
# 정상적인 상황(non-byzantine)에서, Alice의 [[트랜잭션]]이 담긴 블록의 헤더는 오퍼레이터에 의해 패런트 체인의 블록에 커밋된다. 커밋 과정의 반복 결과, 블록 헤더의 정보는 최종적으로 루트 체인에 커밋된다.
# Alice와 Bob은 모든 상위 체인들을 지켜봄으로써 루트 체인에 블록의 헤더가 커밋되는지 확인할 수 있다. 확인되면, Alice와 Bob은 Alice가 생성한 [[트랜잭션]]에 서명하여 [[트랜잭션]]을 컨펌한다.
+
# Alice와 Bob은 모든 상위 체인들을 지켜봄으로써 루트 체인에 블록의 헤더가 커밋되는지 확인할 수 있다. 확인이 되면, Alice와 Bob은 Alice가 생성한 [[트랜잭션]]에 서명하여 [[트랜잭션]]을 컨펌한다.
 
# [[트랜잭션]]에 대한 컨펌 서명이 플라즈마 블록에 담긴다. 블록에 서명이 담기면 [[트랜잭션]]은 Finalized된다.
 
# [[트랜잭션]]에 대한 컨펌 서명이 플라즈마 블록에 담긴다. 블록에 서명이 담기면 [[트랜잭션]]은 Finalized된다.
이더리움 루트 체인에서는 2번이 완료되면 유효한 [[트랜잭션]]으로 취급되지만, 플라즈마 체인에서는 5번이 완료되고 나서야 유효한 [[트랜잭션]]으로 취급된다. 다시 말해 Alice나 Bob이 컨펌 서명을 하지 않은 상태에서 3 PETH의 소유권은 여전히 Alice에게 있다. 플라즈마 설계의 중요한 전제 중 하나는 루트 체인을 제외한 모든 플라즈마 체인에서 부정행위가 일어날 수 있다는 것이다. 플라즈마 체인의 [[트랜잭션]]에서 3, 4, 5번의 과정이 존재하는 이유도 부정행위를 방지하거나, 부정행위에 의한 손실이 일어나지 않도록 하기 위해서다. 3번의 커밋은 부정행위에 의해 손실이 일어나지 않도록 하는 장치인 인출을 가능케 한다. 4번의 컨펌은 부정행위를 방지하기 위해 설계된 장치이다.<ref name="블록체인"></ref>
+
이더리움 루트 체인에서는 2번이 완료되면 유효한 [[트랜잭션]]으로 취급되지만, 플라즈마 체인에서는 5번이 완료되고 나서야 유효한 [[트랜잭션]]으로 취급된다. 다시 말해 Alice나 Bob이 컨펌 서명을 하지 않은 상태에서 3 PETH의 소유권은 여전히 Alice에게 있다. 플라즈마 설계의 중요한 전제 중 하나는 루트 체인을 제외한 모든 플라즈마 체인에서 부정 행위가 일어날 수 있다는 것이다. 플라즈마 체인의 [[트랜잭션]]에서 3, 4, 5번의 과정이 존재하는 이유도 부정 행위를 방지하거나, 부정 행위에 의한 손실이 일어나지 않도록 하기 위해서다. 3번의 커밋은 부정 행위에 의해 손실이 일어나지 않도록 하는 장치인 인출을 가능케 한다. 4번의 컨펌은 부정 행위를 방지하기 위해 설계된 장치이다.<ref name="블록체인"></ref>
  
 
===Periodic Commitments===
 
===Periodic Commitments===
49번째 줄: 49번째 줄:
  
 
===Exit Process===
 
===Exit Process===
Deposit이 클라이언트가 플라즈마 체인에 참여할 수 있게 해주는 과정이라면, Exit은 플라즈마 체인에 있는 참여자의 자금을 루트 체인, 패런트 체인 등으로 옮길 수 있게 해주는 과정이다. 플라즈마가 도입되지 않은 이더리움 네트워크에서는 부정행위나 블록 생성자의 비잔틴 행위가 발생하면 체인의 참여자(토큰 보유자)들이 손실을 볼 수 있다. 플라즈마가 도입된 이더리움 네트워크에서는 루트 체인이 제대로 동작하는 한, 참여자가 속해 있는 플라즈마 체인, 패런트 체인, 패런트 체인의 패런트 체인 등에서 부정행위나 비잔틴 상황이 발생해도 루트 체인만 제대로 동작하면 참여자가 손실을 보지 않고 안전하게 자산을 보전할 수 있다. 이를 가능하게 해주는 것이 바로 Exit이다. Exit의 종류는 단순 인출(simple withdrawal), 빠른 인출(fast withdrawal), 대량 인출(mass withdrawal) 세 가지다.<ref name="블록체인"></ref>
+
Deposit이 클라이언트가 플라즈마 체인에 참여할 수 있게 해주는 과정이라면, Exit은 플라즈마 체인에 있는 참여자의 자금을 루트 체인, 패런트 체인 등으로 옮길 수 있게 해주는 과정이다. 플라즈마가 도입되지 않은 이더리움 네트워크에서는 부정 행위나 블록 생성자의 비잔틴 행위가 발생하면 체인의 참여자(토큰 보유자)들이 손실을 볼 수 있다. 플라즈마가 도입된 이더리움 네트워크에서는 루트 체인이 제대로 동작하는 한, 참여자가 속해 있는 플라즈마 체인, 패런트 체인, 패런트 체인의 패런트 체인 등에서 부정 행위나 비잔틴 상황이 발생해도 루트 체인만 제대로 동작하면 참여자가 손실을 보지 않고 안전하게 자산을 보전할 수 있다. 이를 가능하게 해주는 것이 바로 Exit이다. Exit의 종류는 단순 인출(simple withdrawal), 빠른 인출(fast withdrawal), 대량 인출(mass withdrawal) 세 가지다.<ref name="블록체인"></ref>
  
 
====단순 인출(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들의 위치(해당 블록 넘버와 블록 안에서의 인덱스)는 참여자에게 공개된다.
 
# Sam의 인출 요청은 챌린지 기간을 거친 후에 처리된다. 이 기간에 플라즈마 체인의 참여자는 누구나 Sam의 인출 요청에 대한 이의 신청을 할 수 있다. 이의 신청이 받아들여지면 Sam의 출금은 취소되고 Sam의 자금 중 일부(fidelity bond)가 이의 신청자(reporter)에게 보상으로 지급된다. 부정 인출의 예로는, 플라즈마 체인의 참여자가 이미 지불된 UTXO에 대한 인출을 요청하는 경우(Double Spending), 플라즈마 오퍼레이터가 자기 소유의 허위 UTXO를 생성하여 블록에 담고 이에 대한 인출을 요청하는 경우 등이 있다.
 
# Sam의 인출 요청은 챌린지 기간을 거친 후에 처리된다. 이 기간에 플라즈마 체인의 참여자는 누구나 Sam의 인출 요청에 대한 이의 신청을 할 수 있다. 이의 신청이 받아들여지면 Sam의 출금은 취소되고 Sam의 자금 중 일부(fidelity bond)가 이의 신청자(reporter)에게 보상으로 지급된다. 부정 인출의 예로는, 플라즈마 체인의 참여자가 이미 지불된 UTXO에 대한 인출을 요청하는 경우(Double Spending), 플라즈마 오퍼레이터가 자기 소유의 허위 UTXO를 생성하여 블록에 담고 이에 대한 인출을 요청하는 경우 등이 있다.
 
# 아무도 Sam에게 이의 제기를 하지 않은 경우, Sam의 인출 요청은 또 한 번의 유예 기간을 거친 후 처리된다. 이 기간은 먼저 생성된 UTXO(만약 서로 다른 블록에 담겼다면 height가 더 낮은 블록의 UTXO가 우선, 서로 같은 블록에 담겼다면 index가 더 낮은 UTXO가 우선)에 담긴 자산이 먼저 인출되도록 하기 위해 존재하는 기간이다. 먼저 생성된 UTXO의 양에 따라 유예 기간은 아예 존재하지 않을 수도 있고, 다소 길어질 수도 있다.
 
# 아무도 Sam에게 이의 제기를 하지 않은 경우, Sam의 인출 요청은 또 한 번의 유예 기간을 거친 후 처리된다. 이 기간은 먼저 생성된 UTXO(만약 서로 다른 블록에 담겼다면 height가 더 낮은 블록의 UTXO가 우선, 서로 같은 블록에 담겼다면 index가 더 낮은 UTXO가 우선)에 담긴 자산이 먼저 인출되도록 하기 위해 존재하는 기간이다. 먼저 생성된 UTXO의 양에 따라 유예 기간은 아예 존재하지 않을 수도 있고, 다소 길어질 수도 있다.
# 먼저 생성된 UTXO들이 모두 처리되고 나면, Sam의 UTXO에 기록된 자산들도 인출 처리된다. Sam은 플라즈마 계약에서 인출을 신청한 양 만큼의 ETH(Exit한 곳이 루트 체인이 아니라면 PETH)를 돌려받는다.
+
# 먼저 생성된 UTXO들이 모두 처리되고 나면, Sam의 UTXO에 기록된 자산들도 인출 처리된다. Sam은 플라즈마 컨트랙트에서 인출을 신청한 양 만큼의 ETH(Exit한 곳이 루트 체인이 아니라면 PETH)를 돌려받는다.
# 인출 과정의 결과, 플라즈마 계약에 기록된 ETH(Exit한 곳이 루트 체인이 아니라면 PETH)의 총량이 Sam이 인출한 양 만큼 줄어들고 인출 처리된 UTXO들은 TXO가 된다. 단순 인출 과정에서 이의 제기를 어떻게 하는 것인지 궁금할 수 있다. 이의 제기는 플라즈마 계약에 머클 증명을 함으로써 이루어진다. Periodic Commitment에 의해 상위 체인에 커밋되는 블록 헤더 안에는 [[트랜잭션]] 아웃풋(UTXO 또는 TXO) 머클 트리의 루트 해시가 포함되어 있다. 만약 부정 인출이어서 UTXO가 허위라면, UTXO의 머클 해시가 달라지므로 이 UTXO를 담은 머클 트리의 루트 해시가 플라즈마 계약에 기록된 루트 해시와 다를 것이다. 이 사실을 머클 증명을 통해 입증하는 것이 이의 신청이다. 또한 앞서 플라즈마 계약에는 (P)ETH 총량만이 기록된다고 언급하였다. 플라즈마에서 플라즈마 체인 내부의 거래에 의해 개인의 자산이 어떻게 변화하였는지는 상위 체인에 기록되지 않는다. 그런데도 누구나 잘못된 인출 요청에 대해서는 챌린지를 할 수 있기 때문에, 개인이 실제로 가진 자산 만큼만 인출될 수 있다는 점이 보장된다. 따라서 루트 체인(패런트 체인)에 플라즈마 체인의 모든 내부 거래를 기록할 필요가 없어지고, 총량만을 기록해도 문제가 발생하지 않는다. 다만, 아무도 챌린지를 하지 않으면 부정 인출일 경우에도 인출이 될 수 있음으로, 플라즈마 체인 참여자는 참여하고 있는 체인 및 상위 체인을 잘 감독하여야 한다.
+
# 인출 과정의 결과, 플라즈마 컨트랙트에 기록된 ETH(Exit한 곳이 루트 체인이 아니라면 PETH)의 총량이 Sam이 인출한 양 만큼 줄어들고 인출 처리된 UTXO들은 TXO가 된다. 단순 인출 과정에서 이의 제기를 어떻게 하는 것인지 궁금할 수 있다. 이의 제기는 플라즈마 컨트랙트에 머클 증명을 함으로써 이루어진다. Periodic Commitment에 의해 상위 체인에 커밋되는 블록 헤더 안에는 [[트랜잭션]] 아웃풋(UTXO 또는 TXO) 머클 트리의 루트 해시가 포함되어 있다. 만약 부정 인출이어서 UTXO가 허위라면, UTXO의 머클 해시가 달라지므로 이 UTXO를 담은 머클 트리의 루트 해시가 플라즈마 컨트랙트에 기록된 루트 해시와 다를 것이다. 이 사실을 머클 증명을 통해 입증하는 것이 이의 신청이다. 또한 앞서 플라즈마 컨트랙트에는 (P)ETH 총량만이 기록된다고 언급하였다. 플라즈마에서 플라즈마 체인 내부의 거래에 의해 개인의 자산이 어떻게 변화하였는지는 상위 체인에 기록되지 않는다. 그런데도 불구하고 누구나 잘못된 인출 요청에 대해서는 챌린지를 할 수 있기 때문에, 개인이 실제로 가진 자산 만큼만 인출될 수 있다는 점이 보장된다. 따라서 루트 체인(패런트 체인)에 플라즈마 체인의 모든 내부 거래를 기록할 필요가 없어지고, 총량만을 기록해도 문제가 발생하지 않는다. 다만, 아무도 챌린지를 하지 않으면 부정 인출일 경우에도 인출이 될 수 있으므로, 플라즈마 체인 참여자는 참여하고 있는 체인 및 상위 체인을 잘 감독하여야 한다.
  
 
* 참여자가 모든 상위 체인을 지켜봐야 할 이유
 
* 참여자가 모든 상위 체인을 지켜봐야 할 이유
: 참여자가 상위 체인을 지켜봐야 할 이유는 크게 두 가지이며, 모두 인출 과정과 관련되어 있다. 먼저 상위 체인에 커밋되지 않은 블록에 담긴 UTXO에 대해서는 (설령 거래 당사자들이 컨펌을 했다고 하더라도) 인출 신청을 할 수 없기 때문에 상위 체인을 지켜봐야 한다. 인출 신청은 상위 체인(패런트 체인)의 플라즈마 계약에 하는 것인데, 플라즈마 계약엔 차일드 체인의 최신 블록 넘버가 기록되어 있다. 따라서 그 블록 넘버보다 큰 곳에 있는 UTXO는 애초에 인출 신청이 받아들여지지 않는다. 예를 들어 루트 체인으로 인출 신청을 하기 위해서는, 커밋이 루트 체인까지 최종적으로 제대로 되어 있어야 하고, 제대로 커밋되고 있는지 확인하려면 모든 상위 체인을 지켜봐야 한다. 두 번째 이유는 앞서 언급하였듯 부정 인출을 막기 위해서다. 인출 자체가 상위 체인에 요청되는 것이고, 어떠한 상위 체인에 요청될지 모르는 것이므로, 모든 상위 체인들을 지켜보아야 요청 여부를 알 수 있다.
+
: 참여자가 상위 체인을 지켜봐야 할 이유는 크게 두 가지이며, 모두 인출 과정과 관련되어 있다. 먼저 상위 체인에 커밋되지 않은 블록에 담긴 UTXO에 대해서는 (설령 거래 당사자들이 컨펌을 했다고 하더라도) 인출 신청을 할 수 없기 때문에 상위 체인을 지켜봐야 한다. 인출 신청은 상위 체인(패런트 체인)의 플라즈마 컨트렉트에 하는 것인데, 플라즈마 컨트렉트엔 차일드 체인의 최신 블록 넘버가 기록되어 있다. 따라서 그 블록 넘버보다 큰 곳에 위치한 UTXO는 애초에 인출 신청이 받아들여지지 않는다. 예를 들어 루트 체인으로 인출 신청을 하기 위해서는, 커밋이 루트 체인까지 최종적으로 제대로 되어 있어야 하고, 제대로 커밋되고 있는지 확인하려면 모든 상위 체인을 지켜봐야 한다. 두 번째 이유는 앞서 언급하였듯 부정 인출을 막기 위해서다. 인출 자체가 상위 체인에 요청되는 것이고, 어떠한 상위 체인에 요청될지 모르는 것이므로, 모든 상위 체인들을 지켜보아야 요청 여부를 알 수 있다.
  
 
* 단순 인출에서 먼저 생성된 UTXO가 먼저 인출되는 이유
 
* 단순 인출에서 먼저 생성된 UTXO가 먼저 인출되는 이유
 
: 그렇다면 먼저 생성된 UTXO가 먼저 인출되는 이유는 무엇일까? 바로 플라즈마 체인의 비잔틴 상황에 대비하기 위함이다.
 
: 그렇다면 먼저 생성된 UTXO가 먼저 인출되는 이유는 무엇일까? 바로 플라즈마 체인의 비잔틴 상황에 대비하기 위함이다.
 
# 플라즈마 블록 생성자(오퍼레이터) Charlie은 자신 소유로 100 PETH 잔액을 가진 허위 UTXO를 생성해 블록에 담고 인출 요청을 한다.
 
# 플라즈마 블록 생성자(오퍼레이터) Charlie은 자신 소유로 100 PETH 잔액을 가진 허위 UTXO를 생성해 블록에 담고 인출 요청을 한다.
# 허위 UTXO를 생성했다는 사실을 발견한 플라즈마 체인의 참여자 Alice와 Bob(실제 플라즈마 체인에는 이보다 많은 참여자가 있을 수 있다)는 자신의 자금을 지키기 위해 루트 체인의 플라즈마 계약에 Exit 요청을 보낸다.
+
# 허위 UTXO를 생성했다는 사실을 발견한 플라즈마 체인의 참여자 Alice와 Bob(실제 플라즈마 체인에는 이보다 많은 참여자가 있을 수 있다)는 자신의 자금을 지키기 위해 루트 체인의 플라즈마 컨트랙트에 Exit 요청을 보낸다.
# Alice와 Bob의 UTXO가 Charlie의 허위 UTXO보다 먼저 생성되었으므로, 먼저 인출이 된다. Alice와 Bob이 인출을 한 PETH 양 만큼 플라즈마 계약 ETH 총량에서 빠진다.
+
# Alice와 Bob의 UTXO가 Charlie의 허위 UTXO보다 먼저 생성되었으므로, 먼저 인출이 된다. Alice와 Bob이 인출을 한 PETH 양 만큼 플라즈마 컨트랙트 ETH 총량에서 빠진다.
# Charlie의 인출 차례가 되었지만, 플라즈마 계약에 남은 ETH가 없어 Charlie는 인출할 수 없다. 먼저 생성되는 UTXO가 먼저 인출되기 때문에 권한증명 방식의 오퍼레이터가 비잔틴이어도 참여자들은 자산을 안전하게 보전할 수 있다. 권한증명 방식의 오퍼레이터가 허위 UTXO를 생성해 블록에 담기만 하고 인출은 하지 않을 때도 마찬가지로 그냥 먼저 Exit을 하여 자산을 지키면 된다. 라이트닝 네트워크에서는 부정행위가 발견되면 채널의 현재 정보를 온 체인에 공개하여 챌린지하는 방식으로 이에 대응하였다. 플라즈마의 Exit을 통하면 라이트닝 네트워크처럼 상위 체인에 플라즈마 체인이 비잔틴 상황이라는 사실을 알릴 필요 없이, 간단히 참여자의 자금을 지킬 수 있다. 상위 체인이 비잔틴 상황이어서 더 상위 체인으로 블록 헤더가 제대로 커밋되지 않거나, 참여 체인이 비잔틴 상황에 있거나, 참여 체인에서 부정 인출이 일어나면 그냥 상위 체인 중 제대로 동작하는 체인으로 Exit을 하면 된다. 이것이 루트 체인이 제대로 동작하기만 하면 모든 참여자가 자산을 안전히 보전할 수 있는 이유다. 만약 루트 체인이 제대로 동작하지 않는다면 안전하게 Exit 할 곳이 없는 것이므로, 참여자는 자신의 자산 안전성에 대해 확신할 수 없다.<ref name="블록체인"></ref>
+
# Charlie의 인출 차례가 되었지만, 플라즈마 컨트랙트에 남은 ETH가 없어 Charlie는 인출할 수 없다. 먼저 생성되는 UTXO가 먼저 인출되기 때문에 권한증명 방식의 오퍼레이터가 비잔틴이어도 참여자들은 자산을 안전하게 보전할 수 있다. 권한증명 방식의 오퍼레이터가 허위 UTXO를 생성해 블록에 담기만 하고 인출은 하지 않을 때에도 마찬가지로 그냥 먼저 Exit을 하여 자산을 지키면 된다. 라이트닝 네트워크에서는 부정 행위가 발견되면 채널의 현재 정보를 온 체인에 공개하여 챌린지하는 방식으로 이에 대응하였다. 플라즈마의 Exit을 통하면 라이트닝 네트워크처럼 상위 체인에 플라즈마 체인이 비잔틴 상황이라는 사실을 알릴 필요 없이, 간단히 참여자의 자금을 지킬 수 있다. 상위 체인이 비잔틴 상황이어서 더 상위 체인으로 블록 헤더가 제대로 커밋되지 않거나, 참여 체인이 비잔틴 상황에 있거나, 참여 체인에서 부정 인출이 일어나면 그냥 상위 체인 중 제대로 동작하는 체인으로 Exit을 하면 된다. 이것이 루트 체인이 제대로 동작하기만 하면 모든 참여자가 자산을 안전히 보전할 수 있는 이유다. 만약 루트 체인이 제대로 동작하지 않는다면 안전하게 Exit 할 곳이 없는 것이므로, 참여자는 자신의 자산 안전성에 대해 확신할 수 없다.<ref name="블록체인"></ref>
  
 
====빠른 인출(Fast Withdrawal)====
 
====빠른 인출(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>
+
만약 참여자가 자신의 자산을 보전하기 위해 플라즈마 체인을 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)====
 
====대량 인출(Mass Withdrawal)====
대량 인출은 비잔틴 상황에서 활용되는 인출 방식이다. 대량 인출의 동작 방식은 현실 세계의 공동 구매와 유사하다. 인출 작업이 개인마다 따로 이루어지는 단순 인출이나 빠른 인출과는 달리, 대량 인출에서는 한 명이 대량 인출을 오픈하고 다른 사람들은 오픈된 대량 인출에 참여한다.
+
대량 인출은 비잔틴 상황에서 활용되는 인출 방식이다. 대량 인출의 동작 방식은 현실 세계의 공동 구매와 유사하다. 인출 작업이 개개인마다 따로 이루어지는 단순 인출이나 빠른 인출과는 달리, 대량 인출에서는 한 명이 대량 인출을 오픈하고 다른 사람들은 오픈된 대량 인출에 참여한다.
# 플라즈마 체인이 비잔틴 상황이어서 플라즈마 체인 참여자들은 인출을 하고 싶어 한다. Pat은 이에 따라 대량 인출을 연다. 대량 인출을 위해 Pat은 루트 체인에 존재하는 인출 목적지 플라즈마 체인과 계약을 맺는다. 이 계약의 내용은 Pat이 목적지 플라즈마 체인의 계약에 대량 인출 자금을 보내면, 보낸 만큼 목적지 플라즈마 체인에서 사용 가능한 자금이 생긴다는 것이다.
+
# 플라즈마 체인이 비잔틴 상황이어서 플라즈마 체인 참여자들은 인출을 하고 싶어한다. Pat은 이에 따라 대량 인출을 연다. 대량 인출을 위해 Pat은 루트 체인에 존재하는 인출 목적지 플라즈마 체인과 계약을 맺는다. 이 계약의 내용은 Pat이 목적지 플라즈마 체인의 컨트랙트에 대량 인출 자금을 보내면, 보낸 만큼 목적지 플라즈마 체인에서 사용 가능한 자금이 생긴다는 것이다.
 
# Pat은 성공적으로 계약이 맺어졌다는 사실을 공표한다. 이를 확인한 Alice를 비롯한 플라즈마 체인 참여자들은 Pat의 대량 인출에 인출 대상 자금(UTXO)과 서명을 보내 참여한다. Pat은 대량 인출 참여자들에게 일정량의 수수료를 받을 수 있다. 이때 대량 인출은 누구나 열 수 있기 때문에 동시에 여러 개가 열릴 수 있지만, 참여자들은 중복 신청을 해서는 안된다.(중복 신청을 하면 확인 가능하다.)
 
# Pat은 성공적으로 계약이 맺어졌다는 사실을 공표한다. 이를 확인한 Alice를 비롯한 플라즈마 체인 참여자들은 Pat의 대량 인출에 인출 대상 자금(UTXO)과 서명을 보내 참여한다. Pat은 대량 인출 참여자들에게 일정량의 수수료를 받을 수 있다. 이때 대량 인출은 누구나 열 수 있기 때문에 동시에 여러 개가 열릴 수 있지만, 참여자들은 중복 신청을 해서는 안된다.(중복 신청을 하면 확인 가능하다.)
 
# 참여자들의 서명을 받은 후 Pat은 충분한 시간에 거쳐 블록을 검증한다. 검증 과정에서 Pat은 각 참여자가 제출한 UTXO들이 사용된 적이 없는지, 제출된 서명이 맞는지 등을 확인한다. 그 후 제출된 서명을 기반으로 대량 인출 [[트랜잭션]]을 생성한다.
 
# 참여자들의 서명을 받은 후 Pat은 충분한 시간에 거쳐 블록을 검증한다. 검증 과정에서 Pat은 각 참여자가 제출한 UTXO들이 사용된 적이 없는지, 제출된 서명이 맞는지 등을 확인한다. 그 후 제출된 서명을 기반으로 대량 인출 [[트랜잭션]]을 생성한다.
# 대량 인출 참여자들은 생성된 대량 인출 [[트랜잭션]]을 다운받은 후, 2차 서명을 한다. 이 서명 작업은 현재까지의 정보가 올바르다는 것을 확인해주는 역할을 한다. Pat은 이 서명 이후에 플라즈마 체인에서 일어나는 부정행위에 대해서는 책임이 없음으로, 처벌받지 않는다. 2차 서명을 제출하면, 앞서 제출한 자신의 자금(UTXO)이 잠기게 된다. 2차 서명하지 않은 참여자는 대량 인출에서 제외된다.
+
# 대량 인출 참여자들은 생성된 대량 인출 [[트랜잭션]]을 다운받은 후, 2차 서명을 한다. 이 서명 작업은 현재까지의 정보가 올바르다는 것을 확인해주는 역할을 한다. Pat은 이 서명 이후에 플라즈마 체인에서 일어나는 부정 행위에 대해서는 책임이 없으므로, 처벌받지 않는다. 2차 서명을 제출하면, 앞서 제출한 자신의 자금(UTXO)이 잠기게 된다. 2차 서명하지 않은 참여자는 대량 인출에서 제외된다.
# Pat은 중복 인출을 신청한 참여자가 없는지 확인하고, 중복 인출자가 있다면 대량 인출에서 제외한다. 중복 인출 검증이 끝난 후, Pat은 최종적으로 자신이 서명하여 대량 인출 [[트랜잭션]]을 루트 체인이나 패런트 체인에 공표한다. 공표 시 참여자가 제출한 UTXO들의 머클화 정보, 참여자의 서명 등을 함께 제출하여 Pat의 대량 인출 [[트랜잭션]]이 올바르다는 것을 증명해야 한다.
+
# Pat은 중복 인출을 신청한 참여자가 없는지 확인하고, 중복 인출자가 있다면 대량 인출 에서 제외한다. 중복 인출 검증이 끝난 후, Pat은 최종적으로 자신이 서명하여 대량 인출 [[트랜잭션]]을 루트 체인이나 패런트 체인에 공표한다. 공표 시 참여자가 제출한 UTXO들의 머클화 정보, 참여자의 서명 등을 함께 제출하여 Pat의 대량 인출 [[트랜잭션]]이 올바르다는 것을 증명해야 한다.
 
# 루트 체인이나 패런트 체인의 참여자는 공표된 대량 인출 [[트랜잭션]]을 확인하고, 이의 신청을 할 수 있다. 이러한 이의 신청 과정에는 최대 몇 주가 소요될 수 있으며, 이의 신청이 제기되지 않으면 대량 인출이 완료된다.
 
# 루트 체인이나 패런트 체인의 참여자는 공표된 대량 인출 [[트랜잭션]]을 확인하고, 이의 신청을 할 수 있다. 이러한 이의 신청 과정에는 최대 몇 주가 소요될 수 있으며, 이의 신청이 제기되지 않으면 대량 인출이 완료된다.
  
대량 인출은 앞서 언급하였듯이 필수적이지 않다. 100개의 인출 요청이 모인 1개의 대량 인출 요청과 100개의 개별적인 단순 인출 요청을 비교해 보았을 때, 1개의 대량 인출 요청이 100개의 개별적인 단순 인출 요청보다 데이터의 크기가 작으므로, 전체 네트워크의 측면에서 보았을 때 1개의 대량 인출 요청이 더 이로운 것은 사실이다. 하지만 Alice의 입장에서 보면, 대량 인출은 단순 인출보다 완료되는 데 시간이 훨씬 오래 걸리고 복잡하므로, 비잔틴 상황이라 하더라도 굳이 대량 인출을 통해 인출할 이유가 없다.<ref name="블록체인"></ref>
+
대량 인출은 앞서 언급하였듯이 필수적이지 않다. 100개의 인출 요청이 모인 1개의 대량 인출 요청과 100개의 개별적인 단순 인출 요청을 비교해 보았을 때, 1개의 대량 인출 요청이 100개의 개별적인 단순 인출 요청보다 데이터의 크기가 작으므로, 전체 네트워크의 측면에서 보았을 때 1개의 대량 인출 요청이 더 이로운 것은 사실이다. 하지만 Alice의 입장에서 보면, 대량 인출은 단순 인출보다 완료되는데 시간이 훨씬 오래 걸리고 복잡하므로, 비잔틴 상황이라 하더라도 굳이 대량 인출을 통해 인출할 이유가 없다.<ref name="블록체인"></ref>
  
 
==합의 알고리즘==
 
==합의 알고리즘==

해시넷에서의 모든 기여는 다른 기여자가 편집, 수정, 삭제할 수 있다는 점을 유의해 주세요. 만약 여기에 동의하지 않는다면, 문서를 저장하지 말아 주세요.
또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다 (자세한 사항은 해시넷:저작권 문서를 보세요). 저작권이 있는 내용을 허가 없이 저장하지 마세요!

취소 | 편집 도움말 (새 창에서 열림)