비콘 체인 캐스퍼 FFG RPJ 간단 소개

Beacon Chain Casper FFG RPJ mini-spec

Leah Jang
해시드 팀 블로그
7 min readSep 7, 2018

--

이 글은 비탈릭 부테린(Vitalik Buterin)이 이더리움의 비콘 체인(beacon chain)에 관해 2018년 8월에 쓴 Beacon Chain Casper FFG RPJ mini-spec의 번역본입니다.

비탈릭은 캐스퍼를 풀어나가던 중 제안자(proposers)와 증인(attesters)으로 양분된 검증자 사이에서, 블록을 생성하는 제안자 쪽으로 권력이 집중되는 상황을 우려했습니다. 이에 비탈릭 부테린과 저스틴 드레이크(Justin Drake)는 비콘 체인을 도입합니다. 비콘 체인에는 지금까지 캐스퍼에 대해 고민해온 결과물들이 자연스럽게 한데 어우러져 있습니다. 비콘 체인 1단계에서는 담합한 검증자 집단에 대한 저항성, 인센티브 부여, 난수 공정성을 다룹니다. 정당성과 확정성이 도입된 2단계에서는 FFG의 핵심이라고 볼 수 있는 두 개의 삭감 조건을 보여주고, 마지막 3단계에서는 동적으로 변하는 검증자 집단에서도 비콘 체인이 더 나은 장애 허용수준을 가짐을 보입니다.

이 글은 FFG, 즉각 메시지 기반 GHOST(RPJ)보다는 비콘 체인 자체에 중점을 두고 쓰였습니다. 이더리움과 캐스퍼 알고리즘에 관심있으신 많은 분들께 도움이 되길 바랍니다.

번역: Leah Jang

감수: Kyuntae Ethan Kim, Brian Choi

보안 분석, 안전성 증명(safety proofs), 그리고 기타 학술적 목적으로 비콘 체인 메커니즘에 대해 간단히 소개한다. 상대적으로 관련성이 적은 세부사항에 대해서는 다루지 않는다.

비콘 체인 1단계

정당성(justification) 없음, 다이너스티(dynasty) 변화 없음

*다이너스티(dynasty): 합의에 참가하는 검증자의 집합. 누구나 참여하고 나갈 수 있기 때문에 동적(dynamic) 성격을 갖고 있다.

단순화하기 위해, 우선 모두 같은 양만큼 스테이킹한 유효성 검증자(validator) 집단 V=V1…Vn이 있다고 가정하자. 그리고 검증자 집단의 부분집합(subset) S1…S64이 서로소라는 보장은 없으나, |Sℹ︎|≥floor(|V|/64)조건을 만족한다고 하자. |x|는 어떤 집단의 크기를 나타낸다(즉, 여기에서는 검증자의 수를 말한다.) 또한 그 시스템이 검증자에 대한 무작위 순열 p1…pN을 생성한다고 가정하자.

시간(time)을 슬롯(slot)으로 나눠보자. 시스템의 제네시스 타임스탬프가 T0라고 하면, 슬롯 i는 [T0+8i, T0+8(i+1)) 시간을 포함한다. 슬롯 i가 시작되면 검증자 V_(p_i mod N)은 체인의 헤드(head)라고 인식되는 부모 블록을 가리키는 포인터가 포함된 블록을 생성(제안)한다. 또한 이 블록에는 아직 체인에 포함되지 않은, 알고 있는 모든 증언(attestation)이 포함되어 있다.

4초 뒤에 Sℹ︎ mod 64의 검증자들은 새로 발행된 블록을 고려해 어떤 것이 새로운 체인의 헤드인지 결정한다. 모든 것이 잘 돌아가고 있다면 대개 새로 발행된 블록이 체인 헤드가 된다. 또한 검증자는 서명된 증언 [current_slot, h1,h2…h64]을 발행한다. 여기에서 h1…h64는 최대 64개 슬롯의 조상(ancestor) 블록의 해시다. 만약 체인의 슬롯이 높이(height) a와 b에서 손실(missing)되었을 때는, 높이 a+1부터 b-1까지의 블록에 높이 a의 블록 해시값을 사용한다. current_slot은 현재 슬롯 번호를 가리킨다.

이 때 사용된 포크 선택 규칙은 재귀적 최대 증언(recursive maximum attestation) 방식이다. 메커니즘은 다음과 같다:

  1. H를 제네시스 블록과 같게 설정한다.
  2. 가장 많은 수의 검증자가 H에 증언하는 H의 후손 블록을 선택한다 (ie. H∈h1…h64일 때 증언을 발행함)
  3. H가 후손 블록이 없을 때까지 2를 반복한다.

주장(claims)

  • 안전성(safety): 공격자가 V의 1/3 미만을 통제하고 검증자가 무작위로 섞이기 전에, 악의적으로 네트워크를 조종하기 위해 선별된 어떤 V의 부분집합이 있다고 가정하면 이 체인은 절대 번복되지(revert) 않는다. (즉 블록이 한번 메인 체인에 포함되고 나면, 해당 블록은 영원히 메인 체인에 포함된다.)
  • 인센티브-호혜성(incentive-compatibility): 증인의 증언을 체인에 포함하는 것에 대한 보상이 있다고 하자. 또한 증언이 일찍 포함될 수록 더 보상이 높아진다. 블록을 제안하고 블록에 올바른 증언을 하는 것은 인센티브 측면에서 호혜적이다.
  • 난수 공정성(randomness fairness): 길게 보면, 공격자는 난수를 조작함으로써 이득을 얻을 수 없다.

비콘 체인 2단계

정당성과 확정성 도입

체인에 증언이 더해질수록 체인은 각 블록에 증언하는 검증자 전체 집단을 트래킹하게 되고, 변수 last_justified_slot 또한 트래킹하게 되는데 이 변수값은 0에서부터 시작한다. 만약 검증자 집단 V_B가 증언한 어떤 블록 B가 있고, 이 때 |V_B|≥|V|*2/3라고 하자. last_justified_slot은 이전 최댓값 혹은 해당 블록의 슬롯 넘버 중 최댓값으로 증가한다. 체인에 포함되기 위해서는 해당 체인에 last_justified_slot 증언을 해야 한다.

만약 한 체인에서 블록의 기간인 슬롯 s, s+1…s+64즉 65개 모두 정당성을 얻었다면, 슬롯 s에 있는 블록은 확정된 것이다.

우리는 위에서 말했던 포크 선택 규칙을 수정해, H가 제네시스 블록에서 시작하는 것이 아니라 가장 큰 슬롯 넘버를 가진 정당성을 가진 블록에서 시작하도록 할 수 있다.

또한 아래의 삭감 조건 두 개를 더한다.

  • 검증자는 같은 슬롯에서 상충되는 두 증언을 할 수 없다.
  • 검증자는 가장 마지막에 정당성을 가진 슬롯 s1,s2이 있을 때 s1<s2<t2<t1가 되는 슬롯 넘버 t1,t2 모두에 서명을 할 수 없다.

주장(claims)

  • 안전성(safety): 한번 블록이 확정되고 해당 블록까지 체인을 다운로드 받은 노드가 하나 이상 있으면,|V_|A≥|V*1/3|인 검증자 집단 V_A가 하나 혹은 두 개의 삭감 조건을 어기지 않는 한 항상 체인에 포함된다.
  • 실질적 생존성(plausible liveness): 정직한 검증자 집단 V_H의 크기가 |V|*2/3보다 크거나 같을 때, V_H집단만으로도 삭감 조건을 어기지 않으면서 새로운 블록을 확정할 수 있다.

비콘 체인 3단계

동적 검증자 집단 도입

검증자의 부분집합 S_B가 있는 모든 블록 B에는 다음과 같은 제한 조건이 있다.

  • 블록의 다이너스티를 재귀적으로 정의한다: dynasty(genesis)=0
    대개 dynasty(B)=dynasty(parent(B))이다. 단,
    i) B의 128번째 후손 블록이 확정되었고, 이는 체인에서 B이전에 포함된 내용으로 알 수 있을 때
    ii) 블록 B 위로 256개 블록에서 다이너스티 트랜지션이 일어나지 않았을 때. 이 때 dynasty(B)=dynasty(parent(B))+1이다.
  • B의 로컬 검증자 집단(local validator set)을 LVS(B)=S_B⋃S_parent(B)⋃…⋃S_parent63(B)로 정의한다.
  • 체인 내의 두 블록 B1,B2에서 dynasty(B2)-dynasty(B1)=k라고 가정하자. 그렇다면 |LVS(B1)⋂LVS(B2)|≥LVS(B1)*(1-k/60)이다. 이는 LVS(B2)에서도 마찬가지이며, 즉, 로컬 검증자 집단의 최대 1/60는 매 다이너스티마다 변한다.

주장(claim)

  • V를 적절한 LVS(…)로 대체하면 장애 허용이 1/3에서 30%까지 떨어질 수 있으면서, 위에 서술한 주장 모두 만족한다.

[Hashed Community]

Hashed Website: hashed.com

Facebook: facebook.com/hashedfund

Medium: medium.com/hashed-official

twitter: twitter.com/hashed_official

Telegram: t.me/hashedchannel

--

--