Plasma 101 : Let’s Scale with Cryptoeconomics !
“we seek to design a system whereby computation can occur off-blockchain but ultimately enforcible on-chain which is scalable to billions of computations per second with minimal on-chain updates.”
- Vitalik Buterin, Joseph Poon -
안녕하세요? 온더의 Danny 입니다 😃 오늘 살펴볼 내용은 이더리움 확장성 및 암호경제학적 솔루션의 핵심인 플라즈마(Plasma)입니다. 플라즈마는 다뤄야 할 내용이 꽤 많기 때문에 Plasma 101, 102로 나누어 연재하겠습니다 ;) 오늘은 Plasma 101의 내용으로서 플라즈마의 배경과 개괄적인 내용을 소개하도록 하겠습니다.
Series of Plasma
- Plasma 101 : Let’s Scale with Cryptoeconomics !
- Plasma 102 : Detail Structures and the Use Cases.
Plasma 101, 102는 OmiseGo가 제안한 Plasma MVP에 대한 내용이 주를 이룰 것입니다.
이더리움 재단이 연구하고 있는 대표적인 스케일링 솔루션은 Casper, Sharding, Plasma 3가지가 있습니다.
캐스퍼와 샤딩은 이더리움 블록체인 자체에 도입하고자 하는 온체인 솔루션인 반면, 플라즈마는 오프 체인(Off-Blockchain) 솔루션입니다. 이더리움 메인 체인이 처리하던 트랜잭션을 플라즈마 체인에 분산시켜 처리 가능한 TX의 수를 늘리고, 메인 체인이 부담해야 하는 작업량을 덜어내겠다는 취지입니다. 즉, TX를 처리할 수 있는 또 다른 블록체인을 둠으로써 이더리움 블록체인의 성능을 높이겠다는 것이죠. 기술적으로 이를 어떻게 확장하겠다는 방법론도 중요하지만, 플라즈마에서 활용되는 암호경제학적 메커니즘이야말로 플라즈마의 본질이라고 할 만큼 매우 중요합니다.
Raiden이나 Truebit 등의 프로젝트도 오프 체인 솔루션에 해당하는데요. 이는 이더리움 재단과는 별개로 이더리움 체인의 확장성을 해결하고자 등장한 프로젝트들입니다.
많은 프로젝트들이 도입되고 있는만큼, 블록체인에서 확장성이란 아주 실제적이고 중요한 문제입니다. 플라즈마든, State Channel이든 별도의 레이어에서 트랜잭션을 처리하는 스케일링 솔루션을 이해하려면 그 도입 배경인 블록체인의 확장성 문제부터 이해할 필요가 있습니다. 따라서 블록체인(특히 이더리움)의 확장성 문제를 간단히 살펴보는 것을 시작으로 오늘의 주인공인 플라즈마를 향해 출발해봅시다 :)
Intro to Plasma : Scalability of Blockchain
확장성이 뭐길래 ?
일단 블록체인에서 확장성의 의미를 아주 간단하게 표현하자면 블록체인을 상용화시키기엔 아직까지 너무 느리고 실용성이 없다는 것입니다. 이것은 크립토키티(Cryptokitty)의 사례를 통해 극명하게 드러났죠. 그 이유는 블록마다 처리할 수 있는 트랜잭션(이하 TX)이 한정되어있기 때문인데요. 이제는 많은 분들이 아시겠지만, 블록체인을 이루는 블록은 이런 구조로 되어있습니다.
보시는 바와 같이 블록체인은 링크드 리스트(Linked List) 구조를 가지며, 개별 블록의 구조는 크게 2가지로 나뉠 수 잇습니다.
블록 헤더
Previous Hash,Timestamp, Nonce, Difficulty, MerkleRoot, etc,,,
위와 같이 블록 헤더는 말 그대로 해당 블록을 대표하는 값들이 기록되어 있습니다. 뒤에서 설명드리겠지만, TX들이 머클라이즈되면서 최종적으로 도출되는 MerkleRoot는 플라즈마에서 상당히 중요한 역할을 합니다.
블록 바디
블록 헤더를 제외한 나머지 부분이라고 생각하면 되는데, TX 데이터가 포함되는 데이터 필드가 중요합니다. 많은 어카운트에서 수많은 TX가 발생하면, 특정 상태(State)에서 다른 상태로의 변환이 이루어집니다. 이러한 상태 변환이 이루어지려면 해당 TX 정보가 유효해야 하죠.
TX의 유효성을 검증하고 이를 블록에 담는 권한은 블록 마이너에게 있고, 마이닝 과정이 끝나면 새로운 블록에 TX 정보들이 기록됩니다. 한 블록에서 처리될 수 있는 TX의 양은 한정되어 있으며 이더리움 블록체인의 경우 Block Gas Limit이라는 개념에 의해 TX 처리량이 제한됩니다.
Block Gas Limit
앞서 언급한 바와 같이, 이더리움 블록체인에는 Gas Limit이라는 개념이 있습니다. TX가 발생할 때마다 TX에 할당할 Gas(작업량)를 설정해야하고, 블록의 마이너는 이러한 TX들에 대해 허용할 수 있는 Gas의 최대치인 Gas Limit의 범위 내에서만 트랜잭션을 수용할 수 있죠.
예를 들어, ETH를 전송하는 일반적인 트랜잭션의 경우 기본적으로
21000 GAS
가 필요합니다.지금으로부터 2년 전인 2016년 6월 18일 기준으로 Block Gas Limit은
4714242
였으며 블록 생성시간은 15초였습니다.
4714242 GAS Limit / 21000 GAS (Used) = 224.4 TX per Block=> 224.4 TX / 15s = 14.96 TX per second(TPS).
만약 더 많은 가스(ex.300000 GAS
)를 쓰는 TX로만 상태 변화가 이루어진다면, 블록 하나 당 허용할 수 있는 TX가 줄어들면서 최종적으로 허용되는 TPS 역시 더욱 작아질 것입니다.
4714242 GAS Limit(in 1 Block) / 300000 GAS (Used) = 15.8 TX per Block=> 15.8 TX / 15s = 1.05 TX per second(TPS).
현재 2018년 6월 18일 기준으로는 약 8M에 해당하는 Block Gas Limit이 설정되어있고 블록 생성시간의 디폴트는 12초(Metropolis 이후 재조정)에 맞춰져 있습니다.
7999992 GAS Limit(in 1 Block) / 21000 GAS (Used) = 380.9 TX per Block380.9 / 12s = 31.7 TX per second(TPS).
보시는 바와 같이, ETH의 TX를 기준으로 보면 현재는 30 TPS 내외의 처리 속도가 도출될 것으로 추정합니다.
만약 이 TX들이 이더리움 블록체인의 블록이 아니라 다른 레이어에 위치하는 블록체인의 블록에서 처리된다면 ? Gas Limit에 저촉되는 일이 발생할 가능성은 더욱 적어지면서 원활한 TX 처리가 가능해지겠죠.
여기까지의 내용을 정리하면 블록 한 개당 처리될 수 있는 트랜잭션을 늘리겠다는 것, 즉 TPS를 높인다는 것은 다음과 같은 논리적 귀결이 가능합니다.
i) 블록마다 제한되어 있는 블록 용량 내지 Gas Limit의 확장
ii) 블록 안에 포함되는 트랜잭션 데이터를 분산 처리하여 트랜잭션 처리 부담 완화
오늘 알아보고자 하는 플라즈마는 2번째 경우에 해당합니다 :)
TPS를 높이자 !
Plasma is a proposed framework for incentivized and enforced execution of smart contracts which is scalable to a significant amount of state updates per second (potentially billions) enabling the blockchain to be able to represent a significant amount of decentralized financial applications worldwide.
플라즈마 백서 초록 첫번째 문단에 적혀있는 내용입니다. 블록체인에 플라즈마 체인을 적용시키면 잠재적으로 수십억에 가까운 상태 변화가 가능해지고, 결국 블록체인은 탈중앙적 금융 애플리케이션이 될 것임을 강조합니다.
블록체인의 확장성을 논할 때, 주로 비교되는 지급결제 및 송금 서비스는 VISA와 Paypal 입니다. 플라즈마 백서에서 밝힌 바, 블록체인이 세계적인 금융 애플리케이션으로 성공할 수 있을지 없을지의 여부는 블록 내에서 얼마나 많은 TX를 처리할 수 있느냐 없느냐, 즉 TPS를 얼마나 높일 수 있느냐가 관건이 되겠네요.
Let’s Dive into Plasma !
이제 확장성 이슈가 왜 중요한지 이해되셨나요? 그럼 본격적으로 플라즈마에 대해 알아보도록 하겠습니다 :D
플라즈마 체인 구성요소
위에서도 언급했다시피, 플라즈마 프로젝트의 기본적인 논리는 TX를 처리할 수 있는 또 다른 플라즈마 체인을 둠으로써 이더리움 블록체인의 확장성을 제고하는 것입니다. 그렇다면 플라즈마 체인이란 무엇인지 그림을 통해 살펴봅시다.
플라즈마에서는 이더리움 블록체인을 Root Chain으로 표기합니다. 그리고 Root Chain에 연결된 나머지의 체인들은 모두 Plasma Chain으로 볼 수 있습니다.
- Root Chain에는 다수의 Plasma Chain이 연결될 수 있습니다.
- 플라즈마 체인 중에서도 Root Chain에 먼저 연결(Bond)된 체인은 부모(Parent) 체인, 그리고 부모 체인에 직접적으로 연결되어 있는 체인을 자식(Child) 체인이라고 합니다.
- 부모 체인에는 다수의 자식 체인이 연결될 수 있습니다.
- Plasma Chain에 참여하기 위해서는 Root Chain에 ETH를 예치(Deposit)해놓아야 하고, 이에 따라 Plasma ETH(이하 PETH)가 Plasma Chain에서 융통됩니다.
- Root Chain과 Plasma Chain간의 상호작용은 오로지 분쟁 상황(비잔틴 상황)에서만 발생합니다.
위와 같은 구조를 기본으로, 특정 TX를 블록체인에 동기화시킬 때 필요한 연산은 Plasma Chain에서 주로 이루어집니다. 결과적으로 Root Chain, 즉 이더리움 블록체인에서는 최소한의 연산만 시행됩니다. 모든 TX를 Root Chain에 기록하지 않고, Plasma Chain 블록 헤더의 MerkleRoot만 기록하기 때문인데요. 이 내용은 뒤에서 좀 더 자세히 살펴보도록 하죠 :)
플라즈마와 같은 스케일링 솔루션을 설명하기 위해서는 크게 두가지 방향성이 필요합니다.
첫째. 암호경제학적으로 플라즈마 체인의 안정성을 어떻게 확보했는가 ?
둘째. 기술적으로 어떤 방법론을 활용하여 암호경제학적 안정성을 구현했는가 ?
자, 그러면 암호경제학적 측면부터 살펴보겠습니다. 이 내용을 먼저 이해해야 기술적 측면에 대한 논의까지 자연스럽게 확장시킬 수 있습니다.
Cryptoeconomics of Plasma
Collin Cusce는 플라즈마의 구조가 마치 카지노 게임과 유사하다고 말했는데요. 이 비유를 보시면 지금부터 설명할 플라즈마 체인의 운영 구조를 대략적으로 이해할 수 있습니다.
우리가 카지노에 들어가려면, 우선 현금과 칩을 교환하고 캐셔에게 현금을 맡겨야 합니다. 그래야 카지노에서 활용되는 칩의 가치가 묶인 현금(Security Deposit)에 의해 보장되니까요. 카지노에서 나갈 때에는 현재 자신이 가진 칩에 해당하는 액수의 현금을 캐셔에게 요청하고, 현금을 수령해서 나가면 됩니다.
Plasma Contract on Root Chain
위 컨트랙은 OmiseGo가 만든 RootChain.sol 컨트랙입니다. 플라즈마 체인을 활용하기 위해서는 우선 루트 체인과의 관계를 컨트랙으로 구현시켜야 하고, 구현된 코드를 이더리움 블록체인에 배포해야 합니다.
플라즈마 체인과 루트 체인은 기본적으로 서로 연결되어 있습니다. 플라즈마 체인의 TX 기록이 집약되어 루트 체인에 주기적으로 기록되는 방식으로 TX가 분산처리되기 때문에, 플라즈마 체인이 구동되기 위해서는 일단 플라즈마 컨트랙이 루트 체인에 배포되어야 합니다.
즉, 내가 카지노(플라즈마 체인)에 들어가려면 일단 카지노라는 건물이 어딘가에 구축되어 있어야겠죠? 강원랜드에 직접 가서 포커게임을 하고 싶은데, 건물 자체가 없으면 안되죠.
이제 강원랜드에 가서 내가 하고 싶은 포커게임을 좀 더 현실감있고 빠르게 하고 싶습니다. 내 컴퓨터에서 그런 현실감있는 게임을 하기엔 너무 느려서 답답하거든요. 그리고 강원랜드에서 했던 게임에 대한 데이터는 고스란히 기록했다가, 필수적인 정보만 압축해서 내 컴퓨터에 조그맣게 저장합니다.
Security Deposit
위 카지노 사례에서 현금을 묶는다는 표현을 보셨을 것입니다. 플라즈마의 구성요소를 설명하면서 잠깐 언급했듯이, 플라즈마 체인에서 PETH를 융통시키기 위해서는 루트 체인에 ETH를 묶어놔야 합니다. 이를 Security Deposit이라 합니다. 이것이 가능하기 위해서는 위와 같은 플라즈마 컨트랙이 메인 네트워크에 우선적으로 배포되어야 할 것이고요.
adress
: EOA 주소
amount
: deposit할 ETH의 양
depositBlock
: deposit하는 시점에서의 블록 넘버
누군가 플라즈마 체인에 참여하고자 한다면 메인 체인의 플라즈마 컨트랙에서는 Deposit 함수가 호출됩니다. 플라즈마 체인을 쓰려면 당신이 보유한 ETH를 일단 묶어놓으라는 것이죠. 그리고 플라즈마 체인에서 활용되는 ETH인 PETH를 받습니다 :)
마치 금본위제와 비슷하죠? 금본위제 하에서 특정 법정화폐는 금이라는 기초자산(Underlying Asset)에 의해 그 경제적 가치가 보증됩니다. 그리고 화폐를 가지고 은행에 가면 금 태환이 가능했죠. 이와 동일한 논리로, 나의 PETH는 메인 체인에 묶인 ETH에 의해서 그 가치가 보장되며 언제든지 동일한 액수의 ETH를 인출할 수 있습니다.
예를 들어, 내가 5 ETH를 루트 체인에 예치하고 5 PETH를 받았다고 가정합시다. 추후 루트 체인에 묶여있는 ETH를 출금 요청하면 메인 체인에 예치되어 있는 5 ETH를 그대로 받습니다. 즉, PETH와 ETH는 1:1의 교환비율을 갖습니다.
이렇게 ETH를 묶고 PETH를 잘 받았다면, 일차적으로는 끝난 겁니다.
그리고 추가로 발생하는 악의적 상황이 없다면 플라즈마 체인에서는 특정 목적 하에서 PETH의 TX는 계속 발생할 것이고, 이는 루트체인의 마이너에 의해 컨펌되어 새로운 블록에 기록됩니다. 이런 과정이 반복되겠죠.
그런데 과연 악의적 상황이 없을까요? 암호경제학적 사고방식으로는 불가능한 가정입니다. 악의적 행위자를 처벌하기 위한 예치금 삭감 기능이 필요합니다.
플라즈마 구성요소를 앞서 언급하면서, Root Chain과 Plasma Chain간의 상호작용은 오로지 분쟁 상황(비잔틴 상황)에서만 발생한다고 말씀드린 바 있습니다. 이것이 어떤 의미를 갖는가 하면, 플라즈마 체인의 이상적인 그림은 PETH의 TX가 플라즈마 체인에서 반복적으로 처리되고 루트 체인에는 최소의 TX만 기록되는 상황이 무한 반복되는 것입니다.
그러나 루트 체인이 플라즈마 체인의 TX에 관여하게 되는 소수의 경우가 있는데, 바로 악의적 노드의 공격 상황이 발생하는 경우입니다. 이 경우에는 어떤 노드가 악의적 행위를 한 것인지 루트 체인에서 검증 작업이 필요하고, 악의적 행위가 검증되면 해당 노드는 처벌(예치금 삭감)받게 됩니다. (검증에 대한 내용은 곧 다룰 것이며, 자세한 공격 상황과 처벌 논리는 Plasma 102에서 다루겠습니다)
따라서 플라즈마 Security Deposit의 목적을 정리하면 이렇습니다.
1. 공격 상황이 발생했을 때, 메인 체인에 묶어놓은 자금을 안전하게 확보하는 기능 (뱅크런같은 위험상황 발생시 5천만원 한도로 은행 예금을 보장하는 맥락과 유사합니다)
2. 악의적 행위자에 대한 예치금 삭감 기능
Casper FFG에서는 Nothing at Stake 문제를 해결하기 위해 두번째 기능(최소 삭감 조건)만을 활용했었죠. 두 가지의 체인을 쓰는 솔루션이 아니니까요. 즉, Security Deposit의 첫번째 기능은 플라즈마에만 존재합니다. 별도의 체인에 ETH를 묶어놓고 이것의 가치를 보장해주는 작업은 플라즈마 체인에서만 볼 수 있는 논리입니다.
그리고 이런 기능은 플라즈마 체인에서 Attack 상황이 발생할 때, 루트 체인과의 커뮤니케이션을 거쳐 Exit 절차를 통해 구현됩니다.
EXIT 이란 ?
Exit
Exit이란 플라즈마 체인의 PETH를 인출해서 루트 체인의 ETH로 교환하는 과정입니다. 말 그대로 플라즈마 체인에서 빠져나가는 행위죠. PETH를 인출하는 과정에는 여러가지 상황이 있는데 이에 대한 자세한 내용은 플라즈마의 구체적인 구조를 다루는 Plasma 102에서 다루겠습니다.
좌우지간 Exit 개념에는 이러한 인출 과정들이 기본적으로 포함되고, 악의적 행위가 발생했을 경우에 대한 Challenge까지도 포함하는 포괄적 개념입니다.
Challenge & Fraud Proof
Challenge
누군가 PETH의 부정한 인출을 시도했을 때, 이것에 대해 이의를 제기하는 것을 Challenge라고 합니다. 해당 노드의 TX에 대해 제동을 걸고 그 행위에 대한 Fraud Proof(사기를 증명하는 행위)를 해야하죠. Challenge를 하는 이유는 결국 악의적 노드를 처벌하고자 Fraud Proof를 하기 위함입니다. 이 과정에서 자신의 PETH가 위험하다고 느껴지면 Exit을 하겠죠.
Fraud Proof
Fraud Proof는 Challenge 과정에서 진행되는데, 기존의 Merkle Proof 과정을 역으로 바꿨다고 생각하시면 됩니다. 다시 말해 특정 노드의 악의적인 행위에 대해서 Merkle Proof를 하는 것이 Fraud Proof 입니다.
일반적인 Merkle Proof는 “이 TX가 올바른 TX다"라는 것을 Merkle Path에 있는 TX Hash들을 활용해서 검증한다면, Fraud Proof는 “이 TX는 유효하지 않은 TX다"라는 것을 역으로 증명하는 과정이죠.
플라즈마 체인에서 발생하는 TX는 여느 블록체인과 마찬가지로 머클라이즈되어 MerkleRoot 값이 도출되고 이는 플라즈마 블록 헤더에 기록됩니다. 그리고 악의적 행위가 발견되었을 때, 플라즈마 컨트랙에서
Challenge
함수를 호출하고 MerkleRoot값을 활용해 루트 체인에게 Fraud Proof를 할 수 있습니다.이 증명이 성공하면 본인의 PETH를 Exit해서 루트 체인의 ETH와 교환할 수 있으며 플라즈마 체인에서 유효하지 않았던 블록의 TX기록은 롤백됩니다.
Exit과 Fraud Proof, Challenge 간의 관계
다양한 개념이 동시에 들어오다보니 머릿속으로 정리하기가 좀 어려울 것 같아서, 그림을 통해 각 절차의 관계를 쉽게 표현해보겠습니다.
결과적으로 Exit, Challenge, Fraud Proof 과정을 다이어그램으로 나타내면 위와 같습니다.
- Exit은 가장 큰 개념으로서, 악의적 행위가 발생하는 경우 뿐만 아니라 단순히 PETH를 ETH로 바꾸기 원할 때에도 가능한 절차입니다.
- Challenge는 악의적 행위를 한 노드에 대해 Fraud Proof를 하기 위해 이의를 제기하는 과정입니다.
- Fraud Proof는 Challenge에 의해 발생하는 것으로서, 악의적으로 발생한 TX가 Merkle Path에서 올바르지 않다는 것을 증명하는 과정입니다. Challenge 함수를 호출하여 이의를 제기하지 않으면 Fraud Proof는 발생할 이유가 없습니다.
사실 Challenge와 Fraud Proof는 엄격히 구분할 필요가 없긴 하지만, 이 글을 읽는 분들이 플라즈마의 구조를 입문함에 있어 최대한 쉬운 논리로 받아들였으면 하는 마음에 구분하였습니다.
감시체계 : 플라즈마 체인 참여자는 서로 감시당한다
저는 플라즈마 체인의 구조를 보면서 판옵티콘 감옥 체계가 떠올랐습니다.
누구도 특정 노드의 TX를 직접적으로 감시하거나 관찰하고 있지 않을 수도 있지만, 언제 어디서 나의 부정 행위가 들킬지는 아무도 모르는 일입니다. 즉, 자신이 처벌받을 가능성이 상존한다는 것을 스스로 인지하게 됩니다.
이는 플라즈마 체인에 참여하는 노드가 많아질수록 그 효과가 커집니다. 더 많은 눈이 자신을 보고있고 한 번 잘못하면 바로 처벌을 받는 자신의 처지를 생각할테니까요. 이런 측면에서 중요하게 생각할만한 점은 분산화 정도가 큰 합의 알고리즘을 채택할수록, Exit의 가능성은 더욱 적어질 수 있다는 것입니다.
PoA(Proof-Of-Authority) 알고리즘은 보통 프라이빗 블록체인에서 활용되는 방식이고 중앙에 의해 권한을 부여받은 사람만이 블록을 생성할 수 있습니다. 만약 플라즈마 체인에서 PoA알고리즘을 채택하고 단일 Operator를 가정한다면, Operator는 트랜잭션의 TX를 검열(Censorship)하는 것이 가능합니다. 그래서 다음과 같은 상반된 시각이 공존합니다.
i) 탈중앙성 및 검열저항성을 위배한다.
ii) Exit 과정이 있기 때문에 완벽한 중앙화 시스템은 아니다.
Plasma MVP 자체가 완성된 구현체가 아니기 때문에, 이런 부분에 대해서는 제가 앞서 제시했던 시사점을 고려해보면서 어떻게 탈중앙성과 검열저항성을 훼손시키지 않고 Plasma 체인을 만들 수 있을지 다같이 고민하고 연구하는 시도가 필요합니다. 블록 생성에 대한 합의 알고리즘을 어떻게 구현할 것인지도 모두 유동적이구요.
Technical Solution
우리는 암호경제학적으로 플라즈마의 구조가 어떻게 되어있는지에 대해 플라즈마 구성요소의 개념들을 위주로 살펴보았습니다. 이 절에서는 위에서 언급한 개념들이 어떤 기술적 요소를 통해 구현되고, 이는 어떻게 이더리움 블록체인의 확장성 문제를 해결할 수 있는지 알아보겠습니다.
1. Periodic Commitments
플라즈마 체인의 블록 헤더 가운데 “MerkleRoot 값만을 Root Chain에 효율적으로 기록할 수 있다”는 말을 조금 더 뜯어보겠습니다.
플라즈마 체인에서 TX가 발생하고 블록에 기록이 되면 루트 체인에 MerkleRoot만을 전송(Commit)하여 TX 처리 부담을 완화합니다. 이 때, 플라즈마 체인의 블록 하나가 생성될 때마다 루트 체인의 블록에 MerkleRoot가 전송되는 것이 아닙니다. 좀 더 효율적인 기록을 위해서 일정 주기(Period)마다 Root Chain의 블록에 전송됩니다.
위 그림을 보시면 #1, #2 블록을 지나쳐 #3 블록이 생성될 때 비로소 각 블록의 MerkleRoot 값(그림에서는 block header)이 루트 체인에 제출되는 것을 볼 수 있습니다.
2. Map Reduce
스케일링 측면에서 핵심이 되는 방법론은 플라즈마 체인의 트랜잭션 데이터를 MapReduce 방식으로 분산처리하는 것입니다. MapReduce 방식은 대용량 데이터의 병렬 처리를 지원하기 위해서 개발된 함수형 프로그래밍 방식으로서, Map
과 Reduce
함수로 구성됩니다.
Map
: 플라즈마 체인에서 커밋된 데이터(MerkleRoot)들을 Mapping할 때 활용됩니다.
Reduce
: Mapping된 데이터들을 동일한 범주로 합친(Shuffling) 후에, Map들을 정리 및 감소시킵니다. 이 과정은 플라즈마 체인에서 발생한 트랜잭션을 머클 증명(Merkle Proof)할 때 활용되며 Fraud Proof 과정까지 좀 더 효율적으로 만듭니다.
3. UTXO(Unspent Transanction Output)
플라즈마 MVP에서 또 하나 주목할만한 특징은 BTC의 TX 단위인 UTXO 모델을 활용했다는 점입니다. 제가 여태까지 TX라는 단어를 계속 썼는데, 플라즈마 MVP에서의 TX는 UTXO 기반으로 처리됩니다.
Plasma 102에서 다룰 내용이지만, UTXO를 활용하기 때문에 Wrong Block Validation 공격 상황에서 블록 생성자가 Exit에 실패하게 됩니다. UTXO를 활용하면 First in — First Out(FIFO) 형태의 Exit이 가능해지기 때문이죠. 루트 체인의 플라즈마 컨트랙에서는 특정 UTXO가 누구로부터 언제 발생했는지 그 타임라인을 전부 확인할 수 있습니다.
UTXO의 위와 같은 특성으로 인해서 악의적 상황에서의 Fraud Proof가 좀 더 효율적으로 처리될 수 있습니다.
More Viable Plasma
오늘 다룬 내용은 Minimal Viable Plasma와 관련된 내용이었는데요. 얼마 전 이더리움 공식 리서치 채널에 More Viable Plasma의 스펙에 대한 리서치 내용도 공개되었습니다 :)
플라즈마 프로젝트는 블록체인의 기본적인 구동 방식과 TX 처리 과정을 알지 못하면 이해하기 매우 어렵습니다. 최대한 쉬운 설명과 비유로 개괄적인 내용을 담아보려고 했습니다만 흡수가 잘 되었는지 모르겠네요 😥 어찌 됐든 오늘도 긴 글 읽느라 고생 많으셨고 Plasma 102에서 뵙겠습니다 :)
- Q&A and Communication 😃 => danny.h@onther.io