플라즈마캐시 편집하기

이동: 둘러보기, 검색

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

편집을 되돌릴 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 저장해주세요.
최신판 당신의 편집
53번째 줄: 53번째 줄:
 
플라즈마 체인 위 플라즈마캐시의 생성, 저장, 거래 과정에서 기존 모델과 다른 특징을 갖고 있다.
 
플라즈마 체인 위 플라즈마캐시의 생성, 저장, 거래 과정에서 기존 모델과 다른 특징을 갖고 있다.
  
 +
==비교==
 +
=== 토큰 호환성 ===
 +
플라즈마 체인에서 활용되는 토큰인 ERC20에는 id가 없지만, ERC721에는 id가 있기 때문에 기존의 플라즈마 모델에서 ERC721 토큰을 플라즈마 체인 내에서 사용하는 것이 복잡했던 반면, 플라즈마캐시는 기본적으로 ERC20보다는 ERC721에 더 가깝다. 이와 더불어, 플라즈마캐시는 '양'에 대한 정보를 포함하고 있어 ERC-20과의 호환이 가능하다. 즉, 루트체인에서 통용되는 토큰을 간단하게 플라즈마 체인 내로 예치할 수 있다는 것이다.
 +
 +
===거래과정 축소===
 +
기존의 플라즈마 모델에서 2번의 확인 +최종 confirm과 같이 복잡한 거래 과정이 필요했던 이유는 다음과 같은 공격 상황이 발생할 수 있기 때문이다.
 +
 +
* A가 A->B 트랜잭션 생성(현재 100번째 블록)
 +
* 오퍼레이터가 101, 102, 103의 invalid 블록을 생성
 +
* 그 후, A->B 트랜잭션을 104블록에 올려서 루트까지 commit
 +
 +
이 상황에서
 +
1. A가 withdraw를 시도하려 해도 A->B 트랜잭션이 104번째 블록에 있어 불가능(누군가 챌린지를 걸 수 있음).
 +
2. B가 withdraw를 시도하려 해도 앞선 101, 102, 103 블록의 priority가 높기 때문에 불가능
 +
 +
최종적인 사인 없이 첫번째 트랜잭션 사인만으로 해당 거래가 유효하다고 하면, 위와 같이 오퍼레이터가 공격했을 때 무방비하게 당하게 된다. 하지만 플라즈마캐시에서는 이용자들이 더 이상 두번의 사인 과정을 거치지 않아도 된다. priority의 개념이 존재하지 않고 exit process에서 해당 체인의 앞에서부터 priority대로 인출을 하는 것이 아니라, 각 토큰의 거래 기록을 보고 유효한다면 인출을 할 수 있다. 즉, A->B, B->C의 거래가 각각 500번째, 504번째 블록에 있었다고 할 때, 500번째 블록과 504번째 블록 사이에 있는 다른 블록들은 해당 토큰의 거래 기록과는 상관이 없기 때문에 그 블록들은 고려하지 않는다는 것이다. 위와 같은 공격 상황에선, B는 B가 현재 가지고 있는 토큰의 거래 기록만 유효함을 보여주면 101, 102, 103 블록과 상관 없이 인출이 가능하다. A의 경우 B에게 무사히 전달이 되었기 때문에 인출이 불가능하며, 이는 A에게 전혀 손해가 아니다. 정리하자면, 기존의 플라즈마 모델은 이전 블록에 따라 현재 블록의 valid함이 좌우되기 때문에 해당 블록과 valid함을 확인했다는 2번의 사인이 필요했다. 하지만, 플라즈마캐시의 경우 개별 토큰의 거래 기록만이 valid함을 좌우하기에 처음 거래 생성 시 들어가는 사인만 있으면 문제없이 거래 할 수 있다.
 +
 +
===효과적인 Exit Challenging===
 +
기본적으로 토큰 C에 대한 exit를 요청하기 위해선, C의 소유권 이전에 관한 상위 두 개의 거래 내역을 제사하면 된다. 플라즈마캐시가 도입된 플라즈마 체인에서 부정한 exit process와 그 챌린징은 다음과 같이 분류 할 수 있다.
 +
 +
* '''사용된 토큰의 출금''' : 3->4의 트랜잭션이 컴펌됐으나 블록 3에 대해 exit를 요청하는 경우이다. 챌린저는 4의 내용을 통애 챌린징할 수 있다.
 +
 +
* '''이중 지불 후 출금''' : 1->2->3의 전송 과정이 valid 하나, 공격자가 2->4 블록으로의 이중 지불을 한 후, 블록4에 대해 exit를 요청하는 경우이다. 챌린저는 3의 내용으로 챌린징을 한다. 이 토큰은 블록4 전에 생겼으며 그 정보가 블록 4의 부모 체인으로 보내졌다. 따라서 exit process는 취소된다.
 +
 +
* '''부정한 기록을 통한 출금''' : 1->2의 블록까지 valid하고 공격자가 2->3->4->5 블록을 만들어 4->5를 제출해, 5에 대한 exit를 요청하는 경우이다. 챌린저는 블록 2까지 valid함을 증명한 뒤, 공격자에게 다음 블록을 요청한다. 공격자가 블록 2->3이 valid함을 증명하지 못하면 exit process는 취소된다. 만일, 공격자가 invalid한 블록을 withhold하여 공개하지 않았더라도, 챌린징 방식은 유효하다.
 +
 +
중요한 점은 id의 도입으로 인해, 기존 모델에서는 불가능했던 챌린징이 가능해졌다는 것이다. 앞선 문제점에서 언급되었듯, 기존 모델에서 오퍼레이터가 부정한 토큰을 만들어 인출을 시도했을 경우, 참여자들은 순차적인 exit를 통해 빠져나가는 방법을 택할수 밖에 없었다. 그러나, id가 도입되면 같은 상황에서 오퍼레이터가 인출 대상 토큰의 모든 거래기록을 보유하고 있어야 한다. 이 기록은 deposit까지 이어지는데, 앞 상황의 경우 deposit이 존재할 수 없다. 따라서 챌린지를 걸면 공격자가 유효성 증명이 불가능하기에 참여자들은 exit가 아닌 방법으로 해당 부정 인출을 취소시킬 수 있다.
 +
 +
=== 관찰 비용 절감 ===
 +
사실상 플라즈마캐시의 핵심이라 할 수 있는 개선점이다. deposit 이후 생긴 모든 토큰은 루트체인에 매핑되어 기록되어 있다. 또한, 그 토큰들의 id는 불변한다. 해당 토큰 보유자는 새로 생성되는 블록 중에 자신이 보유한 토큰의 id만 확인하면 된다. 즉, P-chain이든 부모체인이든 자신의 토큰과 관련된 블록들만 선택적으로 저장, 관찰하면 자신의 자산이 안전함을 알 수 있다. 그 저장 기록들 역시, 거래 성사시에 이전 소유자에게서 받기 때문에 검증만 된다면, 이전 기록에서 하나하나 찾을 필요가 없어진다. 다시 말해, 모든 데이터를 소유해야 하는 기존의 플라즈마 모델과 달리, 플라즈마캐시는 관찰기능이 분할되어 있다.
 +
 +
=== 공격 부담 증가 ===
 +
기존의 플라즈마 모델에서 출금하기 위해서는 한 번의 출금과정만 거치면 됬기 때문에 공격에 노출되기가 쉬웠다. 그러나, 플라즈마캐시의 경우 루트체인에 모든 토큰이 각각 기록되어 있다. 따라서 출금을 요청하기 위해서는 출금하고자 하는 모든 토큰에 대해 따로 출금신청을 해야한다. 즉, 기존에는 한번만 거짓말을 하면 됬지만, 플라즈마캐시의 도입을 통해 토큰 n개의 거짓말을 해야한다는 것이다. 이는 공격자의 공격 부담을 증가시킨다.
 +
 +
==장단점==
 
===장점===
 
===장점===
 
플라즈마캐시는 '''클라이언트가 처리해야 할 데이터의 양을 크게 줄일 수 있다'''. [[비탈릭 부테린]]은 "사용자가 거래소에 이더를 입금하면, 이더와 동일한 가치의 플라즈마 코인이 만들어지는 시스템" 이라고 설명했다. 각 프라즈마 코인은 고유 ID가 부여되어 플라즈마캐시의 주인은 본인의 거래와 관련된 플라즈마 체인의 블록만을 검증해도 충분하다. 사용자가 추적하고 싶은 코인이 포함된 블록만 확인할 수 있도록 만들어, 전체 플라즈마 히스토리를 다운로드하고 확인해야 하는 기존 플라즈마보다 효율적이게 되는 것이다.
 
플라즈마캐시는 '''클라이언트가 처리해야 할 데이터의 양을 크게 줄일 수 있다'''. [[비탈릭 부테린]]은 "사용자가 거래소에 이더를 입금하면, 이더와 동일한 가치의 플라즈마 코인이 만들어지는 시스템" 이라고 설명했다. 각 프라즈마 코인은 고유 ID가 부여되어 플라즈마캐시의 주인은 본인의 거래와 관련된 플라즈마 체인의 블록만을 검증해도 충분하다. 사용자가 추적하고 싶은 코인이 포함된 블록만 확인할 수 있도록 만들어, 전체 플라즈마 히스토리를 다운로드하고 확인해야 하는 기존 플라즈마보다 효율적이게 되는 것이다.
86번째 줄: 121번째 줄:
 
* '''Block Withholding'''
 
* '''Block Withholding'''
 
: 이 문제는 오퍼레이터에 의해 거래 데이터가 언제 공개되는지 결정되는 문제이다. 만약, 오퍼레이터가 3번째 거래를 숨긴다면 참여자는 3번째를 못보고 2->4의 거래를 만들 수 있다. 그 직후, 오퍼레이터가 숨긴 거래를 퍼뜨리면 2->4거래는 이중 지불이 되어 버린다. 이와 같은 눔제에 대해 복구 메커니즘의 구현이 꼭 필요하다.<ref>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]〉, 《미디엄》, 2018-05-03</ref>
 
: 이 문제는 오퍼레이터에 의해 거래 데이터가 언제 공개되는지 결정되는 문제이다. 만약, 오퍼레이터가 3번째 거래를 숨긴다면 참여자는 3번째를 못보고 2->4의 거래를 만들 수 있다. 그 직후, 오퍼레이터가 숨긴 거래를 퍼뜨리면 2->4거래는 이중 지불이 되어 버린다. 이와 같은 눔제에 대해 복구 메커니즘의 구현이 꼭 필요하다.<ref>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]〉, 《미디엄》, 2018-05-03</ref>
 
==비교==
 
=== 토큰 호환성 ===
 
플라즈마 체인에서 활용되는 토큰인 ERC20에는 id가 없지만, ERC721에는 id가 있기 때문에 기존의 플라즈마 모델에서 ERC721 토큰을 플라즈마 체인 내에서 사용하는 것이 복잡했던 반면, 플라즈마캐시는 기본적으로 ERC20보다는 ERC721에 더 가깝다. 이와 더불어, 플라즈마캐시는 '양'에 대한 정보를 포함하고 있어 ERC-20과의 호환이 가능하다. 즉, 루트체인에서 통용되는 토큰을 간단하게 플라즈마 체인 내로 예치할 수 있다는 것이다.
 
 
===거래과정 축소===
 
기존의 플라즈마 모델에서 2번의 확인 +최종 confirm과 같이 복잡한 거래 과정이 필요했던 이유는 다음과 같은 공격 상황이 발생할 수 있기 때문이다.
 
 
* A가 A->B 트랜잭션 생성(현재 100번째 블록)
 
* 오퍼레이터가 101, 102, 103의 invalid 블록을 생성
 
* 그 후, A->B 트랜잭션을 104블록에 올려서 루트까지 commit
 
 
이 상황에서
 
1. A가 withdraw를 시도하려 해도 A->B 트랜잭션이 104번째 블록에 있어 불가능(누군가 챌린지를 걸 수 있음).
 
2. B가 withdraw를 시도하려 해도 앞선 101, 102, 103 블록의 priority가 높기 때문에 불가능
 
 
최종적인 사인 없이 첫번째 트랜잭션 사인만으로 해당 거래가 유효하다고 하면, 위와 같이 오퍼레이터가 공격했을 때 무방비하게 당하게 된다. 하지만 플라즈마캐시에서는 이용자들이 더 이상 두번의 사인 과정을 거치지 않아도 된다. priority의 개념이 존재하지 않고 exit process에서 해당 체인의 앞에서부터 priority대로 인출을 하는 것이 아니라, 각 토큰의 거래 기록을 보고 유효한다면 인출을 할 수 있다. 즉, A->B, B->C의 거래가 각각 500번째, 504번째 블록에 있었다고 할 때, 500번째 블록과 504번째 블록 사이에 있는 다른 블록들은 해당 토큰의 거래 기록과는 상관이 없기 때문에 그 블록들은 고려하지 않는다는 것이다. 위와 같은 공격 상황에선, B는 B가 현재 가지고 있는 토큰의 거래 기록만 유효함을 보여주면 101, 102, 103 블록과 상관 없이 인출이 가능하다. A의 경우 B에게 무사히 전달이 되었기 때문에 인출이 불가능하며, 이는 A에게 전혀 손해가 아니다. 정리하자면, 기존의 플라즈마 모델은 이전 블록에 따라 현재 블록의 valid함이 좌우되기 때문에 해당 블록과 valid함을 확인했다는 2번의 사인이 필요했다. 하지만, 플라즈마캐시의 경우 개별 토큰의 거래 기록만이 valid함을 좌우하기에 처음 거래 생성 시 들어가는 사인만 있으면 문제없이 거래 할 수 있다.
 
 
===효과적인 Exit Challenging===
 
기본적으로 토큰 C에 대한 exit를 요청하기 위해선, C의 소유권 이전에 관한 상위 두 개의 거래 내역을 제사하면 된다. 플라즈마캐시가 도입된 플라즈마 체인에서 부정한 exit process와 그 챌린징은 다음과 같이 분류 할 수 있다.
 
 
* '''사용된 토큰의 출금''' : 3->4의 트랜잭션이 컴펌됐으나 블록 3에 대해 exit를 요청하는 경우이다. 챌린저는 4의 내용을 통애 챌린징할 수 있다.
 
 
* '''이중 지불 후 출금''' : 1->2->3의 전송 과정이 valid 하나, 공격자가 2->4 블록으로의 이중 지불을 한 후, 블록4에 대해 exit를 요청하는 경우이다. 챌린저는 3의 내용으로 챌린징을 한다. 이 토큰은 블록4 전에 생겼으며 그 정보가 블록 4의 부모 체인으로 보내졌다. 따라서 exit process는 취소된다.
 
 
* '''부정한 기록을 통한 출금''' : 1->2의 블록까지 valid하고 공격자가 2->3->4->5 블록을 만들어 4->5를 제출해, 5에 대한 exit를 요청하는 경우이다. 챌린저는 블록 2까지 valid함을 증명한 뒤, 공격자에게 다음 블록을 요청한다. 공격자가 블록 2->3이 valid함을 증명하지 못하면 exit process는 취소된다. 만일, 공격자가 invalid한 블록을 withhold하여 공개하지 않았더라도, 챌린징 방식은 유효하다.
 
 
중요한 점은 id의 도입으로 인해, 기존 모델에서는 불가능했던 챌린징이 가능해졌다는 것이다. 앞선 문제점에서 언급되었듯, 기존 모델에서 오퍼레이터가 부정한 토큰을 만들어 인출을 시도했을 경우, 참여자들은 순차적인 exit를 통해 빠져나가는 방법을 택할수 밖에 없었다. 그러나, id가 도입되면 같은 상황에서 오퍼레이터가 인출 대상 토큰의 모든 거래기록을 보유하고 있어야 한다. 이 기록은 deposit까지 이어지는데, 앞 상황의 경우 deposit이 존재할 수 없다. 따라서 챌린지를 걸면 공격자가 유효성 증명이 불가능하기에 참여자들은 exit가 아닌 방법으로 해당 부정 인출을 취소시킬 수 있다.
 
 
=== 관찰 비용 절감 ===
 
사실상 플라즈마캐시의 핵심이라 할 수 있는 개선점이다. deposit 이후 생긴 모든 토큰은 루트체인에 매핑되어 기록되어 있다. 또한, 그 토큰들의 id는 불변한다. 해당 토큰 보유자는 새로 생성되는 블록 중에 자신이 보유한 토큰의 id만 확인하면 된다. 즉, P-chain이든 부모체인이든 자신의 토큰과 관련된 블록들만 선택적으로 저장, 관찰하면 자신의 자산이 안전함을 알 수 있다. 그 저장 기록들 역시, 거래 성사시에 이전 소유자에게서 받기 때문에 검증만 된다면, 이전 기록에서 하나하나 찾을 필요가 없어진다. 다시 말해, 모든 데이터를 소유해야 하는 기존의 플라즈마 모델과 달리, 플라즈마캐시는 관찰기능이 분할되어 있다.
 
 
=== 공격 부담 증가 ===
 
기존의 플라즈마 모델에서 출금하기 위해서는 한 번의 출금과정만 거치면 됬기 때문에 공격에 노출되기가 쉬웠다. 그러나, 플라즈마캐시의 경우 루트체인에 모든 토큰이 각각 기록되어 있다. 따라서 출금을 요청하기 위해서는 출금하고자 하는 모든 토큰에 대해 따로 출금신청을 해야한다. 즉, 기존에는 한번만 거짓말을 하면 됬지만, 플라즈마캐시의 도입을 통해 토큰 n개의 거짓말을 해야한다는 것이다. 이는 공격자의 공격 부담을 증가시킨다.
 
  
 
{{각주}}
 
{{각주}}

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

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