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

이동: 둘러보기, 검색

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

편집을 되돌릴 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 저장해주세요.
최신판 당신의 편집
145번째 줄: 145번째 줄:
  
 
==최소기능제품(MVP)==
 
==최소기능제품(MVP)==
2018년 1월, 가능한 단순화된 플라즈마의 개발을 위해 기본적인 보안성만을 제공하는 [[최소기능제품]](Minimal Viable Plasma)이 제시되었다. [[최소기능제품]]은 크게 세 가지 요소로 나누어 볼 수 있다. 우선 이더리움 메인넷에는 플라즈마 체인의 관리를 담당하는 플라즈마 계약(plasma contract)위치하고, 플라즈마 체인에서는 플라즈마 블록을 생성하고 머클 루트(Merkle root) 값을 메인넷으로 지속적으로 전송하는 오퍼레이터가 있으며, 이 플라즈마 체인을 이용하여 [[트랜잭션]]을 발생시키려는 유저들이 있다. 일반적인 사이드체인을 이용한 인터체인 확장성 솔루션과 플라즈마를 구분 짓는 가장 큰 핵심은 메인넷과 사이드체인 사이의 연결 관계이다. 일반적인 인터체인 솔루션에서는 메인넷과 사이드체인이 비교적 동등한 관계에서 교류가 일어나며, 각각의 체인이 그 자체로 충분한 안전성을 제공해야 한다. 반면 플라즈마에서는 메인넷의 플라즈마 계약을 통하여 플라즈마 체인이 메인넷에 종속된 형태를 가지며, 플라즈마 체인의 안전성은 메인넷에 의존적이다. 새로운 플라즈마 블록이 생성될 때는 이 플라즈마 체인에 참여하고 있는 노드들과 플라즈마 블록을 공유하지만, 메인넷에는 블록의 루트 값만을 플라즈마 계약에 저장한다. 따라서 플라즈마 체인의 일종의 압축된 정보만이 메인넷에 저장되기 때문에 메인넷 단독으로 존재할 때와 비교하여 더 많은 수의 [[트랜잭션]]을 병렬적으로 처리할 수 있고, 메인넷 사용 비용 절감의 효과를 얻을 수 있으며, 단일 오퍼레이터가 블록 생성 권한을 가지면서 발생할 수 있는 악의적인 행동을 메인넷에서 사후 검증할 수 있게 된다. 플라즈마 계약은 메인넷에서 플라즈마 체인을 관리하는 역할을 하며, [[최소기능제품]]에서는 기본적으로 다음의 함수들이 담겨있다.
+
2018년 1월, 가능한 단순화된 플라즈마의 개발을 위해 기본적인 보안성만을 제공하는 [[최소기능제품]](Minimal Viable Plasma)이 제시되었다. [[최소기능제품]]은 크게 세 가지 요소로 나누어 볼 수 있다. 우선 이더리움 메인넷에는 플라즈마 체인의 관리를 담당하는 플라즈마 컨트랙트(plasma contract)위치하고, 플라즈마 체인에서는 플라즈마 블록을 생성하고 머클 루트(Merkle root) 값을 메인넷으로 지속적으로 전송하는 오퍼레이터가 있으며, 이 플라즈마 체인을 이용하여 [[트랜잭션]]을 발생시키려는 유저들이 있다. 일반적인 사이드체인을 이용한 인터체인 확장성 솔루션과 플라즈마를 구분 짓는 가장 큰 핵심은 메인넷과 사이드체인 사이의 연결 관계이다. 일반적인 인터체인 솔루션에서는 메인넷과 사이드체인이 비교적 동등한 관계에서 교류가 일어나며, 각각의 체인이 그 자체로 충분한 안전성을 제공해야 한다. 반면 플라즈마에서는 메인넷의 플라즈마 컨트랙트를 통하여 플라즈마 체인이 메인넷에 종속된 형태를 가지며, 플라즈마 체인의 안전성은 메인넷에 의존적이다. 새로운 플라즈마 블록이 생성될 때는 이 플라즈마 체인에 참여하고 있는 노드들과 플라즈마 블록을 공유하지만, 메인넷에는 블록의 루트 값만을 플라즈마 컨트랙트에 저장한다. 따라서 플라즈마 체인의 일종의 압축된 정보만이 메인넷에 저장되기 때문에 메인넷 단독으로 존재할 때와 비교하여 더 많은 수의 [[트랜잭션]]을 병렬적으로 처리할 수 있고, 메인넷 사용 비용 절감의 효과를 얻을 수 있으며, 단일 오퍼레이터가 블록 생성 권한을 가지면서 발생할 수 있는 악의적인 행동을 메인넷에서 사후 검증할 수 있게 된다. 플라즈마 컨트랙트는 메인넷에서 플라즈마 체인을 관리하는 역할을 하며, [[최소기능제품]]에서는 기본적으로 다음의 함수들이 담겨있다.
  
 
* submitBlock : 오퍼레이터가 생성한 블록의 머클 루트를 받아서 저장한다.
 
* submitBlock : 오퍼레이터가 생성한 블록의 머클 루트를 받아서 저장한다.
152번째 줄: 152번째 줄:
 
* challengeExit : 정당하지 못한 인출 시도를 막는다.
 
* challengeExit : 정당하지 못한 인출 시도를 막는다.
  
오퍼레이터는 플라즈마 체인에서 블록을 생성하는 일종의 권한증명(Proof of Authority) 방식의 단일 채굴자 노드로 볼 수 있다. 기존 플라즈마 백서에서는 다수의 오퍼레이터들이 합의 [[알고리즘]]에 따라 플라즈마 블록을 생성하는 디자인을 제시하고 있으나, [[최소기능제품]]에서는 합의 [[알고리즘]]을 도입함에 따라 발생하는 복잡성을 일단은 배제하기 위해 단일 오퍼레이터에게 블록 생성 권한을 주는 상황을 상정하고 있다. 따라서 오퍼레이터는 플라즈마 체인상에서 발생하는 [[트랜잭션]]들을 모아 블록을 생성하고, 블록의 머클 루트를 플라즈마 계약에 보내어 저장하는 역할을 맡는다. 새로운 유저가 플라즈마 체인에 참여하기 위해서는, 플라즈마 체인에서 사용할 자신의 코인을 플라즈마 계약으로 전송한다. 계약에서는 이용자가 보내준 예치금을 저장하고, 해당 값만큼의 UTXO(unspent transaction output)를 생성하는 블록을 플라즈마 체인에 추가한다. 유저는 이 이후부터 자신의 UTXO를 이용하여 플라즈마 체인 내부에서 [[트랜잭션]]을 발생시키고 이를 오퍼레이터를 통해 플라즈마 블록에 기록하여 승인받게 된다. [[최소기능제품]]에서의 [[트랜잭션]]은 2개의 input, 2개의 output으로 이루어진 가장 단순한 구조를 갖는다. 각 블록에는 2¹⁶개의 [[트랜잭션]]이 담길 수 있고, 따라서 depth-16의 머클 트리 루트가 플라즈마 계약에 담기게 된다. 실제로 A가 B에게 UTXO를 보내는 [[트랜잭션]]을 생성하려면 다음과 같은 절차가 이루어진다.
+
오퍼레이터는 플라즈마 체인에서 블록을 생성하는 일종의 권한증명(Proof of Authority) 방식의 단일 채굴자 노드로 볼 수 있다. 기존 플라즈마 백서에서는 다수의 오퍼레이터들이 합의 [[알고리즘]]에 따라 플라즈마 블록을 생성하는 디자인을 제시하고 있으나, [[최소기능제품]]에서는 합의 [[알고리즘]]을 도입함에 따라 발생하는 복잡성을 일단은 배제하기 위해 단일 오퍼레이터에게 블록 생성 권한을 주는 상황을 상정하고 있다. 따라서 오퍼레이터는 플라즈마 체인상에서 발생하는 [[트랜잭션]]들을 모아 블록을 생성하고, 블록의 머클 루트를 플라즈마 컨트랙트에 보내어 저장하는 역할을 맡는다. 새로운 유저가 플라즈마 체인에 참여하기 위해서는, 플라즈마 체인에서 사용할 자신의 코인을 플라즈마 컨트랙트로 전송한다. 컨트랙트에서는 이용자가 보내준 예치금을 저장하고, 해당 값만큼의 UTXO(unspent transaction output)를 생성하는 블록을 플라즈마 체인에 추가한다. 유저는 이 이후부터 자신의 UTXO를 이용하여 플라즈마 체인 내부에서 [[트랜잭션]]을 발생시키고 이를 오퍼레이터를 통해 플라즈마 블록에 기록하여 승인받게 된다. [[최소기능제품]]에서의 [[트랜잭션]]은 2개의 input, 2개의 output으로 이루어진 가장 단순한 구조를 갖는다. 각 블록에는 2¹⁶개의 [[트랜잭션]]이 담길 수 있고, 따라서 depth-16의 머클 트리 루트가 플라즈마 컨트랙트에 담기게 된다. 실제로 A가 B에게 UTXO를 보내는 [[트랜잭션]]을 생성하려면 다음과 같은 절차가 이루어진다.
  
 
* A가 B의 주소(address)를 묻는다.
 
* A가 B의 주소(address)를 묻는다.
163번째 줄: 163번째 줄:
 
* 서명된 확정(confirm) 메시지를 생성하여 B에게 발송한다.
 
* 서명된 확정(confirm) 메시지를 생성하여 B에게 발송한다.
  
유저가 자신의 UTXO를 메인넷으로 인출하고자 할 때는, 플라즈마 계약의 startExit 함수를 호출한다. 인출이 요청된 UTXO는 우선 계약의 우선순위 대기열에 저장되어있다가, 해당 UTXO가 14일 이상 지나게 되면 과거에 발생한 UTXO부터 순차적으로 메인넷으로 인출해준다. 이 기간은 정당하지 못한 UTXO에 대한 인출 시도를 막기 위한 이의제기(challenge) 기간인데, 이미 사용된 TXO(spent transaction output)를 인출하려는 시도를 관찰한 다른 이용자는 플라즈마 계약의 challengeExit 함수를 호출한다. 이때, 해당 TXO가 사용된 [[트랜잭션]]에 대한 증거를 함께 제공함으로써 플라즈마 계약은 UTXO가 사용됐는지 여부를 확인할 수 있다. [[최소기능제품]]은 플라즈마 구현을 위한 가능한 단순한 디자인을 제시했지만, 아직 고려해야 할 문제점들이 남아있다.
+
유저가 자신의 UTXO를 메인넷으로 인출하고자 할 때는, 플라즈마 컨트랙트의 startExit 함수를 호출한다. 인출이 요청된 UTXO는 우선 컨트랙트의 우선 순위 대기열에 저장되어있다가, 해당 UTXO가 14일 이상 경과하게 되면 과거에 발생한 UTXO부터 순차적으로 메인넷으로 인출해준다. 이 기간은 정당하지 못한 UTXO에 대한 인출 시도를 막기 위한 이의제기(challenge) 기간인데, 이미 사용된 TXO(spent transaction output)를 인출하려는 시도를 관찰한 다른 이용자는 플라즈마 컨트랙트의 challengeExit 함수를 호출한다. 이때, 해당 TXO가 사용된 [[트랜잭션]]에 대한 증거를 함께 제공함으로써 플라즈마 컨트랙트는 UTXO가 사용됐는지 여부를 확인할 수 있다. [[최소기능제품]]은 플라즈마 구현을 위한 가능한 단순한 디자인을 제시했지만, 아직 고려해야 할 문제점들이 남아있다.
  
# 플라즈마 체인 상에서 오퍼레이터로 인한 문제가 발생할 경우, [[최소기능제품]] 이용자는 플라즈마 체인을 빠져나오는 것이 유일한 방법이다. 특히 단일 오퍼레이터를 가정하고 있는 [[최소기능제품]]에서는 오퍼레이터가 가짜 [[트랜잭션]]을 생성하여 자신에게 임의의 UTXO를 생성한 후 인출을 시도할 수 있다. 플라즈마 체인의 모든 정보를 일일이 확인할 수 없는 플라즈마 계약에서는 UTXO가 정당한지 여부를 알 수 없기 때문에, 계약에 예치된 금액을 오퍼레이터가 가져가고, 따라서 일반 이용자들이 자신의 자산을 온전히 돌려받을 수 없게 된다. 따라서 [[최소기능제품]] 이용자들은 가짜 UTXO가 생성된다면, 플라즈마 체인에서의 모든 활동을 멈추고 자신의 UTXO를 1주일 이내에 인출을 시도해야 손해를 피할 수 있다. 그뿐만 아니라 오퍼레이터가 새로 생성된 블록을 이용자에게 공유하지 않는 경우에도, 이용자의 입장에서는 플라즈마 체인을 빠져나오는 것이 안전한 방법이다.
+
# 플라즈마 체인 상에서 오퍼레이터로 인한 문제가 발생할 경우, [[최소기능제품]] 이용자는 플라즈마 체인을 빠져나오는 것이 유일한 방법이다. 특히 단일 오퍼레이터를 가정하고 있는 [[최소기능제품]]에서는 오퍼레이터가 가짜 [[트랜잭션]]을 생성하여 자신에게 임의의 UTXO를 생성한 후 인출을 시도할 수 있다. 플라즈마 체인의 모든 정보를 일일이 확인할 수 없는 플라즈마 컨트랙트에서는 UTXO가 정당한지 여부를 알 수 없기 때문에, 컨트랙트에 예치된 금액을 오퍼레이터가 가져가고, 따라서 일반 이용자들이 자신의 자산을 온전히 돌려받을 수 없게 된다. 따라서 [[최소기능제품]] 이용자들은 가짜 UTXO가 생성된다면, 플라즈마 체인에서의 모든 활동을 멈추고 자신의 UTXO를 1주일 이내에 인출을 시도해야 손해를 피할 수 있다. 뿐만 아니라 오퍼레이터가 새로 생성된 블록을 이용자에게 공유하지 않는 경우에도, 이용자의 입장에서는 플라즈마 체인을 빠져나오는 것이 안전한 방법이다.
# [[최소기능제품]] 이용자는 적어도 일주일에 한 번 이상은 플라즈마 체인 상의 모든 새로운 [[트랜잭션]]들을 검증해야 하며, 메인넷의 플라즈마 계약에 요청된 인출 요청까지도 확인하고 있어야 한다는 부담을 갖는다. 플라즈마 체인을 지속적으로 검증해야 문제가 발생하는지 여부를 확인할 수 있으며, 메인넷의 플라즈마 계약을 관찰해야 악의적인 이용자가 TXO를 인출하려는지를 확인하고 이의제기를 할 수 있다.
+
# [[최소기능제품]] 이용자는 적어도 일주일에 한 번 이상은 플라즈마 체인 상의 모든 새로운 [[트랜잭션]]들을 검증해야 하며, 메인넷의 플라즈마 컨트랙트에 요청된 인출 요청까지도 확인하고 있어야 한다는 부담을 갖는다. 플라즈마 체인을 지속적으로 검증해야 문제가 발생하는지 여부를 확인할 수 있으며, 메인넷의 플라즈마 컨트랙트를 관찰해야 악의적인 이용자가 TXO를 인출하려는지를 확인하고 이의제기를 할 수 있다.
# 악의적인 이용자가 플라즈마 체인에서 이미 사용된 TXO를 인출하려고 시도하는 경우에는 다른 이용자가 이를 확인하고 이의제기를 수행해야 하는데, 이 과정에서 이용자들 간에 일종의 눈치싸움이 발생할 수 있다. [[최소기능제품]]에서는 악의적인 이용자에 의해 TXO가 인출되면, 다음에 나머지 이용자들이 인출을 시도할 때 플라즈마 계약의 잔액이 부족해서 누군가는 자신의 자산을 인출하지 못하는 사태가 일어날 수 있다. 따라서 모든 이용자가 플라즈마 계약에서 부정한 TXO 인출이 일어나지 못하게 감시를 하고 있어야 하고, 모두가 플라즈마 블록 정보를 가지고 있기에 이의제기를 할 정보를 가지고 있다. 그러나 반대로 살펴보면, 어느 한 이용자가 이의제기해야 할 의무를 갖지 않지만, 심지어 이의제기를 위해서는 자신의 자산에서 메인넷의 가스 사용료(gas fee)를 부담해야 한다. 또한 TXO 인출을 막지 않더라도, 플라즈마 계약의 잔액이 다 떨어지기 전에 이용자가 자신의 자산을 인출하면, 본인은 손해를 보지 않기 때문에 이기적인 행동을 할 수도 있다.
+
# 악의적인 이용자가 플라즈마 체인에서 이미 사용된 TXO를 인출하려고 시도하는 경우에는 다른 이용자가 이를 확인하고 이의제기를 수행해야 하는데, 이 과정에서 이용자들 간에 일종의 눈치싸움이 발생할 수 있다. [[최소기능제품]]에서는 악의적인 이용자에 의해 TXO가 인출되면, 추후에 나머지 이용자들이 인출을 시도할 때 플라즈마 컨트랙트의 잔액이 부족해서 누군가는 자신의 자산을 인출하지 못하는 사태가 일어날 수 있다. 따라서 모든 이용자들이 플라즈마 컨트랙트에서 부정한 TXO 인출이 일어나지 못하게 감시를 하고 있어야 하고, 모두가 플라즈마 블록 정보를 가지고 있기에 이의제기를 할 정보를 가지고 있다. 그러나 반대로 살펴보면, 어느 한 이용자가 이의제기해야 할 의무를 갖지 않는 반면, 심지어 이의제기를 위해서는 자신의 자산에서 메인넷의 가스 사용료(gas fee)를 부담해야 한다. 또한 TXO 인출을 막지 않더라도, 플라즈마 컨트랙트의 잔액이 다 떨어지기 전에 이용자가 자신의 자산을 인출하면, 본인은 손해를 보지 않기 때문에 이기적인 행동을 할 수도 있다.
 
# [[최소기능제품]] 이용자가 플라즈마 체인을 빠져나오거나(exit), 이의제기할 때는 메인넷에서 [[트랜잭션]]을 발생시켜야 하는데, 메인넷의 [[트랜잭션]] 처리량이 충분하지 못하여 모든 [[트랜잭션]]을 처리하지 못하거나 가스(gas)값이 비정상적으로 높은 상황에서는 [[최소기능제품]] 이용자가 손해를 입게 될 수 있다. 특히 플라즈마 체인에서 문제가 발생하거나 TXO 인출이 시도되는 경우에는, 7일이 지나기 전에 exit 혹은 이의제기 [[트랜잭션]]을 발생시켜야 하고, 이 기간 내에 성공하지 못하면 손해를 입게 된다.
 
# [[최소기능제품]] 이용자가 플라즈마 체인을 빠져나오거나(exit), 이의제기할 때는 메인넷에서 [[트랜잭션]]을 발생시켜야 하는데, 메인넷의 [[트랜잭션]] 처리량이 충분하지 못하여 모든 [[트랜잭션]]을 처리하지 못하거나 가스(gas)값이 비정상적으로 높은 상황에서는 [[최소기능제품]] 이용자가 손해를 입게 될 수 있다. 특히 플라즈마 체인에서 문제가 발생하거나 TXO 인출이 시도되는 경우에는, 7일이 지나기 전에 exit 혹은 이의제기 [[트랜잭션]]을 발생시켜야 하고, 이 기간 내에 성공하지 못하면 손해를 입게 된다.
# 임의의 A가 B에게 UTXO를 전송하는 [[트랜잭션]]을 발생시킬 때 완료될 때까지의 절차가 복잡하다. A는 [[트랜잭션]]을 생성하여 오퍼레이터가 블록에 포함하도록 해야 하며, 블록의 머클 루트가 메인넷에 포함됐는지를 확인하고, 해당 블록까지의 모든 블록이 정당한지(validity)를 확인하여, 확정 메시지를 B에게 전달해야 [[트랜잭션]]이 완료된다.<ref name="개요"></ref>
+
# 임의의 A가 B에게 UTXO를 전송하는 [[트랜잭션]]을 발생시킬 때 완료될 때까지의 절차가 복잡하다. A는 [[트랜잭션]]을 생성하여 오퍼레이터가 블록에 포함시키도록 해야 하며, 블록의 머클 루트가 메인넷에 포함됐는지를 확인하고, 해당 블록까지의 모든 블록이 정당한지(validity)를 확인하여, 확정 메시지를 B에게 전달해야 [[트랜잭션]]이 완료된다.<ref name="개요"></ref>
  
 
{{각주}}
 
{{각주}}

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

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