2018년 3월 이더리움 확장성의 상태

Plasma Cash, Minimum Viable Plasma 등에 대한 EthCC에서의 하이라이트

Loom Network Korean
Loom Network Korean
16 min readSep 13, 2018

--

이 글은 Georgios Konstantopoulos가 쓴 The State of Ethereum Scaling, March 2018을 번역한 글입니다. 오역이 있으면 Private Note 기능으로 알려주세요!

2018년 3월 8일부터 10일까지, 프랑스 파리는 Ethereum Community Conference(EthCC)에 참여하기 위해 전 세계에서 온 이더리움 전문가, 연구원, 투자자, 그리고 열정으로 가득 찬 팬들로 가득 찼습니다.

EthCC는 2016년 초부터 이더리움과 그 생태계에 관해 알리고 지식을 공유해온 프랑스의 비영리기관인 Asseth가 주최합니다.

총 800명 이상의 사람들이 참여했습니다(참고: 저를 포함해서요!).

“EthCC 확장”에 대한 마지막 강연에서 나온 측정치

3일의 컨퍼런스 동안 100개가 넘는 강연이 열렸고, 통치 구조, 보안, 프라이버시부터 DApp 개발, 게임, 탈중앙화 거래소에 대한 주제까지 다뤘습니다. 다음 스프레드시트에서 대부분의 강연을 찾으실 수 있습니다.

각각의 강연을 설명하는 것은 이 글의 범위를 벗어납니다. Loom Network에서 우리의 초점은 확장성에 있기에, 이 글에서 우리는 EthCC에서 확장성에 대한 발표를 주로 다루겠습니다.

Plasma, Plasma Cash, 그리고 Sharding

둘째 날, Karl Floersch가 플라즈마와 샤딩의 최근 진행에 대해 발표했습니다. 이 강연은 그가 지난주 올린 플라즈마를 설명하는 영상을 조금 더 자세히 설명하는 버전이었습니다.

이게 아마 제가 제일 좋아했던 강연이었던 것 같습니다. 주로 Karl이 설명한 개념에 대한 그의 에너지와 열정 때문에 말이죠. 현재 플라즈마는 간단한 토큰 전송(ERC20/Ether)을 위해 설계되었습니다만, ERC721과 같은 더 복잡한 토큰들 또는 심지어 더 일반적인 상태 변이를 위해서도 확장이 가능합니다.

플라즈마는 프로토콜이 아니라 디자인 패턴, 테크닉이라는 점을 이해해야 합니다. 플라즈마 체인은 루트 체인만큼 안전해야만 합니다.

플라즈마 기법의 주요 보안 매커니즘은 “플라즈마 Exit(Plasma Exit)”입니다. 플라즈마 체인에 참여하는 사용자가 해당 체인에 참여를 멈추고 루트 체인으로 자신의 자금을 되돌려놓을 수 있도록 하는 절차이지요. 또한 모든 플라즈마 체인은 자신만의 “플라즈마 오퍼레이터(Plasma Operator)”가 운영합니다.

사용자가 플라즈마 체인에서 활동하다가 자신의 자금을 메인체인으로 보내고 싶을 때, 그 사용자는 “Exit 트랜잭션(Exit Transaction)”을 전송합니다(즉, 자신이 일정량의 돈을 가지고 있음을 증명하는 트랜잭션 기록의 머클 증거). 그 시점에, “챌린지 기간”이 있습니다.

챌린지 메커니즘은 대부분의 오프체인 솔루션에서 사용되어 왔습니다. 기본적으로, 누구든지 사용자의 요청이 잘못되었다는 증거를(플라즈마에서는 트랜잭션 기록의 머클 증명, 지불 채널에서는 상대방이 서명한 메시지) 제출하여 챌린지할 수 있습니다.

게다가, 챌린지를 받을 수도 있는 트랜잭션을 생성할 때는 약간의 포상금을 포함해야 합니다. 당신의 트랜잭션이 부당하다고 생각하는 사람들이 챌린지하도록 보상을 거는 것이죠. 마치 무언가를 훔치려고 하면서 “날 잡으면 5달러 줄게”하고 말하는 것과 같죠.

일반적으로, Bob이 루트 체인으로 5 PETH(플라즈마 이더리움)를 되돌려보내고 싶다면, 그는 포상금까지 담보로 포함한 Exit 트랜잭션을 전송해야 합니다. 만약 챌린지 없이 진행된다면, 그는 루트 체인에서 5 ETH(이더리움)를 얻을 수 있습니다. Bob의 Exit 트랜잭션에 대한 챌린지가 성공하면, 트랜잭션은 취소되고 챌린지한 사람은 포상금을 얻게 됩니다.

Alice는 Sam이 Exit 하려는 것을 알아차리고 챌린지를 합니다. 이 경우, Sam의 Exit은 부당하기 때문에 취소됩니다. 그리고 Alice는 Sam의 담보를 받습니다.

더 위험한 경우는 플라즈마 오퍼레이터가 자신이 운영하는 체인을 Exit 하려고 할 때입니다. 이 공격 방식에서 플라즈마 오퍼레이터는 블록 하나를 채굴하여 임의의 양의 PETH를 얻습니다. 그러고 나서, Exit을 시도하여 스마트 컨트랙트에 모든 ETH를 묶어두는 거죠. 이 시나리오에서 Sam과 Alice의 PETH는 플라즈마 오퍼레이터의 PETH보다 먼저 만들어졌습니다.

Sam과 Alice는 오퍼레이터의 부당한 행동을 알아채고 오퍼레이터보다 먼저 처리되는 Exit 트랜잭션을 전송합니다.

플라즈마 컨트랙트를 비우기 위해, 플라즈마 오퍼레이터가 Exit을 전송하면, Sam과 Alice는 이를 알아차리고 그들 또한 Exit을 전송합니다. 오래된 트랜잭션이 먼저 처리되기 때문에, ETH로 교환된 PETH를 먼저 얻습니다. 그리고 플라즈마 오퍼레이터의 Exit은 컨트랙트가 비어있기 때문에 처리되지 않죠.

Karl의 두 번째 발표는 플라즈마 캐시에 관한 것이었습니다. 이것은 아래쪽에 Vitalik의 발표 부분에 나와 있습니다.

마지막은 샤딩 Phase 0과 Phase 1에 관한 것입니다.

샤딩 Phase 0:

  1. 하드 포크 없음
  2. 샤드 검증자들이 모인 검증 관리자 컨트랙트, 최대 100개의 이더리움 샤드, 데이터 가용성 보장

샤딩 Phase 1:

  1. Account Abstraction[1][2][3]
  2. eWASM

다음과 같이, 샤딩에는 3가지 주체가 있습니다:

  1. 사용자: 트랜잭션을 보내는 주체
  2. 블록 생성자: 상태 트랜잭션을 처리하고 블록을 생성하는 주체
  3. 검증자: 블록을 검증하고, 데이터가 사용 가능한지 확인

블록이 어떻게 생성되는지에 대한 더 자세한 설명은 Karl의 강연을 참고하세요! 맘에 드실 겁니다.

Minimal Viable Plasma의 상태

David Knott는 플라즈마의 UTXO 모델을 제시합니다. UTXO 모델은 비트코인과 비슷하게 사용되지 않은 아웃풋을 포함하는 트랜잭션 뭉치를 가지고 있는 사용자를 포함하고, 사용되지 않은 아웃풋 트랜잭션(UTXO)의 합으로 잔액을 계산합니다. 하지만, 이 방법은 증명을 생성할 때 비효율적입니다. 한 명의 사용자가 수천 개의 UTXO들을 가질 수 있고, 이로 인해 증명의 크기가 증가하기 때문이죠. 이 경우에는, 사용자가 본인에게 모든 UTXO들을 전송하고 이들을 하나로 묶는 계정 시뮬레이션을 진행하게 됩니다.

사용자가 플라즈마 컨트랙트에 이더(Ether)를 예치(락)할 때, 예치하는 만큼의 UTXO가 생성됩니다. 사용자는 플라즈마 체인의 빠른 확인과 낮은 수수료를 활용하여 원하는 만큼 많은 트랜잭션을 생성할 수 있습니다. Exit 하고 싶을 때는 UTXO들을 루트 체인 컨트랙트로 전송하고, 예치된(잠긴) 이더 블록을 받으면 됩니다.

메인 체인의 플라즈마 컨트랙트는 최종 중재자(Arbitrator) 입니다.

다른 기능을 제공하는 플라즈마 체인의 플라즈마 체인을 가질 수 있게 하는 것이 목표입니다. 보안은 법원과 유사한 메커니즘으로 유지될 것입니다. 분쟁이 있으면, 루트 체인이 최악의 시나리오를 해결할 때까지 다음 단계의 권한이 발동됩니다.

Plasma Cash

드디어, Vitalik Buterin은 “서프라이즈” 강연에서 “사용자별 데이터 확인이 훨씬 적은 플라즈마”인 플라즈마 캐시를 공개했습니다. 그와 동시에, 자리가 꽉 차는 바람에 강연장 밖에서 Karl의 즉흥 연설이 있었습니다. Karl의 즉흥 연설은 여기서 보실 수 있습니다. 또한, 이 강연은 ethresear.ch 포럼에서 진행 중인 토론의 라이브 버전이기도 합니다.

기본적으로, 플라즈마 캐시는 다음과 같이 변경된 플라즈마와 같습니다¹:

  1. 모든 deposit은 고유 코인 ID를 가지고, 토큰은 분할 및 병합을 할 수 없습니다.
  2. txindex순서로 이진 머클 트리에 트랜잭션을 저장하는 대신, 단순한 희소 머클 트리나 패트리샤 트리에 저장합니다. 사용할 코인의 ID를 인덱스로 가지고 말이죠.

이는 해당 코인에 대체 불가능성을 부여합니다. 결과적으로 코인 거래 내역의 증명에 대한 최적화를 가능하게 하는 것이지요. 이 구조에서 사용자는 관찰하고 있는 코인의 거래내역만(UTXO 모델에 따른 머클 경로) 검증하면 됩니다. 모든 코인을 위해 전체 트랜잭션 체인을 검증해야 하는 것보다 훨씬 효율적인 증명이 가능한 것이죠.

업데이트: 2018년 6월, 우리의 플라즈마 캐시 초기 버전을 발표했습니다. 여기에서 공식 발표를 확인하세요.

상태 채널

여기서는 상태 채널의 세 명의 메인 플레이어들의 비교를 집중적으로 다룰 것입니다: Funfair, SpankChain 및 Raiden Network

Funfair & Fate Channels

이것은 도박과 관련이 있기 때문에, 무작위성을 가지는 자원이 필요합니다. 플레이어와 카지노 사이에 지불 채널이 열렸을 때, 둘 모두가 난수 생성기(RNG)에 시드를 넣습니다. 이는 더욱 안전한 엔트로피 소스를 보장합니다. Jez가 설명했듯이, 페이트 채널은 현재 경쟁에서의 이점을 유지하기 위해 닫혀 있습니다.

FunFair에는 SpankChain의 상태 채널과 유사한 “튜링 완전 상태 채널”이 있습니다. 또한, 임의로 상태 전환이 가능합니다(지불만을 위해 만든 Raiden과는 다르게 말이죠).

그들은 채널을 열기 위해 하나, 정착하기 위해 하나, 총 2개의 트랜잭션을 필요로 합니다. 그 사이의 모든 트랜잭션은 오프체인으로 발생합니다. 페이트 채널은 게임 세션 동안에만 지속되기 때문에 수명이 짧습니다.

페이트 채널과 다른 상태 채널의 차이점

SpankChain & Generalized State Channels

Ameen은 SpankChain의 전반적인 개념을 제공했고, Nathan Ginnever은 SpankChain의 상태 채널 활용에 깊이 뛰어들었습니다. Generalized State Channels와 “Counterfactual instantiation”은 L4Counterfactual에 의해 만들어진 용어입니다.

그 개념(아이디어)은 상태 채널에 참여하고 있는 양측이 스마트 컨트랙트를 위해 서명하고 바이트 코드를 공유하는 것입니다. 이것은 언제든지 블록체인에 배포할 수 있죠. 언제든 실행할 수 있다는 것은 부당한 행동을 막아주고, 양측이 직접 배포하지 않고도 컨트랙트의 규칙을 준수하게 만듭니다.

따라서, 양측 클라이언트들이 모두 예상대로 행동하는 경우, 온체인 트랜잭션이 발생하지 않도록 합니다.

https://youtu.be/qBqnD6_uRGM?t=1627

챌린지가 발생한다면, 이야기가 조금 달라지죠:

본드 매니저 컨트랙트는 채널을 열고 닫는 역할을 합니다. 이는 본딩된 이더/토큰들과 닫혀있는 서브 채널의 최종 상태에서 결정된 잔액을 보유하고 있습니다. 오프체인 클라이언트에서 해석한 것처럼 말이죠.

Raiden Network & Payment Channels

Lefteris Karapetsas라이덴 네트워크에 관한 강연은 그들의 업데이트와 로드맵에 관한 것이었습니다. 라이덴은 이더리움의 라이트닝 네트워크라고 볼 수 있습니다.

라이덴을 사용하기 위해서는 이더리움 노드를 실행할 수 있고, 항상 켜둘 수 있는 컴퓨터가 필요합니다. 저전력 IoT 기기들은 이더리움 노드를 실행할 수 없기 때문에 매우 어려운 작업이죠. 게다가, 언제 어디서나 온라인으로 접속하는 것은 네트워크 커버리지와 에너지 제한으로 인해 여전히 되지 않고 있습니다.

모바일 클라이언트가 라이덴 노드를 실행하지 못하는 것과 같은 편의성 문제도 여전히 존재합니다. 또한, 저전력 기기를 타깃으로 할 때, 적절한 보안을 추가하기 위해 오버헤드가 발생합니다. 위스퍼(Whisper)와 같이 현재 사용 가능한 통신 프로토콜은 확장할 수 있지도 않고, 짧은 지연시간을 가집니다. 그래서 라이덴이 매트릭스를 사용하게 되는 것이죠.

라이덴의 Github에서 찾아볼 수 있듯이, 그들은 여러 개의 저장소로 코드를 리팩토링하였습니다. μRaiden에서 배운 것을 활용해서, 새로운 스마트 컨트랙트는 가독성, 보안 및 gas 최적화에 더욱 중점을 두고 작성했습니다.

10월에 발표된 로드맵과 함께 잘 진행되고 있는(궤도에 오른?) 라이덴

최소 기능 제품(Minimal Viable Product, MVP)의 각 모듈은 거의 완성되었습니다. 테스트넷에서 테스트를 거치고 외부 검사를 받고 나면, 라이덴은 마침내 메인넷에 출시하게 됩니다. 개발자분들은 광범위한 문서가 있으니 참고하세요. 또한, 풀 리퀘스트와 저장소 포킹으로 라이덴에 컨트리뷰트하실 수 있습니다.

다음 그래프를 통해 각 상태 채널 솔루션을 비교해보세요:

상태 채널에 대한 더 자세한 내용은 다음 글들을 참고하세요: [1][2]

검증된 오프체인 연산

이 부분에 대해서는 충분히 논의되지 않은 것 같습니다. Oraclize는 모든 외부 데이터소스(예: web APIs)와 블록체인 어플리케이션(이더리움의 경우 스마트 컨트랙트와 같은 것)간에 보안 인증 채널을 제공합니다¹. 이는 오프체인 컴퓨팅 리소스를 없애는 것으로도 확대할 수 있습니다. 하지만, 여전히 6만 gas의 비용에 대한 체인의 유효성을 검증할 수 있습니다.

자세한 내용은 Oraclize의 Devcon3 강연에 나와 있습니다. 여러분은 오프체인으로 모든 솔리디티 함수를 실행할 수 있고, Oraclize를 통해 그 결과를 받아 검증받을 수 있습니다. 증명이 통과되면, 여러분은 방금 많은 양의 gas를 절약한 것입니다. 증명이 통과되지 않았다면, 트랜잭션을 온체인으로 실행하면 됩니다(TrueBit이 떠오르는군요).

오프체인 실행과 검증이 TrueBit을 약간 떠오르게 하네요

깊이 다루지는 않았지만, Oraclize를 사용하여 지불 채널을 강화하는 방법에 대한 언급도 있었습니다.

Correct By Construction 캐스퍼, 이진 합의부터 샤딩까지

Vlad의 강연과 연구는 ‘correct-by-construction’(CBC)이 가능하면서 잘 정의된 프로토콜을 생성하는 것에 중점을 두고 있습니다. 그 개념은 기존의 방법과는 반대입니다. 기존의 접근법은 프로토콜을 먼저 생성하고 분석하는 것입니다. 하지만, CBC는 분석을 먼저 하고 프로토콜을 생성하죠.

Correct by Construction 방식:

  1. 공식적이지만 부분적으로만 프로토콜 지정
  2. 프로토콜이 충족해야 하는 속성과 증명 정의
  3. 그들을 충족시키는 것으로 증명되었다는 점에서 더 많은 프로토콜을 만족시키도록 유도

목표는 프로토콜의 정확도는 아주 사소하다는 것을 증명하는 것입니다.

이 경우에는, 일련의 수학적 규칙을 정의합니다(오토마타 이론이 이 부분에서 도움이 될 겁니다). 그리고, 프로토콜을 이 규칙들을 준수하여 설계합니다.

Vlad의 강연은 합의 안전과 같은 규칙과 용어들을 정의하며 시작했습니다:

두 상태 σ1과 σ2 사이의 전방향 안전과 σ3과 σ2 사이의 역방향 일관성을 사용함으로써, σ1과 σ2가 공통된 미래의 프로토콜 상태 σ3를 가지는 경우가 있습니다. 이 경우에, σ1에서 이루어지는 모든 결정은 σ2에서 내린 결정과 일치합니다. 이것은 σ1이 σ2와 합의 안전을 가진다는 것이죠.

합의 안전에 대한 보다 심층적인 내용은 이 논문의 Theorem 1을 참고하세요.

드디어, 강연의 샤딩 부분에서 합쳐진 블록에 대한 내용이 나왔습니다. 합쳐진 블록은 샤드들 사이에서 공유되는 내역의 ‘체크 포인트’라고 할 수 있습니다.

merged 블록을 가진 두 샤드

이 강연(슬라이드)을 보고, CBC 논문을 읽고, 이더리움 베를린 밋업에서 진행된 CBC 프로토콜에 관한 Vlad의 다른 강연을 볼 것을 강력히 추천합니다. 이것은 아직 연구 단계이기 때문에 메인넷에 출시 예정이 없습니다.

Vlad의 강연은 따라가기 어려워서 시간을 가지고 이해하기 위해 다시 보기도 하면서 완전히 집중해야 하죠. 하지만 매우 유익하다고 생각합니다. 이 강연은 컨퍼런스에서 가장 길었습니다. CBC 캐스퍼와 프로토콜 설계는 제가 꽤 복잡하다고 생각하는 분야입니다. 앞으로 올릴 글에서 이 분야에 대해 독립적으로 다루려고 합니다.

Loom Network는 어떻게 하고 있나요?

확장성에 있어서, 우리는 사용자들이 비재정용 사이드체인에 특화된 형태인 DAppChain을 만들 수 있도록 소프트웨어 SDK를 개발하고 있습니다. 우리의 최근 글들에서 Loom의 DAppChain에 대해 더 알아보세요:

  1. 백만 명이 사용할 수 있는 이더리움 DApp: 애플리케이션별 사이드체인에 대한 소개
  2. DAppChain: 사이드체인을 통한 이더리움 DApp 확장

긴 글이었습니다! 여러분은 이제 각각의 확장성 프로젝트의 상태와 앞으로 어떤 방향으로 나아갈지를 잘 알고 있어야 합니다. 모든 프로젝트는 오픈 소스로 공개되어 있으니, 컨트리뷰트 하세요!

다음 단계:

  1. 질문이 있나요? 우리의 블록체인 기반 Q&A 사이트, DelegateCall.com에 물어보고 ERC20 토큰을 받아가세요!
  2. Loom Network 메일링 리스트에 가입하고 우리의 업데이트를 메일함으로 바로 받아보세요!
  3. 이더리움의 확장성에 관해 이야기하고 싶으신가요? 우리의 텔레그램 그룹에서 대화에 참여해보세요 — 한국 텔레그램은 여기로 오세요 😉

Loom Network는 고성능 디앱을 확장하기 위한 멀티체인 상호운용 플랫폼입니다 — 이미 상용 가능한 상태이며, 감사 및 실제 테스트를 거쳤습니다.

Loom 베이스체인에 여러분의 디앱을 한 번 배포하고 나면, 오늘날 모든 주요 블록체인에 걸쳐 가능한 가장 광범위한 사용자 기반에 접근할 수 있습니다.

Loom Network를 처음 접하시나요? 여기서 시작하세요.

LOOM 토큰을 스테이킹해서 베이스체인을 보호하는 데 참여하고 싶으신가요? 여기서 그 방법을 알아보세요.

우리가 하는 일이 마음에 드시나요? 그렇다면 어서 우리의 프라이빗 메일링 리스트에 가입하고, 우리가 계속 전달하는 모든 업데이트를 계속 받아보세요.

--

--