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가 되기 위한 조건 및 절차는 아래와 같습니다.
명확한 신원 확인
오프라인에서 법적 효력이 있는 계약을 WEMIX 파운데이션과 체결
기본 신상 정보의 공개
사전 정의된 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)과 권한을 집중시키는 문제점을 가지고 있습니다. 이는 공정한 블록 생성 권한 분배가 중요한 DPoS(위임 지분 증명) 및 PoA(권한 증명)와 같은 비경쟁 시스템에서 특히 문제가 될 수 있습니다. 동등한 기회를 보장하기 위해 블록 생성자가 자주 바뀌게 된다면, 블록 처리 과정에서 발생하는 메시지가 증가하고 트래픽이 queue에 쌓이면서 최상의 성능을 달성하지 못하는 문제가 발생할 수 있습니다.
WEMIX3.0은 이러한 문제점을 해결하기 위해 SPoA(스테이크 기반 권한 증명) 합의 메커니즘을 도입했습니다. SPoA는 블록 생성자와 상관없이 각 authority member가 스테이킹한 WEMIX 양에 비례하여 블록 보상을 분배하는 방식입니다. 이를 통해 모든 블록 생성자들이 지속적으로 참여하도록 유도하면서 동시에 네트워크 보안을 유지할 수 있습니다. 또한, 블록 생성자는 블록 헤더에 투명한 보상 분배 정보를 포함해야 하며, 미리 정해진 규칙을 위반하면 다른 authority member들로부터 블록 생성 권한을 박탈당할 수 있습니다.
WEMIX3.0은 공정하고 지속 가능한 보상 분배를 위해 블록 보상과 성능 수익 배분을 모두 고려하는 듀얼 토큰노믹스 구조를 사용합니다. 초기에는 모든 참여자가 블록 민팅을 통해 블록 보상의 일부를 받도록 합니다. 시간이 지남에 따라 시스템은 블록 민팅 보상 비율을 점차 감소시키고, 트랜잭션 수수료와 직결된 성능 수익 배분 비율을 증가시켜 나갑니다. 이러한 변화는 최대 5억 9천만 개의 WEMIX 최대 발행량에 도달할 때까지 채굴 속도를 점차 줄이는 블록 채굴 반감기 메커니즘을 통해 이루어집니다. 최대 발행량에 도달하면 블록 채굴은 완전히 중단되고, 이후에는 성능 수익만이 유일한 보상 방식이 됩니다.
반감횟수
0
1
2
3
⋯
16
민팅
1
0.5
0.25
0.125
⋯
0.000015
트랜잭션
수수료
α
α
α
α
⋯
α
블록 리워드
1+α
0.5+α
0.25+α
0.125+α
⋯
0.000015+α
블록 민팅 보상이 감소함에 따라, 트랜잭션 수수료의 일부가 성능 수익 배분으로 할당되는 비율이 증가하여 이를 상쇄합니다. 이러한 전략적 변화는 모든 참여자에게 균형되고 공정한 보상 분배를 보장하여 장기적인 네트워크 성장과 지속 가능성을 촉진합니다. 꼼꼼하게 설계된 이중 보상 구조는 합리적이고 지속 가능한 보상 시스템을 제공하면서 WEMIX3.0이 최고의 상업적 블록체인으로 발돋움하려는 목표를 달성하는 데 기여합니다. WEMIX3.0은 트랜잭션 수수료의 일부 또는 전체를 소각할 수 있습니다.
각 참여자는 하나의 계정을 보유하며, 투표를 통해 보상을 받는 계정이 등록됩니다. 다만 거버넌스 계약에 최초 시스템 컨트랙트를 배포하는 거버넌스 계정은 예외입니다. 블록을 생성하는 authority member는 계정의 잔액 상태를 업데이트하며, 계산 결과는 Patricia Trie의 루트 해시 값에 반영됩니다.
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