루프 장애 허용
루프 장애 허용(LFT; Loop Fault Tolerance)은 향상된 비잔틴 장애 허용(Byzantine Fault Tolerance)의 32비트 기반 알고리즘으로, 기존 분산 환경에서의 장애 허용 방법으로 많이 사용되는 상태 머신 복제 알고리즘 중 하나인 Raft32 알고리즘을 비잔틴 노드의 공격에도 방어할 수 있고 블록체인 네트워크 특성에 최적화되도록 개선한 합의 알고리즘이다.
개요
루프체인(Loopchain)은 비잔틴 장애 허용을 지원하는 루프 장애 허용을 통해 분기가 없는 빠른 합의를 지원한다. 루프 장애 허용을 기반으로 신뢰 관계가 있는 복수의 노드를 하나의 그룹으로 묶어 좀 더 빠른 합의를 이루어 낼 수 있으며 이러한 그룹 및 노드에 투표권 수를 자유롭게 설정할 수 있어 다양한 합의 체계 구축이 가능하다. 비잔틴 장애 허용 계열 합의 알고리즘을 사용하는 루프 장애 허용 합의 알고리즘은 블록을 생성하고 전파하는 리더노드와 생성한 블록의 내용을 검증하여 블록의 유효성을 투표하는 검증노드로 구성된다.
메시지 데이터 구조
다른 블록체인처럼 현재 블록의 단방향 해시값을 저장하여 해당 블록이 위변조되었는지 감지할 수 있게 하였으며 이전 블록 해시 데이터를 통해 해시 연결성을 보장한다. 그 밖에 블록 높이(블록 순번), 블록 생성 시간, 트랜잭션 머클트리와 같은 기존 블록체인에 들어가는 데이터들이 포함된다. 구성하는 블록체인에 따라 블록체인 위에서 돌아가는 서비스의 상태를 저장하기 위한 머클 패트리샤 트리 혹은 IAVL+ 트리 등의 상태 머신 저장을 위한 자료구조를 추가할 수 있다. 루프 장애 허용을 구현한 블록체인의 블록은 일반적인 블록체인 네트워크에 포함되는 데이터 외에 이전 블록에 대한 투표 결과를 포함한다. LFT 합의 알고리즘은 각 검증노드가 투표 데이터를 다른 모든 노드에 전송하기 때문에 각 검증노드는 이 단계에서 정족수 이상의 투표를 받으면 각 검증노드가 해당 블록을 자신의 블록체인에 추가할 수 있다. 하지만 이때 네트워크의 정족수 이상의 투표를 받지 못하는 경우가 생길 수 있는데 이러한 노드의 이전 블록을 자신의 블록체인에 추가할 수 있게 하기 위해서 이후 블록에 이전 블록의 투표 데이터를 추가하여 전송한다. 또한, 허가형 블록체인의 경우 해당 블록을 검증한 사람에 대한 증거가 블록체인에 남아있는 것이 중요하기 때문에 해당 블록에 대한 투표 증거를 남기는 역할도 하게 된다.
동작 방식
합의가 시작되면 검증노드들은 리더노드에 처리하기 원하는 트랜잭션을 전송한다. 리더노드는 수집한 트랜잭션을 이용하여 블록을 생성하고 자신의 서명과 함께 다른 모든 검증노드에 전송한다. 각 검증노드들은 블록을 받으면 현 리더가 블록을 생성했는지 확인하고, 블록의 높이와 이전 블록 해시가 올바른지 확인, 블록의 메시지가 올바른지 확인한다. 검증노드는 검증 결과에 따라 투표 메시지를 모든 노드들에게 보낸다. 각 노드가 정족수 이상의 투표를 받게 되면 해당 높이의 블록을 자신의 블록체인에 추가할 수 있다.
각주
참고자료
- Matthew Minseok Kim, 〈ICON에 대해서 알아보자〉, 《미디엄》, 2018-01-27
- theloop, 〈LFT:Byzantine Fault Tolerance를 지원하는 경량화된 고성능 합의 알고리즘〉, 《LFT 백서》, 2017-06-23