Consensus

합의 메커니즘(알고리즘)은 신뢰가 없는 주체들 간 합의에 도달하는 방법입니다. 블록체인 기술에서는 블록이 유효한지 아닌지에 대한 합의에 도달하는 데 사용됩니다. 블록체인 네트워크의 성능은 선택된 합의 메커니즘의 성능에 의존하며, 블록체인 애플리케이션의 사용성에 상당한 영향을 미칩니다. 이 문서에서 우리는 WEMIX가 어떻게 고성능 합의 프로세스를 구현했는지 살펴볼 것입니다.

RAFT(Reliable And Fault Tolerant) Algorithm

RAFT는 선출된 리더에 의하여 클러스터의 모든 노드에 있는 데이터 저장소의 일관성을 보장하게 하는 합의 방식입니다. RAFT에 참여하는 노드들은 리더(Leader), 추종자(Follower) 중 하나이며, 리더 선출 중엔 누구나 후보자(Candidate)가 될 수 있습니다. 리더는 추종자들에게 동기화할 데이터를 생성해서 공유 해야 합니다. 리더는 보통 하트비트 메시지를 모든 추종자들에게 주기적으로 전송함으로써 리더의 존재를 알립니다. 각 추종자들은 리더의 하트비트에 대해 타임아웃 값을 랜덤하게 선택하고, 타임아웃 기간 동안 하트비트를 수신하면 타임아웃을 다시 리셋합니다. 반면에 타임아웃 동안 하트비트를 받지 못할 경우, 추종자는 후보자로 상태를 바꾸고 리더 선출에 참여하게 됩니다. 여러 노드가 동시에 리더 선출에 참여하면 충돌이 발생하기 때문에 타임아웃은 랜덤 백오프 로직 따라 결정하게 됩니다.

WEMIX3.0 합의 메커니즘

SPoA(Stake base Proof of Authority)

WEMIX 블록체인은 고성능 실시간 서비스를 지향하는 퍼블릭 블록체인으로 블록 생성은 사전에 허가받은 Authority Member들에 의해서만 가능합니다. 따라서 기본 합의 알고리즘은 PoA를 따릅니다. 하지만, 선출된 Authority Member의 오동작 또는 악의적인 행동에 대한 물리적인 페널티를 On-Chain 상에서 부여하기 위하여 WEMIX를 특정량 이상 Staking 하도록 강제하였습니다. 이러한 WEMIX 블록체인의 합의 방식을 SPoA라고 정의합니다.

Authority

WEMIX 블록체인의 합의 알고리즘에 참여하는 Authority는 Bitcoin/Ethereum 등의 합의 알고리즘 PoW의 마이너와 같은 역할을 수행하는 컨소시움을 의미합니다. WEMIX 블록체인에서 Authority에 포함되거나 삭제되는 과정은 기존 Authority Member들의 Voting에 의해서 결정됩니다. Authority Member가 되기 위한 조건 및 절차는 아래와 같습니다.

  1. 명확한 신원 확인

  2. 오프라인에서 법적 효력이 있는 계약을 WEMIX 파운데이션과 체결

  3. 기본 신상 정보의 공개

  4. 사전 정의된 WEMIX를 시스템 레지스트리 컨트랙트에 등록된 Staking 컨트랙트에 전송

이후 Staking이 확인되면 기존 Authority Member 중 누구라도 멤버 추가 제안을 거버넌스 컨트랙트에 제안하고 기존 Authority Member들의 50% 이상의 찬성이 있으면 새로운 Authority Member로 등록됩니다.

Authority Member들은 사용자들이 생성한 거래 내역을 검증하여 검증이 통과된 거래들을 Mempool에 임시로 저장합니다. Authority Member는 Miner로 선출되었을 때 이전 블록의 해시 정보를 포함한 블록을 생성합니다. 이 과정은 소프트웨어를 통해 자동적으로 이루어지며 Authority Member가 지속적으로 네트워크의 상태를 모니터링 할 필요는 없습니다. 하지만 Authority Member는 블록을 생성하는 컴퓨터가 악의적으로 사용되지 않도록 방화벽 및 어카운트의 개인키 관리에 책임을 져야합니다.

On-Chain 거버넌스 컨트랙트에서 처리 가능한 투표는 현재 dApp으로 구현된 찬반 투표로 추후 다양한 종류의 투표를 지원할 예정입니다. 투표의 가중치는 Phase 1에서는 Staking한 WEMIX의 양에 비례하고, Phase2에서는 Staking한 WEMIX의 양에 상관없이 동일한 가중치가 적용됩니다. 악의적인 행동이 감지되면 Authority Member들의 투표에 의해 당사자는 Authority 자격을 강제로 박탈당할 수 있고 Staking한 WEMIX가 몰수되어 블록생성 보상을 받을수 없게 됩니다.

이와 같이 Staking과 Reward 시스템을 구성한 이유는 참여하는 모든 Authority Member들이 합의된 프로토콜에 의해 동작해야만 하는 당위성을 만들고 WEMIX 블록체인 네트워크의 건전성을 자율적으로 유지하게 하도록 하기 위함 입니다.

Miner Selection

Bitcoin의 PoW를 예로 들자면, 프로토콜에 의해 계산된 Difficulty를 만족하는 블록헤더 해시를 생성한 마이너가 블록생성과 블록전파를 할 수 있도록 되어있습니다. 블록생성의 권한이 따로 존재하지 않기 때문에 상호 경쟁에 의해 블록을 생성하게 됩니다. 이러한 이유로 블록생성 경쟁을 위해 자원이 낭비될 수 밖에 없으며 Difficulty 조건을 만족하는 Work를 증명해야만 하므로 블록생성 시간에 물리적인 제약(평균 비트코인 10분/ 이더리움 15초)을 주게됩니다. 결과적으로 PoW는 확장성 트릴레마를 가지고 있으며 이를 해결하기 위한 현실적인 방안으로 PoS의 도입 또는 샤딩(Sharding) 등이 제안되어 연구되고 있으나, 아직까지는 완전하게 분산화된 방식으로 PoS로 운영되는 퍼블릭 블록체인은 존재하지 않습니다.

WEMIX3.0은 PoW나 PoS같은 방식을 사용해서는 원하는 서비스를 퍼블릭 도메인에서 제공하는 것이 불가능하다고 판단하였습니다. 초기에는 DPoS, PoA, PBFT등의 합의 방식이 고려되었으나 WEMIX 블록체인은 가장 적합한 합의 알고리즘으로 DPoS와 PoA의 장점을 차용한 새로운 컨소시움 합의 알고리즘인 SPoA를 고안하였습니다. SPoA는 기본적으로 투명한 신원 정보 및 법률 계약을 통하여 Authority를 구성하고 참여한 Authority Member들의 부적절한 행동을 막기위해 Staking 개념을 도입하고 있습니다.

WEMIX 블록체인은 블록을 생성하는 마이너를 선정하기 위하여 마이너 선정 알고리즘으로 RAFT의 구현체인 etcd를 사용하고 있습니다. etcd는 분산 시스템에 필요한 중요한 정보를 보관하고 관리하는데 사용되는 오픈 소스 분산 key-value 저장소입니다. 마이너는 Lock이 가능한 토큰을 etcd 분산시스템에 저장하고 블록을 생성합니다. 라운드 로빈과 같이 효율이 극대화된 마이너 선정 기법을 사용하지 않는 이유는 분산 시스템에 존재하는 합의노드 네트워크의 분기를 막기 위해서 입니다. etcd는 책임과 권한이 명확한 다수(40개 이상)의 허가받은 Authority Member 들의 즉각적인 완결성(Finality)을 제공해야하는 시스템에 효율적인 방법입니다.

Reward Distribution

기존 합의 알고리즘들은 블록을 생성한 주체가 블록보상(Block Reward)과 취합한 수수료(Fee)를 모두 가져가는 구조를 가지고 있습니다. 이러한 이유로 DPoS와 PoA같이 경쟁을 기반으로 하지 않는 시스템에서는 블록생성의 권한을 공평하게 나누는 것이 해결해야하는 가장 중요한 문제입니다. 하지만 이러한 제약은 고속으로 거래를 처리하여 블록을 생성해야하는 BP(Block Producer)들이 주고 받게 되는 메시지를 증가시키고, 트래픽이 Queue에 쌓여 있는 상황에서 블록생성의 기회를 균일하게 나누기 위해 자주 마이너를 변경하게되어 최상의 성능을 달성하지 못하는 문제를 발생시킵니다. 이러한 단점을 보완하기 위해서 SPoA는 Authority Member 중 누가 블록을 생성하더라도 Staking 컨트랙트에 보관되어있는 Authority Member들의 WEMIX Staking량에 비례하여 보상이 주어질 수 있도록 설계되었습니다.

블록을 생성한 Authority Member는 블록보상 분배내역을 블록 헤더에 포함시켜야 하며 정해진 룰(i.e., 거버넌스 컨트랙트에 기록되어 있는)에 어긋나면 해당 블록은 다른 Authority Member 들에 의해 전파되지 않습니다.

보상을 받게 되는 어카운트(Member 당 1개)는 거버넌스 컨트랙트에 최초 시스템 컨트랙트들을 배포한 거버넌스 코인베이스 어카운트를 제외하고 모두 투표에 의해 등록되어 있으며, 블록을 생성하는 Authority Member는 해당 어카운트들의 밸런스 상태를 업데이트하여 Patricia Trie의 루트 해시값에 계산 결과를 반영시킵니다.

Authority Member를 포함하여 모든 풀 노드는 전송받은 블록의 해시를 검증하여 거버넌스 컨트랙트에 기록되어 있는 Rule이 정확하게 반영되지 않는 것이 감지되면 해당 블록을 폐기하고 Member 중 한 명이 투표를 통해서 해당 Member를 제거하고 Staking된 WEMIX를 몰수하는 작업을 수행할 수 있게 됩니다.

Block Generation

WEMIX 블록체인의 블록생성 간격은 거버넌스 컨트랙트에 설정되어 있습니다. Mempool에 거래의 존재 유무와 상관없이 Liveness와 Block Finality를 보장하기 위해 BP는 정해진 시간마다 (최초 설정값 1초) 블록을 생성하는 로직을 가지고 있습니다. 블록생성 간격은 Authority의 투표에 의해 변경 가능한 변수값입니다.

Block Verification

마이너에 의해 생성된 블록이 P2P 네트워크를 통해 전파되면 이를 수신한 각각의 풀 노드(Authority Member 포함)는 블록의 유효성을 스스로 검증하고 판단하여야 합니다. 마이너가 아닌 Authority 노드들은 스스로 검증하여 거버넌스 컨트랙트에 기록된 멤버 중 마이너로 선정된 멤버가 생성한 블록인지 확인하고 보상이 정상적으로 분배되어 있으며 거래 내역이 전체 시스템의 상태(State)에 반영되었다고 판단되면 해당 블록을 이웃 노드들에게 전파하게 됩니다.

이를 전달받은 Non-Authority 풀 노드는 헤더에 포함된 멤버들의 서명이 올바른지를 확인하고 거래내역을 검증한후 블록에 기록된 거래가 정확한 룰에 따라 생성되었다고 판단되면 블록을 로컬 디스크에 저장하고 이웃 노드에게 전파합니다.

전파되는 블록을 검증하기 위해 위의 과정을 진행하기 전에 모든 풀 노드가 먼저 검증해야 하는 것이 두 가지 있는데 이는 Miner_Limit과 Max_Consecutive_Blocks입니다.

Miner_Limit은 아래와 같이 정의되는데 RAFT에서 특정 멤버가 마이너로 결정되면 블록을 생성할 수 있는 Epoch가 주어지는데, 이 Epoch가 연속으로 주어질 수 없도록 하는 것을 목적으로 합니다. 즉, 모든 블록은 아래의 Miner_Limit을 만족하는 경우에만 유효합니다.

Miner_Limit = floor(SIGNER_COUNT / 2) + 1 (Number of consecutive epochs out of which a miner may only occupy one)

Max_Consecutive_Blocks는 한 Epoch에서 동일 마이너가 최대 연속으로 생성할수있는 블록의 개수입니다. 이값은 만약 멤버 노드의 해킹으로 네트워크가 분기될때 분기된 블록이 생성할 수 있는 높이를 제한하기 위하여 도입된 변수입니다. WEMIX3.0에서 Max_Consecutive_Blocks는 1입니다.

위의 두가지 값은 블록 완결성을 보장하기 위한 방법이며 악의적으로 행동하는 Authority Member가 네트워크에 줄 수 있는 피해를 최소화하기 위하여 고안되었습니다.

Last updated