LFT – loopchain consensus algorithm

저번 포스팅에서는 블록체인을 위한 합의 알고리즘 중, 기존의 상태 머신 복제 프로토콜에서 활용하던 BFT(Byzantine Fault Tolerance)계열 합의 알고리즘에 대해 설명하였습니다. BFT 계열 합의 알고리즘은 머신의 개수나, 지분을 통하여 투표를 하여 합의하는 방식으로 에너지 낭비가 없고 즉각적인 합의가 가능하다는 장점이 있습니다.

블록체인 기술 연재 시리즈

블록체인 기술 개요
스마트 컨트랙트(Smart Contract) 개요 -1
스마트 컨트랙트(Smart Contract) 개요 -2
loopchain SCORE(Smart Contract On Reliable Environment
합의 알고리즘 개요
작업증명(PoW, Proof-of-work)과 지분증명(PoS, Proof-of-stake)
BFT 기반 합의 알고리즘

이번 포스팅에서는 loopchain에서 사용하는 합의 알고리즘인 LFT에 대해서 공개하겠습니다.  LFT는 Tendermint나 PBFT(Practical Byzantine Fault Tolerance)와 마찬가지로 BFT 계열 합의 알고리즘입니다. 기존의 상태 머신 복제 프로토콜중 하나인 Raft를 비잔틴 노드의 공격을 극복할 수 있도록 개선한 알고리즘 입니다.

LFT

LFT는 현재 loopchain에서 사용하는 합의 알고리즘입니다. 그러나 loopchain은 Pulgin형태로 합의 알고리즘이 구현되어있기 때문에 필요에 따라 PBFT와 같은 다른 합의 알고리즘을 사용할 수 있습니다. 추후에 loopchain은 github를 통해 오픈소스 프로젝트로 공개될 것이기 때문에 직접 다운로드 받고 실행 시킬 수 있습니다.

LFT는 기존 PBFT를 사용하는 합의 알고리즘에서 발생하는 통신 오버헤드를 Piggybacking을 이용하여(네트워크에서 메시지를 통합하여 통신 오버헤드를 감소시키는 방법) 줄였으며 Spinning (리더를 매번 교체하는 기법)기법을 이용하여 악의적인 노드가 네트워크의 합의를 해치지 않는 범위에서 네트워크에 문제를 일으킬수 있는 특정 노드의 트랜잭션 거부 문제,  리더에 의한 네트워크 지연과 같은 문제를 해결하였습니다. 또한  기존 알고리즘들이 가지고 있던 지나치게 복잡한 리더 선정 알고리즘을 단순화 하였습니다.

LFT Normal Process

위 그림은 LFT 알고리즘의 합의 과정에 대한 그림입니다. 네트워크가 시작되면 검증 노드(검증을 통해 합의에 참여하는 노드)들은 사전에 결정되어 있는 리더 노드에게 처리를 원하는 트랜잭션을 전송합니다. 리더 노드는 수집한 트랜잭션을 이용하여 블록을 생성하고 자신의 서명과 함께 다른 모든 검증 노드에게 전송합니다.

각 검증 노드들은 블록을 받으면 1) 현 리더가 블록을 생성했는지 확인하고, 2) 블록의 높이와 이전 블록 해시가 올바른지 확인 3) 블록의 데이터가 올바른지 확인합니다. 검증 노드는 1~3번이 옳다면 Vote 데이터를 생성하여 네트워크의 모든 노드들에게 전파합니다. Vote 데이터를 전체 노드에게 전파하는 것은 매우 중요한데 이는 리더 노드가 비잔틴일 경우 정족 수 이상의 노드들에게만 블록을 전파하여 특정 노드들을 네트워크로 부터 분리하도록 시도할 수 있기 때문입니다. 이러한 문제를 방지하기 위해 모든 피어에게 Vote 데이터를 전파하며 이는 기존 Raft 알고리즘과의 다른 점입니다. 이 과정에서 블록을 못받은 노드는 블록이 생성되었는지에 대한 정보를 알 수 있고 다른 노드에게 블록을 요청할 수 있습니다.

본 포스팅에서는 LFT의 동작 방식에 대해 간략하게 설명하였습니다. 기존 알고리즘과의 비교 및 장애 상황 극복 시나리오 등의 자세한 내용은 LFT 백서를 통해 확인할 수 있습니다.

 

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중