Ethereum Two. Point. Oh

Ethereum Two. Point. Oh

2019, Aug 08    

이더리움 2.0에 관한 난해하고 미스터리한 내용을 정리합니다. 여러 사이트에 소개된 일반적인 설명을 정리합니다. 😕

PoW vs PoS

가장 먼저 드는 의문은, 그렇다면 로드맵 상에 있던 Serenity는 어떻게 된 것이지? 하는 것입니다. 이더리움 2.0(Eth2.0)이 곧 Serenity입니다. 이더리움의 PoS인 캐스퍼(Casper)와 확장성을 위해 샤딩(Sharding) 기술을 적용한다는 의미로 “Shasper”라고 부르기도 합니다. 아무튼 공식 명칭은 이더리움 2.0으로 정해진 것 같습니다.

이제까지 이더리움은 하드포크를 통해 네트워크를 업그레이드했습니다. 다시 말해서 여러 가지 개선 사항(EIP)들을 적용한 이더리움 공식 클라이언트 Geth를 새로 배포하는 형태로 진행이 되어 왔습니다. 그렇다면 이더리움 2.0도 그런 식일까요?

결론부터 말하면 새로운, 완전한 PoS 블록체인을 구현하는 것으로 보는 것이 맞을 것 같습니다. 전에는 PoW+PoS의 하이브리드 형태(Casper FFG)를 거치기로 했으나 처음부터 “full” PoS로 가는 것으로 결정되었습니다. 물론 어느 날 갑자기 새로운 이더리움이 출현하는 것이 아니라 단계적으로(현재 Phase 0, 1, 2 세 단계를 로드맵으로 진행) Serenity로 전환될 것입니다.

그럼 현재의 PoW 이더리움, 이더리움 1.0이라고 말하는 이더리움은 어떻게 변할까요? 일단 변하지 않는다고 합니다. 즉 현재 이더리움은 그냥 PoW 그대로, 이더리움 2.0이 오픈된다고 해도, 두 개의 이더리움 네트워크가 공존할 것이라고 합니다. 마이너들과 투자자들을 포함해서, 이더리움 커뮤니티 내에서도 각자 이해관계에 따라 다양한 입장이 나올 가능성도 많습니다.

이 공존이 일시적인 것이라고 이해할 수도 있고(여기서 일시적이라 함은 최소 몇 년의 기간을 예상), 그냥 서로 영원히 공존할 것이라는 의견도 있습니다. 분명한 것은 일부러 이더리움 1.0을 폐쇄하거나 마이그레이션을 하는 것은 아니라는 것입니다. 물론 난이도 폭탄 등을 통해서 채굴이 어렵게 될 수도 있지만 여전히 트랜잭션은 처리될 것입니다.

뿐만 아니라 이더리움 1.0의 이더(채굴 보상, ETH)와 이더리움 2.0의 이더(검증 보상, “BETH”)은 서로 다른 이더로 구분될 수 있다고 합니다. 물론 본질적으로 동일하지만 BETH는 당분간 이더리움 1.0으로 전송될 수 없으므로 구분된다고 볼 수도 있겠습니다. 이더리움 1.0의 이더를 2.0으로 전환하려면 이더리움 1.0에서 가지고 있던 이더를 “소각(burn)”해야만 하고 다시 되돌릴 수 없습니다.

1 ETH를 1 BETH로 전환하는 셈이니 동일한 가치를 가지며 “fungible”하다고 말은 하지만 과연 거래소에서 그대로 그것이 반영될지는 모르겠습니다. ETH와 “BETH”의 가치는 이더리움 2.0의 성공과 그에 따른 대중의 인식에 달려 있을 것입니다. 😅

비콘(Beacon) 체인

이더리움 2.0의 Phase 0에서 구현될 가장 핵심적인 것은 비콘(Beacon) 체인입니다. 비콘이라는 사전적 의미를 생각해볼 때 샤드(shards)를 관리하고 감시하는 역할을 담당하는 것으로 예상할 수 있습니다. 비콘 체인은 일반적인 트랜잭션을 처리하는 체인이 아니며 실제적으로 PoS가 구현되는 체인으로(“PoS 체인”이라고 하면 비콘 체인을 의미합니다) 검증단의 선택, 검증보상과 페널티, 검증 서명, 난수생성(RANDAO/VDF) 등의 기능을 제공할 것이라고 합니다. 비콘 블록에는 이와 관련된 정보들이 저장됩니다.

비콘 체인에서는 더 이상 PoW로 블록을 생성하지 않습니다. PoS는 “지분증명”이고 그 지분이란 현재 이더리움 1.0에서 보유한 이더가 됩니다. 현재는 최소 32 이더의 “지분”을 담보로 제공해야(staking) 검증단 후보군에 들어갈 수 있습니다. 당연히 이더리움 1.0에 배포된 “deposit 컨트랙트”에 이더를 맡기게 될 것이고 비콘 체인에서는 이를 참조하여 검증단 후보군, “validator pool(set)”을 구성하고 여기에서 검증자들을 랜덤하게 선택하게 됩니다. 32 이더보다 더 많은 이더를 staking하는 경우에는 후보군에서 자리를 여러 개 차지하는 셈이 되므로 검증단으로 선택될 확률이 높아질 수는 있겠습니다.

참고로 “deposit 컨트랙트”는 2019년 10월로 예정된 Devcon 5에서 공개되고 검증단 후보 “모집”이 시작될 것이라고 합니다(그러나 미확정된 사항들로 인하여 연기됨). 네트워크의 안정성을 보장할 수준으로 이더가(약 300만 이더를 예상) staking 되면 비콘 체인을 오픈할 계획이라고 합니다. 순조롭게 진행된다면 2020년 초에는 이더리움 2.0 Phase 0의 모습을 보게될 것으로 기대합니다.

The plan is to deploy the contract in a ceremony at DevCon V in early October this year. Once the deposit contract has received around two million ether, representing sixty-five thousand validators, we can start the beacon chain with confidence that it will be secure against attack.

비콘 체인에서 검증단의 역할은 두 가지로 구분됩니다. 하나는 블록 생성자(또는 제안자, proposer)이고 다른 하나는 블록의 무결성을 보증하는 증인(attester)입니다. 이 둘을 합쳐 검증자(validators)라고 하는데 두 역할이 고정적인 것은 아니고 랜덤하게 결정되기 때문에 어떤 경우에는 블록을 생성하기도 하고 어떤 경우에는 블록 검증을 하기도 합니다. 블록 생성자가 블록을 제안하면 검증자들이 그 블록을 “원장에 기록”할 것인지 확인합니다. 이것을 “attestation”이라고 합니다. 블록이 올바르다는 사실에 대한 “증인”이 되는 것입니다(투표에 비유하기도 합니다). 각 검증자들은 어떤 블록에 서명했는지 기록을 남기게 되는데 이 때 사용되는 서명 방식이 BLS signature 이고 국제인터넷표준화기구(IETF)에서 표준화 작업 중에 있다고 합니다.

정해진 타임 슬롯(약 12초)마다 검증단 안에서 블록 생성자 하나와 다수의 검증자들이 랜덤으로 선택되고 체인에 추가될 블록을 결정하게 됩니다. 하나의 검증자는 타임슬롯에서 한 블록에만 서명할 수 있고 또 두 개의 슬롯에 배정될 수 없습니다. 타임슬롯 32개를 “epoch”으로 정하므로(슬롯이 12초이면 약 6.4분) 검증단은 한 epoch 동안 계속 블록 생성과 검증을 수행합니다. epoch을 주기로 랜덤하게 새로운 검증단이 구성됩니다.

모든 슬롯에서 블록이 반드시 생성되어야 하는 것은 아닙니다. 검증자가 오프라인되거나 네트워크 지연 등으로 합의를 이루지 못할 경우는 블록이 생성되지 않을 수 있습니다. 그러나 슬롯 2개 이상의 “skip” 현상은 발생하지 않습니다(어느 시점에 블록 생성 주기가 최대 18초가 될 수 있다고 합니다).

비콘 노드들은 동일한 검증단 후보군에서 각 슬롯마다 배치할 검증자들을 랜덤으로 선택합니다. 비콘 체인의 모든 노드들은 독립적이지만 서로 동기화되어 있으므로 슬롯에서 블록을 제안하는 검증자와 블록을 확인하는 검증자들은 동일합니다. 어떤 슬롯에서 블록을 제안할 수 있는 검증자는 단 하나입니다. “fork”는 어떤 슬롯에서 생성된 블록이 네트워크 지연 등의 이유로 제대로 전파되지 않았을 때, 즉 어떤 노드들은 해당 슬롯에서 블록이 만들어지지 않았다고 생각하고 skip할 때 발생할 수 있습니다. 비콘 체인에서는 LMD(Latest Message Driven) GHOST를 사용하여 “canonical” 체인을 유지합니다.

검증단에서 빠져 나오려면 그런 의사를 표시한 후 일정 시간이 지나 staking한 이더와 함께 그 동안 받은 검증 보상을 샤드 체인 중 하나로 송금하여 사용할 수 있습니다(아니면 비콘 체인의 계정 잔액으로 남을 것입니다). 이더리움 1.0에서는 변화가 없습니다. 다시 말해서 검증단 후보군에서 나오더라도 1.0의 이더로 환원할 수 없습니다(이더리움 2.0을 위한 staking 과정에서 기존 이더리움 1.0의 상당한 양의 자산이 동결되므로 향후 이더의 가치가 상승할 것으로 기대하고 있습니다).

검증자는 검증자 클라이언트로 비콘 노드에 접속합니다. 실제 블록을 만들고 검증하는 것은 검증자 클라이언트입니다. 그런데 검증자 클라이언트가 되기 위한 컴퓨터 사양은 PoW의 마이닝처럼 높은 사양을 필요로 하지 않습니다. 라즈베리파이에도 검증자 클라이언트를 설치할 수 있을 정도라고 하니 누구나 검증자가 될 수 있을 것이고 “스테이킹 풀”을 운영하는 서비스들의 등장도 예상되고 있습니다.

샤드(Shard) 체인

이더리움 2.0에서는 현재 단일 블록체인에서 처리하던 트랜잭션들을 이제 샤드(shard)라고 하는 작은 단위로 나누어진 네트워크에서 처리합니다. 샤드는 Phase 1에 속해 있지만 Phase 0과 병행하여 개발되고 있습니다.

최근 기사에 의하면 비탈릭 부테린이 1024개에서 64개의 샤드로 줄이자는 제안을 했다고 합니다. 따라서 이더리움 2.0은 당초 기대했던 큰 폭의 성능 개선은 이루어지지 않을 듯 합니다.

샤드 체인에서 블록을 생성하고 검증하는 것 역시 비콘 체인에서 선택된 검증단이 수행합니다(검증단을 “committee”라고 합니다). 즉 비콘 체인에서 만들어지는 검증단이 샤드에도 배정되게 됩니다. 아마 샤드가 시작되면 비콘 체인에 연결하여 블록을 생성하고 검증할 검증자들을 랜덤하게 선택하게 될 것입니다. 주기적으로 랜덤하게 새로운 검증단이 샤드에 배정되므로 어느 특정 샤드에서 검증자의 역할을 계속 하는 것은 불가능합니다.

한 검증단에 속한 검증자의 수는 현재 최소 111개(최대 2048)를 권장하고 있습니다. 따라서 1024개의 샤드와 각 샤드마다 111개의 검증자가 있으므로 staking되는 이더는 3,637,248 정도가 되겠습니다. PoW에서는 해쉬파워가 네트워크를 유지했다면 PoS에서는 staking 이더가 그 역할을 하는 것입니다.

현재의 이더리움의 메인넷 기능은 샤드 체인에서 이루어진다고 보면 될 것 같습니다. 지금처럼 계정이 존재하고 스마트 컨트랙트가 배포될 것입니다. 하지만 샤드에 속한 계정들도 나누어 존재하게 될 것이므로, 예를 들어 샤드 A에 있는 계정 잔액은 다른 샤드 B에 있는 계정 잔액과 다를 것입니다. 일반 사용자에게는 기존 이더리움의 자산을 어떻게 샤드로 옮길 수 있을까 궁금할 수 있는데 아직 구체적인 방법이 제시된 것은 아닌 것 같습니다. 샤드에서는 그 자체로 발행되는 코인(native coin)이 없으므로 비콘 체인에 있는 자산이 어떤 식으로든 연계되어야 합니다(샤드가 마치 사이드 체인처럼 생각할 수 있는 부분입니다).

샤드 체인은 트랜잭션 데이터만 존재하고 그것을 검증할 수 있는 곳은 비콘 체인입니다. 즉 샤드 체인의 블록은 비콘 체인의 블록과 “크로스링크(crosslinks)”되어 있으며 샤드 블록을 검증한 검증자들의 서명을 포함하여 블록의 무결성을 비콘 체인에 기록한다는 것을 의미합니다. 크로스링크는 한 epoch마다 주기적으로 생성되는 것으로 해당 시간동안 생성된 샤드 블록들의 “종합적인 상태(state)”를 비콘 체인에 기록하도록 되어 있습니다. 아마 각 샤드 블록의 state root 해쉬를 기록하는 것과 같은 방식이 아닐까 합니다.

단일 블록체인이 샤드 체인으로 나누어지므로 당연히 샤드 끼리는 어떻게 되지? 하는 의문이 생깁니다. 어떤 샤드에 배포된 컨트랙트와 인터페이스하려면 먼저 그 샤드에 접속해야 할 것입니다. 다른 샤드에는 해당 컨트랙트가 없기 때문에 샤드들 사이의 컨트랙트 데이터 참조는 여러 가지 난제들이 있을 것 같습니다. 아직 Phase 0의 비콘 체인에 집중하고 있어서 확실하게 결정된 것은 없는 듯 하고 현재까지 알려진 바로는 이러한 “cross-shard”의 통신은 여러 단계를 거쳐야 하므로 매우 느릴 것으로 예상하고 있습니다. 레딧에서 비탈릭의 답변은 다음과 같습니다.

fig02

보상과 벌칙

검증단 후보군에 들어갔지만 어떤 이유로 인해 오프라인이 되면, 블록 생성자 또는 검증단으로 선택되더라도 아무것도 하지 않으면 페널티가 주어지게 됩니다(이러한 경우를 “inactive leak”라고 합니다). 맡겨 놓은 32 이더를 일정 비율로 차감하게 되고(차감된 이더는 되찾을 수 없습니다) 오프라인 시간이 길어질수록, 즉 검증단의 역할을 제대로 수행하지 못하는 시간이 길어질수록 그 비율은 점점 높아지게 됩니다.

다시 말해서 일시적으로 오프라인이 되는 것은 페널티가 작지만 지속되는 경우는 점점 큰 페널티를 적용한다는 의미가 될 것 같습니다. 하지만 그렇게 차감되어 staking한 이더를 모두 잃는 것이 아니라 어떤 임계값(16 이더)에 도달하면 자동으로 검증단 후보군에서 제외(kick-out)됩니다.

검증단이 모든 일을 정상적으로 수행하는 경우에는 계속 검증단으로 남을 수 있지만 규칙을 어기고 가짜 트랜잭션을 만들거나 블록을 조작하는 등의 행위를 할 경우 “슬래셔(slasher)”가 해당 계정을 “슬래쉬(slashing)”하게 됩니다. 이더리움 재단의 저스틴 드레이크는 페널티와 슬래쉬를 구분해야 한다고 말합니다. 슬래쉬는 의도적으로 나쁜 행위를 한 경우의 벌칙이라고 할 수 있습니다.

노드

이더리움 2.0의 네트워크가 어떤 형태로 구성될지 궁금할 것입니다. 네트워크에서 운영될 노드들의 유형은 Shard FAQ에 간단하게 언급되어 있습니다. 단일 블록체인의 경우와는 다르게 이더리움 2.0에서는 비콘 체인, 샤드 체인 등 여러 개의 “원장”이 존재할 수 있습니다. 그렇다면 이들 원장 데이터들은 어떻게 저장될까요?

먼저 가장 중요한 비콘 노드들이 필요합니다. “Super-full node”는 비콘 체인 블록과 여기에 연결된 샤드 블록의 “크로스링크” 정보를 가지게 될 것입니다. 이 “Super”의 의미가 비콘 체인과 64개의 샤드에 대한 모든 정보를 의미하는지는 명확하지 않습니다. 비콘 노드들 중에는 그냥 비콘 체인 데이터만 가지고 있을 수 있는데 이것을 “Top-level node”라고 합니다.

“Single-shard node”는 “Top-level node”이면서 특정 샤드 하나의 데이터만 유지하는 노드입니다. 아마 이런 유형의 노드가 가장 많을 것 같습니다. 결국 샤드는 비콘 체인의 검증단에 의해 관리되는 체인이므로 항상 비콘 노드와 함께 운영될 것입니다. 어떤 샤드에서 발생한 트랜잭션들을 검증하는 것 역시 비콘 체인의 검증단 클라이언트들이기 때문입니다.

나머지 “Light node”는 블록의 헤더 정보만 유지하는 노드입니다. 확인이 필요한 경우에만 다른 “full” 노드로부터 데이터를 받아서 검증합니다(현재의 SPV 노드를 생각하면 될 것 같습니다).

사용자 애플리케이션은 어떻게 이더리움 2.0에 연결될 수 있을까요? 현재는 Metamask를 통해 간접적으로, 또는 직접 이더리움 게이트웨이 서비스를 통해 연결하는 식인데, 이더리움 2.0에서는 애플리케이션이 연결하려는 특정 샤드를 지정해야 될 것 같습니다.

실행 환경(Execution Environment, EE)

Phase 2에서 진행될 애플리케이션의 실행 환경은 아직 갈 길이 많이 남았습니다. 현재 EVM이 eWasm으로 바뀔 것이고 그에 따라 여러 언어로 스마트 컨트랙트를 작성할 수 있게 될 것 같습니다. 최근 기사에 의하면 가장 큰 변화는 앞으로 단일 트랜잭션이 실행환경 자체 내에서 지원되지 않을 것이라고 합니다. 이것은 현재 단일 이더리움 네트워크에서는 트랜잭션이 실패하는 경우 롤백이 되는 것이 당연한 것처럼 여겨지는데 샤딩이 적용된 이후에는 마치 다중 데이터베이스의 “Two-Phase Commit” 과 같은 상황이 발생하기 때문입니다. 물론 동일한 샤드 내에서는 여전히 트랜잭션의 원자성(atomicity)은 보장될 것이라고 합니다.

실행 환경에서 주목할 것은 “Stateless”라는 점입니다. “Stateless”가 어떤 의미로 사용되는지는 정확히 이해할 수 없지만 현재 이더리움은 하나의 “원장”에 모든 상태들이(과거와 현재) 저장되고 노드들이 이 대용량 데이터들을 복사해야 하는 반면, “Stateless” 에서는 검증에 필요한 데이터(witness)만을 필요로 하는 방식이므로 누구나 부담없이 경량 노드를 사용할 수 있다는 장점이 있습니다. 또 실행 환경이 어느 하나로 통일되는 것이 아니라 다양한 실행 환경이 샤드에서 운용될 수 있을 것이라고 합니다.

다음 에 있는 내용을 그대로 인용해보겠습니다.

As opposed to Eth1 which specifies how accounts/contracts look like, how the state is structured as a MPT, semantics of the EVM, etc. Eth2 abstracts these details and pushes them to layer 2. Instead Eth2 works with pure functions/reducers which have access only to 32 bytes of storage. These pure functions are expected to be Wasm blobs and are often referred to as execution environments (EEs). The 32-byte storage will most likely be used to store a commitment to the full state (e.g. merkle root) of that EE.

이렇게 되면 현재 이더리움의 PoW 체인도 하나의 실행 환경으로 비콘 체인의 “관리” 하에 들어가는 형태가 될 수 있다고 합니다.

This gives Eth2 a great degree of freedom. Various execution engines with completely different models can run on this framework. A few examples would be: Eth1 as an EE on top of Eth2, various account-based or UTXO-based token EEs, zero-knowledge based EEs (e.g. STARK verifier EE or SNARK verifier EE), Plasma OVM-like EEs, Libra EE, etc.

fig01

References

https://github.com/ethereum/eth2.0-specs