이더리움 시리즈: 우리들의 귀여운 친구, 캐스퍼
이 기사를 공유합니다
DSRV
DSRV 2022년 7월11일 14:11
출처=DSRV 미디엄
출처=DSRV 미디엄

이더리움 캐스퍼: 작업증명에서 지분증명으로

DSRV 리서치는 합의 알고리듬을 둘러싼 논의들을 살펴보면서 블록체인들이 왜 각자 다른 합의 알고리듬을 채택했는지, 각각 어떤 특성이 있는지 알아보기 위한 이론적인 틀을 잡고자 합니다.

 

[이더리움 2.0 시리즈]

0. Safety and Liveness

1. Casper, the Friendly Finality Gadget

2. LMD Ghost

3. Gasper

4. Ethereum Beacon Chain

5. Horizontal Scaling Solution: Sharding

출처=DSRV 미디엄
출처=DSRV 미디엄

안녕-! 내 이름은 캐스퍼. 그냥 유령은 아니고 귀여운 유령이란다. 이더리움에서 내 이름을 딴 뭔가를 만든 것 같은데, (전혀 귀엽지는 않겠지만) 그냥 나를 봐서라도 귀엽게 봐줬으면 해.. 그럼 이만!

 

우리 귀여운 캐스퍼가 인사를 전합니다. 꼬마 유령 캐스퍼(Casper the Friendly Ghost)에 대하여 들어보신 적 있으신가요?

캐스퍼는 인간을 괴롭혀야 하는 유령 세계의 규율을 어기고 인간과 친해지고자 하는 착한 심성을 가진 유령인데요, 이더리움에서의 캐스퍼도 홀연히 날아와 슬쩍 도움을 주고 다시 홀연히 떠나간다는 점에서 닮은 것 같기도 합니다.

이더리움의 합의 알고리듬 중 블록 확정 메커니즘인 캐스퍼에 대하여 알아보겠습니다.

 

소개합니다, 캐스퍼

캐스퍼는 기존 이더리움의 작업증명 방식의 합의 알고리듬에 더하여, 지분증명을 기반으로 블록을 확정시키는 추가적인 메커니즘입니다.

이더리움은 기본적으로 작업증명 기반의 나카모토 컨센서스에 기반한 규칙에 따라 블록을 생성하는데, 이때 지리적으로 거리가 멀리 떨어져 있는 채굴자가 동시에 블록을 생성하게 되면 같은 블록 높이에 블록이 여러 개 생성되는 포크가 발생하게 됩니다.

채굴자 간 통신 지연으로 인한 포크 발생. 출처=DSRV 리서치
채굴자 간 통신 지연으로 인한 포크 발생. 출처=DSRV 리서치

나카모토 컨센서스에서는 ‘어떤 포크가 더 많은 연산을 통해 생성되었는가’라는 포크 초이스 룰에 따라 여러 개의 포크 중 하나를 선택합니다.

이 말은 곧, 이더리움 네트워크에서는 악의적인 채굴자가 절반 이상의 컴퓨팅 파워(해시 파워)를 장악한다면 언제든 임의적으로 포크를 생성하여 원래의 정상적인 포크를 앞지르고, 새로운 Canonical Chain으로 인정받게 하는, 이른바 51% 공격이 가능하다는 것을 의미합니다.

(나카모토 컨센서스에서의 51% 공격에 대한 보다 자세한 내용은 나카모토 컨센서스 아티클에서 확인하실 수 있습니다.)

캐스퍼는 이러한 공격에 대한 저항성을 높이기 위하여, 기반이 되는 나카모토 컨센서스 위에 더해진 추가적인 안전장치입니다. 캐스퍼는 32블록마다 나카모토 컨센서스에 의하여 발생한 여러 포크 중 하나를 결정하고 ‘확정’(finalize)시키는 체크포인트를 생성합니다.

따라서 악의적인 포크를 생성하여 원래의 정상적인 체인을 롤백(악의적인 포크가 시작된 지점으로 체인을 되돌리는 것) 시키는 51% 공격이 발생하더라도, 캐스퍼에 의하여 이미 한번 ‘확정’된 체크포인트 이전의 블록들로 롤백시킬 수는 없습니다. (고마워 캐스퍼!)



조금 더 깊게, 캐스퍼 프로토콜

그렇다면 캐스퍼는 어떻게 ‘확정’된 체크포인트를 만드는 것일까요? 캐스퍼 프로토콜의 작동 방식에 대하여 조금 더 자세히 알아보겠습니다.

부모/자식 블록 및 조상/자손 블록 간 관계. 출처=DSRV 리서치
부모/자식 블록 및 조상/자손 블록 간 관계. 출처=DSRV 리서치

우선, 블록 간의 관계를 표현하는 법부터 살펴보겠습니다. 블록이 아래에서부터 위로 쌓여 올라간다면, 위 그림처럼 표현해 볼 수 있습니다.

블록 높이가 n인 블록을 기준으로 생각해 보면, 바로 이전에 연결된 블록 높이 n-1의 블록을 부모 블록, 바로 이후에 연결된 블록 높이 n+1의 블록을 자식 블록이라고 합니다.

그리고 블록 높이 n 이전에 생성된 모든 블록들 (n-1, n-2, n-3, …)을 모두 조상 블록, 반대로 n 이후로 생성된 모든 블록들 (n+1, n+2, n+3, …)을 자손 블록이라고 합니다.

네트워크 지연, 또는 악의적인 공격에 의하여 나카모토 컨센서스에서는 아래의 그림처럼 같은 블록 높이에서 여러 개의 블록이 생성될 수 있습니다.

이렇게 포크가 발생하는 상황을 ‘부모 블록이 여러 개의 자식 블록을 가진다’라고 표현할 수 있습니다. 캐스퍼에게 주어진 대략적인 역할은 바로 이러한 상황에서 ‘부모 블록이 하나의 자식 블록만을 선택하도록 하는 것’입니다.

캐스퍼로 인한 캐노니컬 체인(Canonical Chain) 확정. 출처=DSRV 리서치
캐스퍼로 인한 캐노니컬 체인(Canonical Chain) 확정. 출처=DSRV 리서치

캐스퍼는 생성되는 모든 블록에 대하여 위의 그림처럼 선택하지는 않습니다. 블록체인에서 가장 먼저 생성된 블록인 제네시스 블록부터 매 32블록마다 위의 그림처럼 선택이 이루어지는데, 이때 선택이 이루어지는 블록을 ‘체크포인트’라고 합니다.

따라서 캐스퍼의 작동 방식은 위의 그림보다는 아래의 그림에 가깝습니다.

캐스퍼 체크포인트. 출처=DSRV 리서치
캐스퍼 체크포인트. 출처=DSRV 리서치



체크포인트와 체크포인트 사이의 거리를 늘릴수록, 알고리듬 오버헤드(연산 시간, 메모리, 네트워크 광역대 또는 다른 컴퓨팅 자원들을 과도하게 소비하는 것)를 줄이는 효과가 있습니다.

하지만 동시에 다음 체크포인트를 확정하기까지 늘어난 거리만큼 기다려야 하기 때문에 합의에 이르는 시간 또한 지연된다는 딜레마가 존재합니다.

최초에 캐스퍼 백서에 의해서는 이 거리가 100블록이었지만, 현재 이더리움 블록체인에서는 32블록으로 줄어든 것 또한, 이러한 딜레마 사이에서 고민한 결과입니다.

그렇다면 이제 캐스퍼가 하는 일을 다시 써볼 수 있을 것 같습니다.

‘조상 체크포인트가 여러 개의 자손 체크포인트 중 하나만을 선택하도록 하는 것’이 캐스퍼의 역할인데, 어떤 과정을 거쳐 체크포인트가 선택되는지 알아보겠습니다.



BFT 기반 지분증명

캐스퍼는 우리에게 친숙한 여타 지분증명 기반 블록체인과 매우 유사합니다. 각 검증인들은 자신의 예치금(deposit)을 걸어두고 총 예치금 중 자신이 차지하는 지분만큼 투표에 영향을 행사할 수 있습니다. (이 문장이 어려우시다면 DSRV 리서치의 지분증명 아티클에 상세히 설명되어 있습니다.)

여기서 투표란 바로, ‘조상 체크포인트와 특정 체크포인트 간, 단 하나의 연결을 확정시키는 것’입니다. 검증인들이 투표하기 위해 전송하는 메시지에 어떤 내용이 담겨있는지 살펴보면 이해하기 쉽습니다

BFT 방식의 Supermajority Link 생성. 출처=DSRV 리서치
BFT 방식의 Supermajority Link 생성. 출처=DSRV 리서치

그림이 조금 복잡해 보이지만 차근차근 뜯어보겠습니다.

총 세 명의 검증인들은 각자 동일한 양의 지분을 가지고 조상 체크포인트인 s에서 t1과 t2 중 어떤 자손 체크포인트를 선택할 것인지를 투표를 통해 정하고자 합니다.

투표는 검증인들이 서로에게 메시지를 전달함으로써 이루어지는데, 메시지에는 아래와 같은 정보들이 포함됩니다.

 

1. 조상 체크포인트인 s

2. 자손 체크포인트 t1과 t2 중 하나의 체크포인트. 즉 t1, 또는 t2.

3. 조상 체크포인트의 높이. 즉 h(s).

4. 자손 체크포인트의 높이. 즉 h(t1 또는 t2).

5. 검증인 자신의 공개키(검증인의 지갑 주소로 이해하면 쉬움). 즉 v1, v2, v3.

 

메시지를 전송하고, 또 전달받은 각 검증인들은 메시지에 대해 아래와 같은 일련의 검증 과정을 거칩니다.

 

1. 메시지에 포함된 다른 검증인의 공개키가 원래 검증인들의 집합에 속해있는 검증인의 것인지 확인함으로써 검증인 집합 외부로부터 스팸 메시지가 전송되지는 않았는지 확인합니다.

2. 조상 및 자손 체크포인트의 높이를 확인함으로써 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 스타일의 합의 메커니즘으로 분류될 수 있습니다. 여러 Supermajority Link로 블록을 확정(finalize)하기까지의 과정도 조금 더 알아보겠습니다.

캐스퍼에 의한 체크포인트 확정. 출처=V. Buterin and V. Griffith. Casper the Friendly Finality Gadget. 2019. p.3 Figure 1-(c), DSRV Research 재구성본
캐스퍼에 의한 체크포인트 확정. 출처=V. Buterin and V. Griffith. Casper the Friendly Finality Gadget. 2019. p.3 Figure 1-(c), DSRV Research 재구성본

빨간색으로 표시된 체크포인트들은 위에서 설명된 것과 같은 과정을 통해 생성된 Supermajority Link들의 집합입니다.

즉, 검증인들 간 투표를 통해 root → b1, b1 → b2, b2 → b3, b3 → b4 총 네 개의 Supermajority Link가 합의되었다면, 그러한 연결을 체인 상에 표현하면 바로 위와 같은 그림이 됩니다.

루트(블록체인의 맥락에서는 처음으로 생성된 블록(제네시스 블록))로부터 Supermajority Link로 연결되었다면 우리는 해당 블록이 **타당하다(justified)**고 판단합니다.

justify된 블록 바로 위 높이가 1만큼 높은 자식 체크포인트와도 supermajority link로 연결된다면, 비로소 그 블록을 우리는 ‘확정(finalize)’되었다고 할 수 있습니다.

위의 그림에서는 b1, b2, b3, b4 중에서 유일하게 자식 체크포인트와 supermajority link와 연결된 체크포인트 ‘b3’가 확정된 체크포인트에 속합니다.

만약 작업증명 기반 이더리움 블록체인에서 51% 공격이 발생하더라도, 이렇게 확정된 체크포인트 이전의 블록들까지 롤백시킬 수는 없습니다. 캐스퍼에 의해 체인 롤백에 대한 추가적인 안전장치가 마련된 것입니다.



페널티 부과를 통한 Nothing-at-Stake 문제 해결

Safety와 Liveness 아티클에서 다루었던 피어코인을 기억하시나요? 체인 기반 지분증명인 피어코인에서는 하나의 검증인이 동시에 두 포크에 각각 블록을 제안해도 아무런 손해를 보지 않습니다.

따라서 계속해서 두 포크 중에서 하나의 포크를 결정할 수 없게 되는데, 이러한 문제를 “Nothing-at-Stake”라고 합니다.

캐스퍼에서는 이러한 Nothing-at-Stake 문제에 대한 해결책으로, 검증인들이 투표할 때 지켜야 할 규칙 두 가지를 제시하고, 만약 어길 시 페널티를 부과합니다. 찬찬히 살펴보겠습니다.

캐스퍼 프로토콜의 투표 규칙. 출처=Casper the Friendly Finality Gadget p.4
캐스퍼 프로토콜의 투표 규칙. 출처=Casper the Friendly Finality Gadget p.4

수식으로 표현된 규칙들이 꽤나 복잡해 보이지만, 간단히 그림으로 표현하면 아래와 같습니다.

캐스퍼 프로토콜의 두 가지 투표 금지 규칙. 출처=DSRV 리서치
캐스퍼 프로토콜의 두 가지 투표 금지 규칙. 출처=DSRV 리서치

캐스퍼는 체크포인트를 결정하는 투표를 진행할 때, 위의 그림에서와 같은 두 가지의 투표 금지 규칙을 제시합니다.

이전의 투표 예시처럼 검증인이 s1 → t1, 혹은 s2 → t2로 투표할 때, 아래와 같은 규칙을 따르지 않으면, 검증인은 자신의 예치금을 몰수(slash) 당하게 됩니다.

아래의 규칙들은 위의 그림을 다시 말로 풀어 설명한 것입니다.

 

규칙 1: 검증인은 같은 블록 높이의 t1과 t2에게 두 개, 혹은 그 이상의 투표를 할 수 없다.

규칙 2: 검증인은 s1 → t1, s2 → t2 두 개의 투표를 진행할 때, s1 → t1 범위 내에 존재하는 s2 → t2에 대한 투표를 할 수 없다.

 

만약 규칙 1 또는 규칙 2를 어기는 투표를 한다면, 위의 그림처럼 양쪽으로 갈라진 포크 모두에 한 표씩을 던질 수 있습니다. 모든 검증인들이 계속해서 양쪽 포크에 모두 투표한다면 두 포크 중 하나를 영원히 결정할 수 없게 됩니다.

그래서 규칙 1과 2를 어기는 투표를 할 경우, 검증인의 예치금을 몰수함으로써 둘 중 하나의 포크를 선택하도록 강제하는 경제적 페널티를 부여하는 것입니다.

이렇게 규칙을 어기고 두 포크에 모두 투표했을 때 나의 예치금이 몰수된다는 것은, 갈라진 포크 중 하나를 선택하지 않고 모두를 선택했을 때 ‘잃을 것이 있는’ 상황이 된다는 것을 의미합니다. 즉, 캐스퍼는 이렇게 예치금을 몰수하는 메커니즘을 고안함으로써 Nothing-at-Stake 문제를 해결합니다.



캐스퍼의 Safety와 Liveness

캐스퍼를 Safety와 Liveness의 관점에서도 살펴볼 수 있습니다. 블록체인의 맥락에서 이해한 Safety와 Liveness에 관한 자세한 내용은 DSRV 리서치의 아티클에서 확인할 수 있습니다.

이 내용을 캐스퍼에 적용하면 아래와 같이 생각해 볼 수 있습니다:

 

· Safety

만약 합의가 이루어졌다면, 모든 정상적인 노드는 동일한 값에 접근 가능합니다. 캐스퍼에서는 Safety가 보장되지 않을 경우, 같은 블록 높이에 두 개의 체크포인트가 생성될 수 있습니다. 즉, 포크가 발생할 수 있습니다.

· Liveness

모든 정상적인 노드는 결국 합의에 도달합니다. 만약 Liveness가 보장되지 않을 경우 분산된 시스템을 구성하는 노드들이 무한히 합의에 도달하지 못하는, 즉 캐스퍼에서는 새로운 체크포인트가 계속해서 확정되지 않는 상태가 지속될 수 있습니다.

캐스퍼에서는 2/3 이상의 지분이 위에서 말한 두 가지 투표 규칙을 지키는 정직한 주체들에 의하여 장악된다는 가정하에서는 Safety가 만족됩니다. 즉, 같은 블록 높이에 존재하는 두 체크포인트 중 반드시 하나의 체크포인트만 선택됩니다.

그러나 캐스퍼의 Liveness는 이더리움의 작업증명과 같이 캐스퍼를 뒷받침하는 블록 제안 메커니즘에 의존적입니다.

검증인 2/3 이상의 지분이 두 가지 투표 규칙을 모두 지켜야 계속해서 체크포인트를 생성할 수 있는데, 블록 제안 메커니즘이 정상적으로 동작하지 않는다면 검증인들이 투표 규칙들을 지키도록 강제할 수 없기 때문입니다.

작업증명 기반 이더리움에 대하여 51% 공격이 성공했다고 가정해 보겠습니다. 악의적인 검증인이 위의 투표 금지 규칙 1번, 혹은 2번을 위반하면 규칙 위반에 대한 증거를 다른 검증인이 수집하여 이더리움 블록체인에 트랜잭션으로 전송합니다.

이후 트랜잭션이 블록에 포함되고 처리되면서 악의적인 검증인의 예치금을 몰수하는 절차가 진행됩니다.

그러나 이더리움을 구성하는 전체 컴퓨팅 파워(해시파워)의 51% 이상을 하나의 악의적인 주체가 장악한 상황에서는 규칙 위반에 대한 증거를 제출하는 트랜잭션을 제외한 블록을 제안하여 그 블록이 인정받도록 할 수 있습니다. 규칙 위반에 대한 증거를 임의적으로 누락시킴으로써 규칙 위반에 대한 처벌을 회피할 수 있는 것입니다.

이렇게 이더리움 블록체인이 공격당해 트랜잭션이 블록에서 임의적으로 제외된다면, 투표 규칙을 지키지 않아도 예치금이 몰수되지 않기 때문에 더 이상 검증인들이 투표 규칙을 지키도록 강제할 수 없습니다.

투표 규칙이 더 이상 지켜지지 않는다면, 합의가 이루어지지 않고 새로운 체크포인트가 생성되지 않아 Liveness가 훼손되는 상황이 발생할 수 있습니다.



동적인 검증인 집합: Dynamic Validator Sets

지금까지는 매번 동일한 검증인들이 체크포인트 생성 과정에 참여한다는 것을 전제로 캐스퍼의 작동 방식을 살펴보았습니다.

그러나 실제로는 검증인들은 예치금을 예치 및 인출함으로써 자유롭게 검증인으로 참여하거나 탈퇴할 수 있습니다.

이것을 ‘동적인 검증인 집합’이라고 표현하는데, 이러한 방식을 사용하면 새롭게 고려해야 할 요소들이 생겨납니다.

검증인이 되고 싶은 주체는 deposit이라는 트랜잭션을 전송하고, 그 트랜잭션이 블록에 포함된 이후로 두 개의 체크포인트가 확정되면 검증인 집합에 새롭게 등록됩니다.

반대로 검증인 집합에서 탈퇴하고 싶은 주체는 withdraw라는 트랜잭션을 전송하고, 그 트랜잭션이 블록에 포함된 이후로 두 개의 체크포인트가 확정되면 검증인 집합에서 탈퇴하게 됩니다.

따라서 체크포인트가 확정될 때마다 새로 들어온 검증인과 탈퇴한 검증인들에 의하여 검증인 집합이 바뀌게 됩니다.

이러한 동적 검증인 집합의 특성을 이용하면 첫 번째 투표 금지 규칙인 “검증인은 같은 블록 높이의 체크포인트 두 개에 투표할 수 없다”를 어기고도 처벌받지 않는 상황을 만들 수 있습니다.

지금까지 캐스퍼 프로토콜을 설계할 때는 시간이 지나도 합의에 참여하는 검증인들이 변하지 않는 ‘정적인 검증인 집합’을 가정했습니다.

따라서 만약 같은 블록 높이에서 체크포인트 두 개 모두에 투표했더라도 표를 던진 검증인 자신이 포함되어 있는 검증인 집합이 한쪽 포크의 체크포인트와 다른 한쪽 포크의 체크포인트에서 서로 다르다면 예치금을 몰수당하지 않게 됩니다.

어떤 상황에서 이러한 일이 발생하는지 자세히 알아보기 전에, 우선 잠시 위에서 설명한 supermajority link, justify, 확정(finalize)에 대한 개념을 다시 짚어보고자 합니다.

 

· Supermajority Link: 검증인들이 s → t를 연결하는 투표를 하는데, 지분의 2/3 이상의 투표를 받으면 s와 t는 supermajority link로 연결되었다고 합니다.

· Justify: 제네시스 블록으로부터 supermajority link로 연결되었다면 해당 체크포인트가 타당하다(justified)고 합니다.

· 확정(Finalize): 타당하다고 판단된 (justified) 블록 바로 위, 높이가 1만큼 높은 자식 체크포인트와도 supermajority link로 연결된다면, 비로소 그 블록이 확정되었다고 합니다.

동적 검증인 집합에 의한 공격 방법. 출처=Casper the Friendly Finality Gadget p.7.
동적 검증인 집합에 의한 공격 방법. 출처=Casper the Friendly Finality Gadget p.7.

위의 그림은 체크포인트가 두 갈래의 포크에서 각각 다르게 생성됨에 따라 검증인 집합이 보라색과 초록색 두 가지로 나뉘게 되는 상황을 표현합니다. 좀 더 자세히 알아보겠습니다.

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의 정의를 약간 수정하는데, 이때 새로운 개념 몇 가지를 도입합니다.

체크포인트 확정 시, 새로운 검증인 집합과 이전 검증인 집합 간의 관계. 출처=DSRV 리서치
체크포인트 확정 시, 새로운 검증인 집합과 이전 검증인 집합 간의 관계. 출처=DSRV 리서치

체크포인트가 확정되기 전과 후로 검증인들의 집합을 표현하자면 위의 그림과 같습니다. 파란색 검증인은 새로운 체크포인트가 확정되는 순간 검증인 집합에서 탈퇴하며, 빨간색 검증인은 새로운 체크포인트가 확정되는 순간 검증인 집합에 등록됩니다.

새로운 체크포인트가 확정된 후, 검증인 집합을 새로운/이전 검증인 집합으로 나누면 다음과 같습니다.

 

· 새로운 검증인 집합(Forward Validator Set): 체크포인트가 새롭게 확정되면서 들어온 검증인들을 포함하고 탈퇴한 검증인들을 제외한 검증인 집합

· 이전 검증인 집합(Rear Validator Set): 체크포인트가 새롭게 확정되면서 들어온 검증인들을 제외하고 탈퇴한 검증인들을 포함한 검증인 집합

 

새로운 또는 이전 검증인 집합의 개념을 사용하면 새롭게 supermajority link의 정의를 내릴 수 있습니다.

동적인 검증인 집합에서는 이제 새로운 검증인 집합과 이전 검증인 집합 모두에서 각각 2/3 이상의 투표를 받아야만 supermajority link를 생성할 수 있습니다.

동적 검증인 집합에 의한 공격 방법. 출처=Casper the Friendly Finality Gadget p.7, DSRV 재구성본
동적 검증인 집합에 의한 공격 방법. 출처=Casper the Friendly Finality Gadget p.7, DSRV 재구성본

다시 동적 검증인 집합에 의한 공격 방법을 표현한 그림으로 돌아가자면, 오른쪽 포크의 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 투표를 진행할 수 있습니다.



마무리: 지분증명으로 향해가는 이더리움 2.0

출처=DSRV 미디엄
출처=DSRV 미디엄

안녕-! 다시 인사하지만 내 이름은 캐스퍼, 귀여운 유령 친구야. 블록체인에서도 손꼽히게 어려운 캐스퍼를 여기까지 따라 읽어주다니… 정말 고마워. 우리 함께 난관을 헤쳐왔으니, 이젠 그 무엇도 두려워할 필요가 없겠어! 친근한 나의 이름을 따서 만들었으면서 이렇게 악랄하게 어려울 줄은 정말 나도 몰랐지 뭐야.

이게 우리의 마지막이라고 아쉬워하지는 말아 줘. 지분증명 이더리움2.0을 공부하는 여정에서 나는 간간이 계속해서 등장할 예정이니까. 오늘 다룬 캐스퍼는 이더리움2.0에서 계속해서 등장하는 중요한 개념이거든.

다음 글은 LMD GHOST에 관한 글이야. “Latest Message-Driven Greedy Heaviest Observed Sub-Tree”(뭔 소리인지 모르겠지만 어쨌든..)의 약자인데, 이더리움 2.0에서는 포크가 발생했을 때 어떤 기준으로 어떤 포크를 선택할 것인가에 대한 내용이야.

역시나 GHOST를 붙인 걸 봐서 나처럼 유령으로 콘셉트를 확실히 잡은 것 같은데, 저 유령하고도 나는 친해. 나와 LMD GHOST를 합치면 — 짜잔, Gasper라는 친구가 탄생하거든. 우리가 어떻게 친구가 되었는지도 우리 DSRV 리서치에서 다루어준다고 하니까, 앞으로도 간간이 보자고. 그럼 안녕-!

Key Takeaways

1. 캐스퍼는 이더리움의 작업증명 메커니즘에 더하여, 지분증명을 기반으로 블록을 확정시키는 추가적인 메커니즘입니다.

2. 캐스퍼는 32블록마다 있는 체크포인트 중, 검증인 간 투표를 통해 하나의 체크포인트를 확정하는 역할을 합니다.

3. 작업증명 기반 이더리움에 51% 공격이 발생하더라도, 공격자는 확정된 체크포인트 이전으로 블록들을 롤백시킬 수 없습니다.

4. 캐스퍼는 같은 높이의 여러 개의 체크포인트에 동시에 투표를 하는 경우, 검증인의 예치금을 몰수하는 방식으로 초기 지분증명 프로젝트인 피어코인에서 발생했던 Nothing-at-Stake 문제를 해결합니다.

5. 누구나 검증인으로서 참여하고 탈퇴할 수 있는 동적 검증인 집합에서는 새로운 검증인 집합과 이전 검증인 집합 모두에서 2/3 이상의 투표를 받아야 supermajority link가 생성됩니다.

저자: 윤석중 DSRV 연구원

유의사항: 이 글은 정보 전달을 위한 목적으로 작성되었으며, 특정 프로젝트에 대한 투자 권고, 법률적 자문 등 목적으로 하지 않습니다. 모든 투자의 책임은 개인에게 있으며, 이로 발생된 결과에 대해 어떤 부분에서도 DSRV는 책임을 지지 않습니다. 본문이 포괄하는 내용들은 특정 자산에 대한 투자를 추천하는 것이 아니며, 언제나 본문의 내용만을 통한 의사결정은 지양하시길 바랍니다. 추가적으로 이 글이 쓰여진 시점에서 DSRV는 이더리움 비콘 체인의 검증인(벨리데이터)으로 참여하고 있음을 알려드립니다.

DSRV는 좋은 콘텐츠의 힘을 믿고, 기술의 혁신이 우리의 삶과 사회를 더 나은 방향으로 이끈다 확신합니다.​

블록체인과 웹3를 보다 많은 사람들이 접하고 더 나은 경험을 할 수 있도록 우리의 생각을 콘텐츠로 선보입니다.

사용자를 위한 실용적인 가이드, 웹3를 위한 핵심기술 스택에 대한 소개, 그리고 개발자들을 위한 전문 아티클까지. DSRV와 함께 다음 세대의 인터넷을 위한 여정을 시작하세요.

 

더 자세한 내용은 '코인데스크 프리미엄'에서 읽을 수 있습니다.

 

제보, 보도자료는 contact@coindeskkorea.com



댓글삭제
삭제한 댓글은 다시 복구할 수 없습니다.
그래도 삭제하시겠습니까?
댓글 0
댓글쓰기
계정을 선택하시면 로그인·계정인증을 통해
댓글을 남기실 수 있습니다.