칼럼을 정리하며 이더리움 비콘체인을 살펴보았다.
머지 이후 비콘체인이 이더리움의 메인 체인이 되었기에 깊이 알 필요가 있다.
슬롯, 검증인, 체크포인트와 최종성, 슬래싱 행위 등 비콘체인의 핵심 개념을 이해했다.
https://ethos.dev/beacon-chain/
(해당 글은 위 칼럼의 요약, 번역입니다.)
비콘체인은 슬롯과 에폭 단위로 구성된다. 각 슬롯은 12초, 한 epoch은 6.4분에 해당한다. 한 슬롯당 하나의 블록이 채워지게 된다. 제네시스 블록은 슬롯 0에 포함된다.
지분증명에서 검증인(validator)는 작업증명에서의 채굴자와 유사하다. 검증인들은 이더리움의 합의 알고리즘을 운영한다.
검증인 중, 랜덤하게 블록 제안자(proposer)가 선정된다. 블록 제안자는 블록을 생성할 권한을 갖는다. 대부분의 경우에 검증인은 블록에 투표하는 증언인(attester)의 역할을 하게 된다. 투표 결과는 비콘 체인에 기록된다.
(어떤 슬롯에는 블록이 없을 수도 있다. 제안자가 오프라인이거나 sync가 맞지 않아 블록을 제안하지 못하게 되는 경우 발생하는 경우이다.)
모든 에폭마다, 검증인은 랜덤하게 슬롯에 배당된다.
증언(attestation)은 기본적으로 검증인의 투표이다. 그런데 모든 투표가 같은 영향력을 지니는 것은 아니며, 검증인의 잔액(지분)에 따라 표의 가중치가 설정된다. 증언은 검증인들에 의해 전파된다.
검증인은 서로를 감시하는 역할도 한다. 컨플릭이 나는 투표를 한다던지, 하나가 아닌 여러개의 블록을 제안한다던지 하는 경우를 살피고, 이를 신고하면 보상을 받을 수 있다.
비콘 체인의 컨텐츠는 검증인들의 주소, 검증인들의 상태, 그리고 투표 결과의 기록이라고 할 수 있다. 검증인들은 비콘체인에 의해 활성화되고, 상태로 변환될 수 있다.
검증인은 가상의 개념이고, 스테이커를 통해 활성화된다. 작업증명에서, 유저는 채굴자가 되기 위해 하드웨어를 샀다. 지분증명에서는, 유저는 검증인을 활성화시키고, 검증인에 영향을 미치기 위해 이더를 스테이킹한다.
명료히 말하자면, 스테이커는 지분을 갖는 주체이고, 검증인은 밸런스(balance;잔액)을 갖는 주체이다. 각 검증인은 최대 32ETH의 밸런스를 가질 수 있지만, 스테이커는 그의 모든 이더를 스테이킹할 수 있다. 즉, 스테이커가 스테이킹하는 매 32ETH마다 하나의 검증인이 활성화되는 것이다.
검증인은 비콘체인 노드를 사용하는 검증인-클라이언트에 의해 실행된다. 비콘 노드는 비콘 체인의 정보를 읽는 역할을 하는데, 검증인-클라이언트는 이 비콘 노드의 기능을 구현하거나 직접 호출할 수 있다. 하나의 검증인 클라이언트는 여러 검증인을 동작시킬 수 있다.
위원회는 검증인 그룹이다. 보안을 위해 각 슬롯은 최소 128 검증인으로 구성된 위원회를 갖는다. 악의적인 검증인(공격자에 의한)이 위원회의 2/3을 차지하는 것은 10^-12의 확률이다.
임의의 숫자를 선정하는 무작위 비콘(표지, 신호)의 개념으로부터 비콘체인이라는 이름이 탄생했다. 비콘체인은 RANDAO라는 유사랜덤 과정을 통해 합의를 이끌어낸다.
매 에폭마다, 유사랜덤 프로세스인 RANDAO는 각 슬롯에 배당될 제안자를 선정하고, 위원회에 들어갈 검증인들을 뒤섞어준다.
사실 RANDAO는 검증인의 밸런스에 가중치를 두고 제안자를 선택한다. 검증인이 특정 슬롯의 제안자로 선정되고, 동시에 그 슬롯의 위원회 멤버가 될 수도 있다. 이는 1/32의 확률로 발생할 수 있으므로 대충 한 에폭당 한번씩이라고 생각하면 된다.
지금까지 말한 내용은 검증인이 8192개 이하인 경우를 상정하는데, 이를 넘어서게 된다면 한 슬롯당 복수의 위원회가 배정될 것이다.
위 그림은 세 슬롯에 대해 여태까지 설명한 내용을 종합한 다이어그램이다.
검증인은 한 에폭에 딱 하나의 위원회에만 속할 수 있다. 일반적으로, 8192개 이상의 검증인이 있는데, 이는 어떤 슬롯에는 두 개 이상의 위원회가 배정될 수 있음을 의미한다. 모든 위원회는 최소 128 검증인을 포함하며, 같은 크기를 갖게 된다.
매 에폭마다 검증인은 모든 슬롯에 균등하게 분배되며, 적절한 사이즈의 위원회로 다시 나뉘게 된다. 각 위원회가 최소 128개의 검증인을 갖추게 하기 위해 셔플링 알고리즘이 작동한다. 모든 슬롯에 속한 검증인들은 비콘체인 헤드에 투표하게 된다.
체크포인트는 에폭의 첫번째 슬롯의 블록이다. 만약 해당 슬롯이 비어있다면, 체크포인트는 앞선 블록 중 가장 최근의 것으로 선정된다. 모든 에폭은 하나의 체크포인트만 가질 수 있지만, 반대로 하나의 블록은 여러 에폭의 체크포인트가 될 수 있다.
(위 다이어그램은 한 에폭당 64개의 슬롯이 있음을 가정한다)
65번부터 128번까지의 슬롯이 비어있다고 하자. 위 그림에서 두번째 에폭의 체크포인트는 원래 128번 슬롯의 블록이었어야 한다. 그러나 65번부터 128번까지의 슬롯이 비어있는 관계로, 블록이 존재하는 가장 마지막 슬롯인 64번이 두번째 에폭의 체크포인트가 된다. 마찬가지로 세번째 에폭의 체크포인트는 192가 아닌 180이 된다.
몇몇 다큐먼트(Gasper 공식 문서를 비롯한)에서는 EBB(에폭 바운더리 블록)라는 용어가 사용된다. 이는 체크포인트와 같은 말이다.
LMD GHOST 투표에서, 검증인은 현재 에폭의 체크포인트인 '타겟'에도 투표를 하게 된다. 이러한 투표는 캐스퍼 FFG 투표라고 불리며, 이는 이전 체크포인트인 '소스'에도 투표하는 것을 포함한다.
위 다이어그램에서, 에폭 1의 검증인은 64번째 슬롯의 블록을 '타겟'으로, 제네시스 블록을 '소스'로 투표한 것이다. 에폭 2에서도 같은 검증인이 같은 체크포인트에 투표했음을 알 수 있다.
LMD GHOST 투표는 검증인 자신이 할당된 슬롯에서만 이루어지는 반면, FFG 투표는 모든 검증인들이 각 에폭의 체크포인트마다 진행할 수 있다.
모든 활성 검증인의 밸런스 중 2/3 이상이 투표한 경우를 압도다수라 한다. 세 활성 검증인이 있다고 하자. 그 중 둘은 각각 8ETH를 보유하고 있고, 나머지 하나가 32ETH를 보유하고 있다. 아무리 8ETH를 보유한 둘이 투표한다 하더라도 압도다수를 형성할 만큼의 밸런스가 되지 않기에, 투표 결과는 32ETH를 가진 검증인의 손에 달려있게 된다.
한 에폭이 끝났을 때 특정 체크포인트가 2/3 압도다수의 선택을 받은 것이라면 곧바로 정당화된다.(justified) 만약 B체크포인트가 정당화되고 바로 다음 에폭의 체크포인트가 정당화되면, B체크포인트는 최종화된다.(finalized) 일반적으로 체크포인트는 두 에폭에 걸쳐 확정되고, 이는 대략 12.8분이다.
평균적으로, 사용자의 트랜잭션은 어떤 에폭의 중간 즈음의 블록에 위치하게 될 것이다. 즉, 다음 체크포인트까지 1/2에폭의 거리를 갖게 되며, 체크포인트는 두 에폭 후에 확정되므로, 사용자의 트랜잭션은 도합 2.5에폭, 16분 후에 최종화되는 것이다. 보통 한 에폭의 22번째 슬롯에는 2/3 이상의 투표가 포함되었을 것이므로 트랜잭션의 최종화는 평균 14분으로 볼 수 있다. (16+32+22 슬롯)
블록은 투표, 정당화, 최종화 과정을 거쳐 확정(confirmation)된다.
(64번째 슬롯이 체크포인트로 정당화되고, 앞선 32번째 슬롯의 체크포인트가 최종화되는 과정)
간단하게 설명하기 위해, 모든 검증인이 같은 밸런스를 갖는다고 가정하겠다.
96번째 슬롯의 EBB가 제안(에폭 3의 시작)되었다고 하자. 이러한 제안은 에폭 2의 투표 완료를 포함하며, 에폭 2 체크포인트에 대한 투표가 2/3 압도다수를 형성하게 된다. 이는 에폭 2 체크포인트의 정당화와 에폭 1 체크포인트의 최종화를 수반한다. 에폭 1 체크포인트가 최종화되었다는 것은, 그에 앞선 모든 블록들이 최종화되었음을 의미하기도 한다.
체크포인트를 최종화할 때, 최종화되는 블록의 갯수에는 제한이 없다. 최종화가 에폭 경계에서만 결정되긴 하지만, 투표들은 각 블록에서 진행되고, 축적됨을 기억해야 한다.
같은 그림이지만, 제네시스부터 시작되는 다음 시나리오들을 생각해보자.
시나리오 #1
첫번째 슬롯부터 63번째 슬롯까지의 제안자가 온체인에서 블록을 제안한다. 에폭1의 체크포인트(32번째 슬롯의)는 검증인의 55%의 표를 받았다고 하자. 에폭2의 체크포인트(64번째 슬롯의)가 제안되고, 이는 에폭1의 투표를 포함한다. 여기서, 결과적으로 에폭1의 체크포인트가 도합 검증인의 70%의 표를 받았다고 하자. 2/3 압도다수가 형성되었으므로 에폭1의 체크포인트는 정당화된다.
한편, 에폭2의 체크포인트는 에폭2 슬롯들을 거치며 표를 받았지만 압도다수를 형성하지는 못했다. 이는 다시, 위와 같은 방식으로 에폭3의 체크포인트가 제안되며 에폭2의 체크포인트가 정당화된다. 에폭2 체크포인트의 정당화와 동시에 에폭1의 체크포인트와, 그에 선행하는 모든 블록은 최종화된다.
시나리오 #2
에폭1의 체크포인트가, 에폭2의 체크포인트가 제안되기 전에 이미 2/3 압도다수를 달성했을 수도 있다. 가령 32번째 슬롯부터 54번째 슬롯의 블록 투표에서, 이미 체크포인트를 정당화하기 위해 필요한 표를 모두 획득했을 수 있다. 이러한 경우, 체크포인트는 에폭2 전에 정당화된다. 물론 한 에폭 내에서 정당화가 발생하더라도, 최종화는 다음 에폭 이후에 발생하게 된다.
블록의 정당화는 때로는 두 에폭 이전의 블록들을 최종화로 이어질때도 있다. Gasper 공식 문서는 이러한 상황들을 논의하고 있는데, 이는 대개 높은 지연, 망 분리, 혹은 강력한 공격과 같이 예외적인 경우에 해당한다.
(본 글에서는 attestation 개념을 맥락에 따라 증언으로도, 투표로도 표현하고 있다는 점에 유의하라.)
증언은 LMD GHOST 투표와 FFG 투표를 모두 포함한다. 일반적으로, 모든 검증인은 한 에폭당 하나의 증언(투표)을 진행한다. 하나의 증언 당 32개 슬롯 중 하나가 온체인에 포함될 가능성이 있다. 이는 곧 한 에폭에서 검증인의 증언 두 개가 온체인에 포함될 수 있음을 의미한다. (필자 - LMD GHOST와 FFG에서 각각 target과 source를 의미하는 것으로 보이는데, 확실치 않다.)
검증인은 그들이 각자 할당받은 슬롯에서의 증언이 온체인에 포함되었을 때 가장 많은 리워드를 받는다. 추후에 포함되는 경우는 그보다는 적게 받게 된다. 검증인에게 준비할 시간을 주기 위해, 그들은 한 에폭 전에 위원회에 지정된다. 제안자는 에폭이 시작한 후에 정해진다. 여전히 비밀 리더 선거(secret leader election) 연구는 제안자들에 대한 공격이나 부정 청탁을 막는 것을 목표로 진행되고 있다.