Casper PoS 의 Consensus 에 대한 설명 -- 2편

in #kr7 years ago

1편에 이어지는 글입니다.

https://steemit.com/kr/@kanghamin/casper-pos-consensus-1#@porchman/re-kanghamin-casper-pos-consensus-1-20170706t134224682z


이번에는 Validator들이 어떻게 합의를 하는지에 대한 포스팅이다. Validator들은 두가지 방법으로 합의를 진행한다. 하나는 Prepare 이라하고 다른 하나는 Commit 이라 한다.

일단 Prepare 와 Commit의 간단한 설명을 미리 하자면,

Prepare는 어떤 Epoch이 진짜 체인인지 시그널을 주는것이며
Commit은 그 Epoch에 대해 Finality를 승인하는것이다.
Prepare의 2/3이상의 투표가 나오면 Commit 투표가 시작되고
Cimmit의 2/3이상의 투표가 나오면 Finality 되어 이전의 블록들은 대체되지 않는다.

일단 Prepare에 대해서 설명하면,

3.jpg

자물쇠 그려져있는것이 100블록마다 Validator들이 finality를 할 수 있는 블록이다. 윗 화살표의 블록일때 아래 화살표의 블록을 Prepare 투표를 할 수 있다. 물론 그림에서 처럼 바로 직전의 1 Epoch (100 블록)일때만 Prepare 투표를 할 수 있는것이 아니라 그 이전의 Epoch들도 투표를 할 수 있다. 만약 바로 직전의 Epoch만 투표가 가능하다면 모든 Process가 투표가 종료될 때까지 멈춰야하기 때문에 블록은 계속해서 마이너에의해 생성되는 동시에 Prepare 투표가 가능하다.

4.jpg

그림과 같이 Prepare의 투표가 3분의 2 이상이 되었다면 Commit 투표를 할 수 있다. 그리고 Commit 투표에서 이 블록이 3분의 2 이상이 투표를 한다면 Finality가 되며 이 블록 전의 히스토리는 바뀌지 않는다.

Validator들이 투표를 악의적으로 하는것을 방지하기 위해 다음과 같은 상황에는 그들의 예치금이 없어지게 된다. (nothing at stake 문제는 https://steemit.com/kr/@loum/nothing-at-stake 에서 공부하실 수 있습니다.)

첫째, Prepare를 하기 위해선 이전의 Epoch의 블록이 2/3이상 Prepare의 투표가 된 상태여야 한다.

5.jpg

이 그림은 100번째 블록만 나타낸 그림이며 이 사이에는 99개의 블록이 있는것이다. 초록색 원처럼 이전의 블록이 Validator들에 의해 2/3이상 Prepare 된다면 다음 블록에 Prepare 투표를 할 수 있다. 빨간색 원처럼 이전의 블록이 2/3이상 Prepare되지 않았는데 다음 블록에 Prepare 투표를 한 Validator들의 예치금은 사라지게 된다.

둘째, Commit을 하기 위해선 그 블록이 2/3 이상 Prepare의 투표가 된 상태여야 한다.

6.jpg

초록색 원처럼 Prepare이 2/3이상이 된 블록에 Commit에 대한 투표를 할 수있지만 빨간색 원처럼 Prepare이 2/3이상이 되지 않은 블록에 Commit에 대한 투표를 할 경우도 예치금을 사라지게 된다.

셋째, 어미가 같은 블록중에서는 한번 이상의 Prepare를 하면 안된다.

7.jpg

Prepare의 중복 투표를 하게 되면 예치금이 사라지게 된다.




이러한 3가지 또는 더 많은 방법으로 악의적으로 투표를 하는것을 방지하게 된다. 이더리움 네트워크에서 Validator들에게 원하는것은 Prepare와 Commit 정직하고 빠르게 승인하는것이다. 하지만 예치금이 사라지는 문제는 Validator들이 투표를 주저하게 만들 수있다. 그러므로 네트워크가 Finality되지 않는다면 모두가 손해를 보게 만들었다. 2/3 prepare 이상 또는 2/3 Commit 이상이 되지 않는다면 모두 손해를 보게된다. 즉 마이너스 금리가 적용되는 셈이다. 물론 2/3 prepare가 나오고 2/3 commit 이상이 나오게 된다면 Prepare 와 Commit에 투표를 한 Validator들은 이익을 본다.

한번 더 쉽게 설명하면,

2/3 prepare가 나오고 2/3 Commit 이상이 나와서 Finality 가 되었을 경우에 투표를 하지 않은 Validator들은 마이너스 이율에 의해 손해를 보며, Prepare 이나 Commit만 투표한 사람의 이익보다 Prepare 과 Commit 둘 다 투표한 사람의 이익이 더 크다.
또한, 2/3prepare이상이 나오지 않거나 2/3 Commit 이상이 나오지 않는 경우에 전부 손해를 보게 되지만 아무 투표를 하지 않는 Validator들의 손해가 가장크며, Prepare 이나 Commit만 투표한 사람의 손해보다 Prepare 과 Commit 둘 다 투표한 사람의 손해가 더 적다.

그러므로 Validator들은 Prepare 과 Commit을 전부 정직하게 투표하고 빠르게 투표한다면 최대의 이익을 얻을 수 있다.

Sort:  

오 재밌습니다.
제가 유치하게 설명을 바꿔보면 이런거네요.
9명의 사람(Validator)이 있다고 치고 그들에게 쉬운 수학문제가 ​하나 주어집니다. (예를들면 2+5=?)
​그 문제의 정답을 푸는 보상은 1달러 입니다. 그런데 이 게임에 참여하려면 10달러를 걸어야 합니다.

게임규칙은

  1. 정답을 알겠으면 "정답(Prepare)"을 외쳐야 함.
  2. ​정답을 외친 인원이 6명(2/3)를 넘었을 때 정답(commit) 제출가능, 하지만 6명이 안됐는데 정답을 외치면 10달러 잃음
  3. 같은 정답이 6명(2/3) 되는 순간 게임종료. 6명에게 1달러 보상 (finality 완성)
  4. 같은 수학문제에 또 참여하여 정답을 맞추는 건 금지. 참여비 10달러 잃음

POS는 이렇게 자기지분을 걸고 참여하게해서 공격자의 nothing at stake를 해결한 거군요.
자신의 이익이 걸렸는데 7이 아닌 8같은 오답에 6명이 합의할리도 없고요. +_+

PoS 에서는 수학문제를 풀지않는다는것을 제외하고는 재밌게 잘 바꿔주신것 같습니다 :)

이게 전부 자동으로 진행되게 되는걸까요?

그럴겁니다. 모든 Validator들이 일일히 Prepare 과 Commit을 할 수없으니깐요. 물론 offline으로 있으면 안되는것으로 알고있습니다.

아니 이좋은 내용을 이백오십명이나 봤는데 보상이 이렇다니....비회원들이 이리많단말인가

감사합니다 ㅎㅎ 200분이 넘게 보셨다는게 정말 뿌듯한것 같습니다

Coin Marketplace

STEEM 0.16
TRX 0.15
JST 0.028
BTC 57658.56
ETH 2273.22
USDT 1.00
SBD 2.46