[Xangle Digest]
※해당 컨텐츠는 지난 7월 8일 외부에서 기발간 된 컨텐츠입니다. 컨텐츠에 대한 추가적인 주의사항은 본문 하단에서 확인해주세요.
목차
1. 캐스퍼란?
2. 조금 더 깊게, 캐스퍼 프로토콜
3. BFT 기반 지분증명
4. 페널티 부과를 통한 Nothing-at-Stake 문제 해결
5. 캐스퍼의 Safety와 Liveness
6. 동적인 검증인 집합: Dynamic Validator Sets
7. 마무리: 지분증명으로 향해가는 이더리움 2.0
1. 캐스퍼란?
캐스퍼는 기존 이더리움의 작업증명 방식의 합의 알고리즘에 더하여, 지분증명을 기반으로 블록을 확정시키는 추가적인 메커니즘입니다.
이더리움은 기본적으로 작업증명 기반의 나카모토 컨센서스에 기반한 규칙에 따라 블록을 생성하는데, 이때 지리적으로 거리가 멀리 떨어져 있는 채굴자가 동시에 블록을 생성하게 되면 같은 블록 높이에 블록이 여러 개 생성되는 포크가 발생하게 됩니다.
나카모토 컨센서스에서는 ‘어떤 포크가 더 많은 연산을 통해 생성되었는가’라는 Fork Choice Rule에 따라 여러 개의 포크 중 하나를 선택합니다. 이 말은 곧, 이더리움 네트워크에서는 악의적인 채굴자가 절반 이상의 컴퓨팅 파워(이하 해시 파워)를 장악한다면 언제든 임의적으로 포크를 생성하여 원래의 정상적인 포크를 앞지르고, 새로운 Canonical Chain으로 인정받게 하는, 이른바 51% 공격이 가능하다는 것을 의미합니다. (나카모토 컨센서스에서의 51% 공격에 대한 보다 자세한 내용은 나카모토 컨센서스 아티클에서 확인하실 수 있습니다.)
캐스퍼는 이러한 공격에 대한 저항성을 높이기 위하여, 기반이 되는 나카모토 컨센서스 위에 더해진 추가적인 안전장치입니다. 캐스퍼는 매 32블록 마다 [1] 나카모토 컨센서스에 의하여 발생한 여러 포크 중 하나를 결정하고 ‘확정’(finalize, 이하 확정)시키는 체크포인트를 생성합니다. 따라서 악의적인 포크를 생성하여 원래의 정상적인 체인을 롤백(Roll Back, 악의적인 포크가 시작된 지점으로 체인을 되돌리는 것. 이하 롤백)시키는 51% 공격이 발생하더라도, 캐스퍼에 의하여 이미 한번 ‘확정’된 체크포인트 이전의 블록들로 롤백시킬 수는 없습니다.
2. 조금 더 깊게, 캐스퍼 프로토콜
그렇다면 캐스퍼는 어떻게 ‘확정’된 체크포인트를 만드는 것일까요? 캐스퍼 프로토콜의 작동방식에 대하여 조금 더 자세히 알아보겠습니다.
우선, 블록들 간의 관계를 표현하는 법부터 살펴보겠습니다. 블록이 아래에서부터 위로 쌓여 올라간다면, 블록 간의 관계는 위의 그림처럼 표현해볼 수 있습니다. 블록 높이가 n인 블록을 기준으로 생각해보면, 바로 이전에 연결된 블록 높이 n-1의 블록을 부모 블록, 바로 이후에 연결된 블록 높이 n+1의 블록을 자식 블록이라고 합니다. 그리고 블록 높이 n 이전에 생성된 모든 블록들 (n-1, n-2, n-3, …)을 모두 조상 블록, 반대로 n 이후로 생성된 모든 블록들 (n+1, n+2, n+3, …)을 자손 블록이라고 합니다.
네트워크 지연, 또는 악의적인 공격에 의하여 나카모토 컨센서스에서는 아래의 그림처럼 같은 블록 높이에서 여러 개의 블록이 생성될 수 있습니다. 이렇게 포크가 발생하는 상황을 ‘부모 블록이 여러 개의 자식 블록을 가진다’라고 표현할 수 있습니다. 캐스퍼에게 주어진 대략적인 역할은 바로 이러한 상황에서 ‘부모 블록이 하나의 자식 블록만을 선택하도록 하는 것’입니다.
캐스퍼는 생성되는 모든 블록에 대하여 위의 그림처럼 선택하지는 않습니다. 블록체인에서 가장 먼저 생성된 블록인 제네시스 블록부터 매 32블록마다 위의 그림처럼 선택이 이루어지는데, 이때 선택이 이루어지는 블록을 ‘체크포인트’라고 합니다. 따라서 캐스퍼의 작동방식은 위의 그림보다는 아래의 그림에 가깝습니다.
체크포인트와 체크포인트 사이의 거리를 늘릴수록, 알고리즘 오버헤드(Overhead, 연산 시간, 메모리, 네트워크 광역대 또는 다른 컴퓨팅 자원들을 과도하게 소비하는 것)를 줄이는 효과가 있지만, 동시에 다음 체크포인트를 확정하기까지 늘어난 거리만큼 기다려야 하기 때문에 합의에 이르는 시간 또한 지연된다는 딜레마가 존재합니다. [2] 최초에 캐스퍼 백서에 의해서는 이 거리가 100블록이었지만, 현재 이더리움 블록체인에서는 32블록으로 줄어든 것 또한, 이러한 딜레마 사이에서 고민한 결과입니다.
그렇다면 이제 캐스퍼가 하는 일을 다시 써볼 수 있을 것 같습니다. ‘조상 체크포인트가 여러 개의 자손 체크포인트 중 하나만을 선택하도록 하는 것’이 캐스퍼의 역할인데, 어떤 과정을 거쳐 체크포인트가 선택되는지 알아보겠습니다.
3. BFT 기반 지분증명
캐스퍼는 우리에게 친숙한 여타 지분증명 기반 블록체인과 매우 유사합니다. 각 검증인들은 자신의 예치금(deposit)을 걸어두고 총 예치금 중 자신이 차지하는 지분만큼 투표에 영향을 행사할 수 있습니다. (이 문장이 어려우시다면 DSRV Research의 지분증명 아티클에 상세히 설명되어있습니다.) 여기서 투표란 바로, ‘조상 체크포인트와 특정 체크포인트 간, 단 하나의 연결을 확정시키는 것’입니다. 검증인들이 투표하기 위해 전송하는 메시지에 어떤 내용이 담겨있는지 살펴보면 이해하기 쉽습니다.
그림이 조금 복잡해 보이지만 차근차근 뜯어보겠습니다. 총 세 명의 검증인들은 각자 동일한 양의 지분을 가지고 조상 체크포인트인 s에서 t1과 t2 중 어떤 자손 체크포인트를 선택할 것인지를 투표를 통해 정하고자 합니다. 투표는 검증인들이 서로에게 메시지를 전달함으로써 이루어지는데, 메시지에는 아래와 같은 정보들이 포함됩니다.
- 조상 체크포인트인 s
- 자손 체크포인트 t1과 t2 중 하나의 체크포인트. 즉 t1, 또는 t2.
- 조상 체크포인트의 높이. 즉 h(s).
- 자손 체크포인트의 높이. 즉 h(t1 또는 t2).
- 검증인 자신의 공개키(Public Key, 검증인의 지갑 주소로 이해하면 쉬움, 이하 공개키).
즉 v1, v2, v3.
메시지를 전송하고, 또 전달받은 각 검증인들은 메시지에 대해 아래와 같은 일련의 검증 과정을 거칩니다.
- 메시지에 포함된 다른 검증인의 공개키가 원래 검증인들의 집합에 속해있는 검증인의 것인지 확인함으로써 검증인 집합 외부로부터 스팸 메시지가 전송되지는 않았는지 확인합니다.
- 조상 및 자손 체크포인트의 높이를 확인함으로써 s가 t1 또는 t2의 조상이 확실한지도 확인합니다.
위의 검증과정을 거쳐 유효하다고 판단된 메시지들로 투표를 진행할 수 있습니다. 위 그림을 살펴보면 검증인 1은 message1
을 통해 s → t2로의 연결에 한 표, 검증인 2 또한 message2
를 통해 s → t2로의 연결에 다시 한 표, 검증인 3은 message3
을 통해 s → t1으로의 연결에 한 표씩을 던진 것을 알 수 있습니다. 그렇다면 s → t1으로의 연결은 1표, s → t2로의 연결은 2표로 전체의 2/3 이상의 투표를 받아 후자인 s → t2의 연결이 인정받게 됩니다. 이렇게 일련의 검증과 투표를 통해 인정된 연결을 ‘Supermajority Link’라고 합니다.
- DSRV’s Tip; 지분증명 기반 투표
위의 설명에서 표를 세는 기준은 검증인의 머릿수로 비추어질 수 있습니다. 그러나 이는 각 검증인들이 동일한 양의 지분을 가지고 있다는 가정으로부터 가능한 것으로, 실제로는 지분량에 비례한 영향력 행사가 가능합니다. 예를 들어, 검증인 3이 전체 투표 참여 지분의 70%를 차지하고 있다면 검증인 3이 투표한 s → t1으로의 연결이 인정받게 됩니다.
이렇게 서로 메시지를 전송하고, 2/3 이상 지분의 투표를 받아 합의를 하는 이 방식이 어쩐지 익숙하시다면, 맞습니다. 캐스퍼가 Safety와 Liveness 아티클에서 다루었던 PBFT와 매우 유사하게 느껴지는데요, 그렇기에 캐스퍼는 BFT 스타일의 합의 메커니즘으로 분류될 수 있습니다. [3] 여러 Supermajority Link로 블록을 확정(finalize)하기까지의 과정도 조금 더 알아보겠습니다.
빨간색으로 표시된 체크포인트들은 위에서 설명된 것과 같은 과정을 통해 생성된 Supermajority Link들의 집합입니다. 즉, 검증인들 간 투표를 통해 root → b1, b1 → b2, b2 → b3, b3 → b4 총 네 개의 Supermajority Link가 합의되었다면, 그러한 연결을 체인 상에 표현하면 바로 위와 같은 그림이 됩니다.
루트(root, 블록체인의 맥락에서는 처음으로 생성된 블록(제네시스 블록)을 의미함)로부터 Supermajority Link로 연결되었다면 우리는 해당 블록이 **타당하다(justified)**고 판단합니다. justify된 블록 바로 위 높이가 1만큼 높은 자식 체크포인트와도 supermajority link로 연결된다면, 비로소 그 블록을 우리는 ‘확정(finalize)’되었다고 할 수 있습니다. [4] 위의 그림에서는 b1, b2, b3, b4 중에서 유일하게 자식 체크포인트와 supermajority link와 연결된 체크포인트 ‘b3’가 확정된 체크포인트에 속합니다. 만약 작업증명 기반 이더리움 블록체인에서 51% 공격이 발생하더라도, 이렇게 확정된 체크포인트 이전의 블록들까지 롤백시킬 수는 없습니다. 캐스퍼에 의해 체인 롤백에 대한 추가적인 안전장치가 마련된 것입니다.
4. 페널티 부과를 통한 Nothing-at-Stake 문제 해결
Safety와 Liveness 아티클에서 다루었던 피어코인을 기억하시나요? 체인 기반 지분증명인 피어코인에서는 하나의 검증인이 동시에 두 포크에 각각 블록을 제안해도 아무런 손해를 보지 않습니다. [5] 따라서 계속해서 두 포크 중에서 하나의 포크를 결정할 수 없게 되는데, 이러한 문제를 “Nothing-at-Stake”라고 합니다.
캐스퍼에서는 이러한 Nothing-at-Stake 문제에 대한 해결책으로, 검증인들이 투표할 때 지켜야 할 규칙 두 가지를 제시하고, 만약 어길 시 페널티를 부과합니다. 찬찬히 살펴보겠습니다.
수식으로 표현된 규칙들이 꽤나 복잡해 보이지만, 간단히 그림으로 표현하면 아래와 같습니다.
캐스퍼는 체크포인트를 결정하는 투표를 진행할 때, 위의 그림에서와 같은 두 가지의 투표 금지 규칙을 제시합니다. 이전의 투표 예시처럼 검증인이 s1 → t1, 혹은 s2 → t2로 투표할 때, 아래와 같은 규칙을 따르지 않으면, 검증인은 자신의 예치금을 몰수(slash)당하게 됩니다. 아래의 규칙들은 위의 그림을 다시 말로 풀어 설명한 것입니다.
- 규칙 1
검증인은 같은 블록 높이의 t1과 t2에게 두 개, 혹은 그 이상의 투표를 할 수 없다. - 규칙 2
검증인은 s1 → t1, s2 → t2 두 개의 투표를 진행할 때, s1 → t1범위 내에 존재하는 s2 → t2에 대한 투표를 할 수 없다.
만약 규칙1 또는 규칙2를 어기는 투표를 한다면, 위의 그림처럼 양쪽으로 갈라진 포크 모두에 한 표씩 던질 수 있습니다. 모든 검증인들이 계속해서 양쪽 포크에 모두 투표 한다면 두 포크 중 하나를 영원히 결정할 수 없게 됩니다. 그래서 규칙 1과 2를 어기는 투표를 할 경우, 검증인의 예치금을 몰수함으로써 둘 중 하나의 포크를 선택하도록 강제하는 경제적 페널티를 부여하는 것입니다. 이렇게 규칙을 어기고 두 포크에 모두 투표했을 때 나의 예치금이 몰수된다는 것은, 갈라진 포크 중 하나를 선택하지 않고 모두를 선택했을 때 ‘잃을 것이 있는’ 상황이 된다는 것을 의미합니다. 즉, 캐스퍼는 이렇게 예치금을 몰수하는 메커니즘을 고안함으로써 Nothing-at-Stake 문제를 해결합니다.
5. 캐스퍼의 Safety와 Liveness
캐스퍼를 Safety와 Liveness의 관점에서도 살펴볼 수 있습니다. 블록체인의 맥락에서 이해한 Safety와 Liveness에 관한 자세한 내용은 DSRV Research의 아티클에서 확인할 수 있습니다. 이 내용을 캐스퍼에 적용하면 아래와 같이 생각해볼 수 있습니다:
- Safety
만약 합의가 이루어졌다면, 모든 정상적인 노드는 동일한 값에 접근 가능합니다. 캐스퍼에서는 Safety가 보장되지 않을 경우, 같은 블록 높이에 두 개의 체크포인트가 생성될 수 있습니다. 즉, 포크가 발생할 수 있습니다. - Liveness
모든 정상적인 노드는 결국 합의에 도달합니다. 만약 Liveness가 보장되지 않을 경우 분산된 시스템을 구성하는 노드들이 무한히 합의에 도달하지 못하는, 즉 캐스퍼에서는 새로운 체크포인트가 계속해서 확정되지 않는 상태가 지속될 수 있습니다.
캐스퍼에서는 2/3 이상의 지분이 위에서 말한 두 가지 투표 규칙을 지키는 정직한 주체들에 의하여 장악된다는 가정하에서는 Safety가 만족됩니다. [6] 즉, 같은 블록 높이에 존재하는 두 체크포인트 중 반드시 하나의 체크포인트만 선택됩니다.
그러나 캐스퍼의 Liveness는 이더리움의 작업증명과 같이 캐스퍼를 뒷받침하는 블록 제안 메커니즘에 의존적입니다. [7] 검증인 2/3 이상의 지분이 두 가지 투표 규칙을 모두 지켜야 계속해서 체크포인트를 생성할 수 있는데, 블록 제안 메커니즘이 정상적으로 동작하지 않는다면 검증인들이 투표 규칙들을 지키도록 강제할 수 없기 때문입니다.
작업증명 기반 이더리움에 대하여 51% 공격이 성공했다고 가정해보겠습니다. 악의적인 검증인이 위의 투표 금지 규칙 1번, 혹은 2번을 위반하면 규칙 위반에 대한 증거를 다른 검증인이 수집하여 이더리움 블록체인에 트랜잭션으로 전송합니다. 이후 트랜잭션이 블록에 포함되고 처리되면서 악의적인 검증인의 예치금을 몰수하는 절차가 진행됩니다. 그러나 이더리움을 구성하는 전체 컴퓨팅 파워(이하 해시파워)의 51% 이상을 하나의 악의적인 주체가 장악한 상황에서는 규칙 위반에 대한 증거를 제출하는 트랜잭션을 제외한 블록을 제안하여 그 블록이 인정받도록 할 수 있습니다. 규칙 위반에 대한 증거를 임의적으로 누락시킴으로써 규칙 위반에 대한 처벌을 회피할 수 있는 것입니다. 이렇게 이더리움 블록체인이 공격당해 트랜잭션이 블록에서 임의적으로 제외된다면, 투표 규칙을 지키지 않아도 예치금이 몰수되지 않기 때문에 더 이상 검증인들이 투표 규칙을 지키도록 강제할 수 없습니다. 투표 규칙이 더 이상 지켜지지 않는다면, 합의가 이루어지지 않고 새로운 체크포인트가 생성되지 않아 Liveness가 훼손되는 상황이 발생할 수 있습니다.
6. 동적인 검증인 집합: Dynamic Validator Sets
지금까지는 매번 동일한 검증인들이 체크포인트 생성 과정에 참여한다는 것을 전제로 캐스퍼의 작동 방식을 살펴보았습니다. 그러나 실제로는 검증인들은 예치금을 예치 및 인출함으로써 자유롭게 검증인으로 참여하거나 탈퇴할 수 있습니다. 이것을 ‘동적인 검증인 집합’이라고 표현하는데, 이러한 방식을 사용하면 새롭게 고려해야 할 요소들이 생겨납니다.
검증인이 되고 싶은 주체는 deposit
이라는 트랜잭션을 전송하고, 그 트랜잭션이 블록에 포함된 이후로 두 개의 체크포인트가 확정되면 검증인 집합에 새롭게 등록됩니다. 반대로 검증인 집합에서 탈퇴하고 싶은 주체는 withdraw
라는 트랜잭션을 전송하고, 그 트랜잭션이 블록에 포함된 이후로 두 개의 체크포인트가 확정되면 검증인 집합에서 탈퇴하게 됩니다. 따라서 체크포인트가 확정될 때마다 새로 들어온 검증인과 탈퇴한 검증인들에 의하여 검증인 집합이 바뀌게 됩니다.
이러한 동적 검증인 집합의 특성을 이용하면 첫 번째 투표 금지 규칙인 “검증인은 같은 블록 높이의 체크포인트 두 개에 투표할 수 없다”를 어기고도 처벌받지 않는 상황을 만들 수 있습니다.
지금까지 캐스퍼 프로토콜을 설계할 때는 시간이 지나도 합의에 참여하는 검증인들이 변하지 않는 ‘정적인 검증인 집합’을 가정했습니다. [8] 따라서 만약 같은 블록 높이에서 체크포인트 두 개 모두에 투표했더라도 표를 던진 검증인 자신이 포함되어있는 검증인 집합이 한쪽 포크의 체크포인트와 다른 한쪽 포크의 체크포인트에서 서로 다르다면 예치금을 몰수당하지 않게 됩니다. 어떤 상황에서 이러한 일이 발생하는지 자세히 알아보기 전에, 우선 잠시 위에서 설명한 supermajority link, justify, 확정(finalize)에 대한 개념을 다시 짚어보고자 합니다.
- Supermajority Link
검증인들이 s → t를 연결하는 투표를 하는데, 지분의 2/3 이상의 투표를 받으면 s와 t는 supermajority link로 연결되었다고 합니다. - Justify
제네시스 블록으로부터 supermajority link로 연결되었다면 해당 체크포인트가 타당하다(justified)고 합니다. - 확정(Finalize)
타당하다고 판단된 (justified) 블록 바로 위, 높이가 1만큼 높은 자식 체크포인트와도 supermajority link로 연결된다면, 비로소 그 블록이 확정되었다고 합니다.
위의 그림은 체크포인트가 두 갈래의 포크에서 각각 다르게 생성됨에 따라 검증인 집합이 보라색과 초록색 두 가지로 나뉘게 되는 상황을 표현합니다. 좀 더 자세히 알아보겠습니다.
S로 표시된 체크포인트에서 다음 체크포인트로 넘어가는 과정에서 검증인 집합이 변경될 수 있습니다. 새로운 체크포인트가 확정되면 검증인 집합이 변경되기 때문입니다. 그러나 문제는 왼쪽과 오른쪽 포크에서 S가 확정되거나, 확정되지 않거나 두 가지 경우의 수가 동시에 존재할 수 있다는 것입니다.
왼쪽 포크의 경우, S는 바로 위 체크포인트, 즉 자식 체크포인트와 supermajority link로 연결되지 않습니다. 따라서 왼쪽 포크의 관점에서는 S가 확정되지 않아 검증인 집합이 S의 자식 체크포인트에서는 변경되지 않습니다. 그러나 1) S와 C가 supermajority link로 연결되고, 2) C와 C의 자식 체크포인트와도 supermajority link로 연결되어 체크포인트 C가 확정(finalize)됩니다.
오른쪽 포크의 경우, 왼쪽 포크와는 반대로 S는 바로 위 체크포인트, 즉 자식 체크포인트와 supermajority link로 연결됩니다. 따라서 오른쪽 포크의 관점에서는 S가 확정되어 검증인 집합이 S의 자식 체크포인트에서 변경됩니다. 즉, 같은 블록 높이지만, 왼쪽 포크와 오른쪽 포크의 검증인 집합이 달라지는 상황이 발생한 것입니다. 계속해서 오른쪽 포크에서는 C’과 C’의 자식 체크포인트 모두 연속적으로 supermajority link로 연결되어 S와 C’까지의 모든 체크포인트들이 확정됩니다.
C와 C’이 동시에 확정된 지금의 상황은 첫 번째 투표 규칙이었던 ‘같은 높이의 체크포인트들에 동시에 여러 개의 표를 던질 수 없다’를 위반하지만, 체크포인트를 확정하는 검증인 집합이 C와 C’에서 다르기 때문에 아무도 예치금을 몰수당하지 않게 됩니다. 즉, Safety가 손상되는 상황이 발생하게 됩니다.
캐스퍼는 이 문제를 해결하기 위해 supermajority link의 정의를 약간 수정하는데, 이때 새로운 개념 몇 가지를 도입합니다.
체크포인트가 확정되기 전과 후로 검증인들의 집합을 표현하자면 위의 그림과 같습니다. 파란색 검증인은 새로운 체크포인트가 확정되는 순간 검증인 집합에서 탈퇴하며, 빨간색 검증인은 새로운 체크포인트가 확정되는 순간 검증인 집합에 등록됩니다. 새로운 체크포인트가 확정된 후, 검증인 집합을 새로운/이전 검증인 집합으로 나누면 다음과 같습니다.
- 새로운 검증인 집합(Forward Validator Set)
체크포인트가 새롭게 확정되면서 들어온 검증인들을 포함하고 탈퇴한 검증인들을 제외한 검증인 집합 - 이전 검증인 집합(Rear Validator Set)
체크포인트가 새롭게 확정되면서 들어온 검증인들을 제외하고 탈퇴한 검증인들을 포함한 검증인 집합
새로운 또는 이전 검증인 집합의 개념을 사용하면 새롭게 supermajority link의 정의를 내릴 수 있습니다. 동적인 검증인 집합에서는 이제 새로운 검증인 집합과 이전 검증인 집합 모두에서 각각 2/3 이상의 투표를 받아야만 supermajority link를 생성할 수 있습니다.
다시 동적 검증인 집합에 의한 공격 방법을 표현한 그림으로 돌아가자면, 오른쪽 포크의 S 자식 체크포인트에서 초록색 검증인 집합이 새로운 검증인 집합일 때, 보라색 검증인 집합은 이전 검증인 집합을 표현한다고 할 수 있습니다. 이제 새로운 supermajority link의 개념에 의하여 오른쪽 포크에서 새로운 검증인 집합에서는 투표를 받았지만 이전 검증인 집합에서는 투표를 받지 못했으므로 S와 S의 초록색 자식 체크포인트는 supermajority link를 인정받지 못합니다. 즉, 이제는 다른 검증인 집합으로 같은 높이의 체크포인트들에 동시에 표를 던지는 것이 불가능해집니다.
- DSRV's TIP. 동적 검증인 집합에서의 Supermajority Link 생성
체크포인트가 확정되고 나서야 검증인 집합이 변하게 되는데, 확정되기 전에 어떻게 '새로운 검증인 집합(Forward Validator Set)'이 다음 체크포인트에 대한 Supermajority Link 생성 투표를 할 수 있는지 헷갈릴 수 있습니다.
검증인이 되고 싶은 주체는 deposit이라는 트랜잭션을 전송하고, 그 트랜잭션이 블록에 포함된 이후로 두 개의 체크포인트가 확정되면 검증인 집합에 새롭게 등록됩니다. 따라서, Forward Validator Set에 포함된 검증인들이 Supermajority Link 생성 투표를 할 당시, 이전에 이들은 이미 deposit 트랜잭션으로 검증인 참여 의사를 밝혔기 때문에, 체크포인트가 확정되기 이전에도 다음 체크포인트가 확정된다면 새롭게 구성될 Forward Validator Set을 정의할 수 있고, 그들이 주체가 되어 Supermajority Link 투표를 진행할 수 있습니다.
7. 마무리: 지분증명으로 향해가는 이더리움 2.0
오늘 다룬 캐스퍼는 이더리움 2.0에서 계속해서 등장하는 중요한 개념입니다. 다음 글은 LMD GHOST에 관한 글입니다. 이는 'Latest Message-Driven Greedy Heaviest Observed Sub-Tree'의 약자인데, 이더리움 2.0에서는 포크가 발생했을 때 어떤 기준으로 어떤 포크를 선택할 것인 가에 대한 내용입니다. 이번 주제였던 캐스퍼와 다음 주제인 LMD GHOST를 합치면 'Gasper'가 탄생되는데, 이 또한 '이더리움 2.0 합의 알고리즘' 시리즈에서 다뤄질 예정입니다.
※ References
[1] Github — Ethereum Beacon Chain Consensus Specs, SLOTS_PER_EPOCH
[2] V. Buterin and V. Griffith. Casper the Friendly Finality Gadget. 2019. p.2
[3] V. Buterin and V. Griffith. Casper the Friendly Finality Gadget. 2019. p.1
[4] V. Buterin and V. Griffith. Casper the Friendly Finality Gadget. 2019. p.3. “A checkpoint c is called finalized if (1) it is the root or (2) it is justified and there is a supermajority link c → c’ where c’ is a direct child of c.” 이후에 이어지는 이더리움 2.0 연구에서는 이러한 정의에 약간의 수정이 있었는데, 이후 Gasper 아티클에서 해당 내용을 반영할 예정입니다.
[5] Peercoin Forum — Nothing-at-Stake is the main fear of opponents of Peercoin
[6] V. Buterin and V. Griffith. Casper the Friendly Finality Gadget. 2019. p.4–5, Theorem 1 (Accountable Safety)
[7] V. Buterin and V. Griffith. Casper the Friendly Finality Gadget. 2019. p.1, “Casper provides safety, but liveness depends on the chosen proposal mechanism.”
[8] V. Buterin and V. Griffith. Casper the Friendly Finality Gadget. 2019. p.2, “In this simple version of Casper, we assume there is a fixed set of validators and a proposal mechanism.”
-> '[DSRV 다이제스트] 이더리움 2.0 합의 알고리즘 ② 캐스퍼' 원문 보러가기