BlockChain Consensus Algorithm

Updated:

PoW (작업증명, Proof of Work)

작업증명은 Bitcoin이 도입한 합의 프로토콜입니다. 이 프로세스를 ‘마이닝’이라고 하며 네트워크의 노드를 ‘광부’라고 합니다. “작업 증명”은 도착하기 위해 상당한 노력이 필요한 수학적 문제에 대한 답을 해결하는 과정입니다. 또한 비트코인은 가장 긴 체인(Longest Chain)을 선택하는 방법을 사용합니다.

즉, 풀기 어려운 문제를 빨리 해결한 사람에게 블록을 생성할 수 있는 권한을 주고 그 보상으로 코인을 제공하는 알고리즘 입니다. 문제의 경우 해시 함수의 결과값이 특정 값보다 작아지도록 하는 입력 값(Nonce)을 찾는 문제입니다.

PoS (지분증명, Proof of Stake)

지분증명으로 부르는 PoS는 참여자의 코인 지분을 기준으로 블록을 생성합니다. 즉, 참여자의 코인 지분이 많을 수록 유리해 지는 방식이죠. 다음 블록의 생성자는 부분적으로 사용자가 보유하고있는 crptocurrency의 정도 또는 어떤 경우에는 그 특성을 보유하고 있는 기간에 의해 무작위 시스템에 의해 결정됩니다.

PoS에 대한 무작위 추출은 중앙 집중화를 예방합니다. 그렇지 않으면 시스템의 부유한 개인이 항상 다음 블록을 만들고 지속적으로 부를 창출하며 결과적으로 시스템을 통제하기 때문입니다.

PoS는 PoW보다 훨씬 적은 에너지를 사용하므로 더 비용 효율적이게 됩니다. 작업증명(PoW) 시스템을 사용하는 Bitcoin 거래가 2주 만에 네덜란드 가정의 평균 전기 요금을 요구할 수 있음을 설명합니다. 이것은 비 효과적이거나 지속 불가능 하게 될 수 있습니다.

DPoS

PoS의 경우 일정 지분을 소유한 모든 노드에게 블록 생성 권한이 주어지기에 시간이 오래 걸립니다. 하지만 DPoS의 경우 투표 결과로 정한 상위 노드라는 비교적 적은 숫자로 인해 합의 시간과 비용이 줄어들게 됩니다.

DPos는 라운드로빈 방식으로 블록을 생성합니다. N개의 블록 생산자들이 있을 때 한라운드라고 한다면, N개의 블록 생산자들이 블록 생산자 후보군에서 선출하며 i번째 블록 생성자가 i번째 블록을 서명합니다 (i=N이 될 때까지)

블록생성자의(2/3+1)이 투표하면 한 블록이 확정됩니다. 각각의 DPoS 구현에서 블록 보상 및 인플레이션 매커니즘은 보상 모델에 따라 달라집니다. 투표자들은 블록 생산자가 악의적인 것으로 밝혀지면 다음 라운드에서 해당 블록 생산자에게 투표하지 않음으로써 블록 생산자를 해고 할 수도 있습니다. 높은 수준의 확장성(거래 속도)을 필요로 하는 앱에 대해선 의미가 있다 볼 수 있습니다.

BFT (Byzantine Fault Tolerance)

비잔틴 장군 문제를 해결하고자 고안된 합의 알고리즘으로 투표 메카니즘을 도입한 3단계 프로토콜을 이용한 합의 도출로 프라이빗 블록체인에서 널리 이용됩니다.

BFT는 네트워크의 모든 참여자를 미리 알고있어야 합니다. 참가자 1명이 프라이머리(Primary, 리더)가 되고 자신을 포함한 모든 참가자에게 요청을 보냅니다. 그 요청에 대한 결과를 집계한 뒤 다수의 값을 사용해 블록을 확정합니다. 부정한 노드 수를 n개라고 하면 노드 수는 3n+1개여야 하며, 확정에는 n+1개 이상의 노드가 필요합니다.

PBFT (Practical Byzantine Fault Tolerance)

PBFT는 기존의 BFT 합의 알고리즘이 동기식 네트워크에서만 합의가 가능했던 문제를 해결하여 비잔틴 노드가 있는 비동기 네트워크에서 합의를 이룰 수 있게 하였습니다.

위의 그림은 PBFT 알고리즘이 동작하는 방식을 나타낸 것입니다. 이러한 기존 분산 시스템에서 사용하던 합의 알고리즘은 Primary 노드가 존재합니다. 이 노드는 클라이언트의 요청 순서를 정렬하고, 요청에 대한 결과를 기입하요 다른 노드들에게 뿌려주는 역할을 합니다.

합의 과정

  1. 우선 클라이언트가 모든 노드에 요청을 브로드캐스트 합니다.
  2. Leader가 primary(리더)가 되고 순차적으로 명령을 다른 노드에 전달합니다.
  3. 각 노드는 브로드캐스트 된 명령을 받게 되면 Leader를 포함한 모든 노드에 회신을 합니다.
  4. 각 노드는 전달된 명령을 일정 수 이상 (2n) 이상 수신하면 Leader를 포함한 모든 노드에 수신한 신호를 재 전송합니다.
  5. 각 노드는 수신된 명령을 일정 수 이상(2n)수신하면 명령을 실행하고 블록을 등록해 client에 replay된 메세지를 반환합니다.
  6. 이 과정이 끝나면 모든 노드들은 합의를 이룬 같은 데이터를 가지게 됩니다.

Tendermint (PBFT + DPOS)

Tendermint는 PBFT 알고리즘을 개량하여 공개 또는 비공개(Public & Private) 블록체인에 맞도록 개량한 증명 방식입니다. Tendermint의 전체 합의 프로세스는 PBFT와 거의 유사합니다.

여기에 DPOS개념을 추가하여 블록체인에 적합한 합의 알고리즘을 개발했습니다. Tendermint는 지분(Stake)을 기반으로 투표합니다.

Tendermint는 투표를 할때 Locking 메커니즘을 통해 투표에 참여한 지분을 네트워크에 동결시키고 이를 해제하는 메커니즘을 통해 이중 투표 문제를 막고 지분으로 네트워크를 유지하게 합니다. 또한 이중 투표 시도와 같은 블록체인을 공격하려는 악의적인 행위를 하면 지분을 빼앗는 방법으로 기존의 블록체인이 네트워크 공격 노드에 아무런 처벌을 하지 않던 문제(Nothing of Stake) 문제를 해결하였습니다.

Leave a comment