텐더민트 비잔틴 장애 허용
텐더민트(Tendermint)는 코스모스(Cosmos) 블록체인의 합의 엔진으로 코스모스 블록체인의 특징, 성능, 한계는 전적으로 텐더민트 합의 엔진의 특성, 성능, 한계를 따라간다. 텐더민트 합의 엔진의 경우 블록이 생성될 때마다 전송이 완전히 완료(One block finality)된다. 텐더민트 합의 엔진은 합의 후 블록이 만들어지므로 포크(Fork)가 발생하지 않는다. 텐더민트 합의 엔진 기반의 블록체인 사용자들은 블록 데이터 싱크가 필요 없는 라이트 클라이언트(Lite-client)를 경험할 수 있다.
목차
개요
텐더민트 스택의 설계는 애플리케이션 레이어(코스모스-SDK), 합의(consensus) 레이어, 네트워킹(Tendermint Core)로 구성된다. 텐더민트는 새로운 방식으로 P2P 가십(gossip) 프로토콜을 합의와 연결한다. 텐더민트 코어(Tendermint core)는 텐더민트라고 불리며 텐더민트 코어 및 코스모스 네트워크 소프트웨어 스택을 구현하는 조직과 동의어이다. 텐더민트 코어는 합의 알고리즘과 P2P 네트워킹 프로토콜 두 개의 프로토콜로 구성된 low-level 프로토콜이다. 텐더민트는 자체 블록체인 위에 애플리케이션을 구현하려는 개발자에게 도움을 준다. 미리 조립된 상태로 제공돼 개발자는 디앱존(DappZone)의 성능을 높일 수 있다. 텐더민트의 합의 및 네트워킹 레이어와 인터페이스 하기 위해 ABCI(Application Blockchain Interface)라 부르는 텐더민트 소켓 프로토콜을 사용한다. 텐더민트는 새로운 버전의 비잔틴 장애 허용(BFT) 지분증명(PoS) 합의 알고리즘을 제시한다. 이는 일반적으로 BF 기반의 지분증명(PoS)로 분류된다. 현재 코스모스는 텐더민트 블록 헤더의 크기를 3.2KB(검증인 노드가 100개 이하일 경우)에서 64byte로 줄일 수 있는 BLS 서명 연구를 진행 중이다.[1]
등장배경
2014년 코스모스의 재 권(Jae Kwon)은 비트코인의 작업증명(PoW) 합의 알고리즘이 지닌 속도, 확장성, 환경 등의 문제를 처리하고자 했다. 재 권은 무허가형 지분증명 기반의 보안 메커니즘에서 수백 개의 노드로 확장할 수 있는 비잔틴 장애 허용 기반 프로토콜을 구상하였다. 텐더민트는 지분증명을 광역네트워크상의 다수 검증 노드에 대한 주요 보안 메커니즘으로 설계한 시스템 모델을 무허가형 블록체인 환경에서 구현하기까지 약 4년이 걸렸다.
특징
라이트-클라이언트
텐더민트 합의 엔진 기반의 블록체인 사용자들은 블록체인에 저장된 모든 데이터를 전부 내려받지 않고, 가장 최근에 생성된 블록정보를 가져와 사용해도 안전하다. 블록 데이터의 싱크가 필요 없으며 이것은 라이트-클라이언트(Lite-client)라고 한다. 기존 블록체인은 사용자들이 안전하게 블록체인 기반 서비스를 사용하기 위해 블록체인에 저장된 모든 블록데이터를 다운 받아야 했으며 이를 이용하려는 사용자들은 불편을 감수해야 했다. 이런 비효율적인 시스템이 발생하는 큰 이유는 기존 블록체인이 ‘선-블록생성, 후-합의‘의 메커니즘을 가지고있기 때문이다. 하지만 텐더민트의 경우 기존 블록체인들과 반대로 ’선-합의, 후-블록생성’의 메커니즘을 가지고 있다. 블록을 생성하기 전 블록 생성에 참여하는 노드(node)가 먼저 합의를 하고, 합의가 완료된 뒤 블록을 생성해 네트워크에 전파한다. 이런 합의 메커니즘으로 포크가 발생하지 않는다. [2]
선-합의, 후-블록생성
텐더민트는 ‘선-합의, 후-블록생성’이라는 메커니즘을 가져 포크가 발생하지 않는다. 이 때문에 텐더민트 기반의 블록체인은 가장 최근에 생성된 블록에 기록된 정보를 가져와도 안전하다. 기존 블록체인은 시간이 지날수록 확률적으로 더 안전해지는 시스템 구조이다. 블록에 대한 신뢰도는 시간이 경과함에 따라 99.9% 혹은 99.99%로 증가할 뿐 100%에 도달하지는 못한다. 텐더민트의 경우 합의가 완료되지 않으면 블록이 생성되지 않기 때문에 생성된 블록은 무조선 100%로 신뢰할 수 있다. 가장 최근 생성된 블록의 신뢰도는 100%로 이를 기반으로 금융 인프라를 구축할 수 있다. [2]
프로토콜
텐더민트 코어는 합의알고리즘과 P2P네트워킹 프로토콜로 구성된 low-level 프로토콜이다.
합의 알고리즘
비트코인은 네트워크 전체의 노드가 10분 내에 서로 통신해 트랜잭션의 유효성을 검사하도록 한다. 이더리움은 평균 15초의 블록생성 시간을 가져 비트코인보다 네트워크 처리량이 더 많다. 하지만 이는 포크자들의 노력에 따른 것이며 트랜잭션이 네트워크 전체를 통신하는데 주어진 시간이 짧아 결과적으로 고아블록을 생성한다. 텐더민트는 부분 동시성 통신 하에서 합의하는 프로토콜이다. 부분 동시성 시스템은 동시성, 비동시성을 번갈아 나타낸다. 텐더민트는 비트코인의 10분, 이더리움의 15초의 시간처럼 설정되지만 진행속도는 시스템의 매개변수에 의존하지 않고 실제 네트워크 속도에 따라 결정된다.
비트코인은 블록생성 상한선 시간인 10분이 유지되지 않는 경우 합의 알고리즘이 깨지고 체인이 포크된다. 상한선은 10분으로 한 것은 안전성을 유지하기 위해 보수적으로 책정된 숫자이다. 텐더민트는 1/3이하의 프로세스 결함이 있는 경우, 비 동시성이 발생하더라도 절대로 포크하지 않는다. 다시 말해 2/3이상이 합의에 도달하기 전까지 일시적으로 포크를 중단한다. 이는 비잔틴 장애 허용 기반의 지분증명 프로토콜이 가능케 해준다.
- 리더 선출
텐더민트는 검증인 집합을 가중 라운드로빈(round-robin) 방식으로 번갈아 리더를 선출한다. 검증인은 투표권이 많을수록 더 많은 비중을 갖게 되고 이와 비례해 지도자로 선출될 가능성이 늘어난다. 알고리즘 작동 방식은 다음과 같다.
1. 검증인의 가중치가 설정되어 있다. 2. 검증인이 리더로 선출되고 새로운 블록을 제안한다. 3. 가중치가 다시 계산되고 라운드가 완료된 후 약간의 양이 감소한다. 4. 각 라운드가 진행됨에 따라 가증치는 투표권에 비례해 증가한다. 5. 검증인들 중 리더가 다시 선출된다.
리더가 누군지 예측할 수 있는 경우 공격자는 해당 리더를 대상으로 디도스(DDOS)공격을 감행해 잠재적으로 블록체인의 진행을 중단시킬 수 있는데 이런 공격에 텐더민트는 센트리 아키텍처(Sentry Architecture)을 구현해 대응한다.[1]
P2P네트워킹 프로토콜
제대로 된 검증인은 검증인 노드의 IP 주소를 노출, 타 노드와의 연결을 허용하지 않을 것이다. 실제 위치를 찾지 못하게 하려고 풀노드의 프록시(proxy)역할을 하는 센트리노드를 능동적으로 생성해 P2P단에서의 IP주소가 노출되지 않게 한다. 센트리 노트 아키텍처를 이용하는 것은 검증인의 선택사항이나 결함을 감내할 수 있는 풀노드를 유지, 관리하는 것은 검증인의 책임이다. 거의 모든 검증인들이 센트리 아키텍처를 이용하며 그렇지 않을 경우 해당 검증인은 검증인 집합에서 퇴장되고 스테이킹한 지분이 슬래싱(slashing)이 될 수 있기 때문이다.[1]
각주
- ↑ 1.0 1.1 1.2 COSMOS Korea, 〈텐더민트(Tendermint) 설명〉, 《Medium》, 2018-06-27
- ↑ 2.0 2.1 코스모스 코리아, 〈코스모스 블록체인 #3 — 텐더민트(Tendermint) (1)〉, 《네이버 블로그》, 2018-12-27
참고자료
- 코스모스 코리아, 〈코스모스 블록체인 #3 — 텐더민트(Tendermint) (1)〉, 《네이버 블로그》, 2018-12-27
- Tendermint Documentation, 〈What is Tendermint〉,《GitHub》
- COSMOS Korea, 〈텐더민트(Tendermint) 설명〉, 《Medium》, 2018-06-27
같이 보기
이 텐더민트 비잔틴 장애 허용 문서는 합의 알고리즘에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.