[리서치 7주차] Tendermint
#Tendermint #Cosmos #이더리움연구회
작성일 : 2018.07.17
Research by ‘이더리움 연구회’
(이더리움 연구회 : www.etherstudy.net )
Tendermint는 기존 비트코인이 가지고 있는 PoW의 문제와 PoS가 가질 수 있는 ’Nothing at stake proble’에 대한 해결책으로 등장했다. Tendermint는 기존의 합의알고리즘이 아닌 BFT와 PoS를 결합한 방식을 사용하여 기존의 문제를 해결하고자 한다.
1. 개요
Tendermint는 Jae Kwon과 Ethan Buchman에 의해 설계가 되었다. 기존에 비트코인이나 이더리움이 가지고 있는 PoW의 문제를 해결하고 PoS가 가져야하는 다른 참여자를 신뢰해야하는 것에 대해 문제를 지적하고 있다. 또한, 참여자가 독립적인 블록체인이 가질 수 있는 ‘Nothing at stake problem’에 대해 지적한다. Tendermint는 Cosmos라는 블록체인에 핵심 합의 알고리즘으로 사용되고 있다.
2. 문제점
Tendermint는 기존의 블록체인들이 가지고 있는 합의알고리즘에 문제점을 제기하고 있다. 먼저, 비트코인의 경우 비잔티움장군의 문제를 들며 이중지불의 문제를 해결하고자 PoW방식을 제시했다. 이를 분산원장으로 공유하여 모든 사용자들이 알고 있으면 이 문제가 51%법칙을 가지지 않으면 해결될 수 있다고 백서에서 이야기하고 있다. 하지만 최근 PoW의 전기 비용 문제부터 실제로 51% 법칙이 발생할 수 있다고 이야기한다. PoS의 경우 참여자가 staking을 통해 합의가 이루어진다. 하지만 검증자를 신뢰해야하는 문제가 발생한다. 이때 발생하는 문제가 ‘Nothing at stake problem’ 즉 네트워크에 신뢰가 가지 않아 아무도 검증을 하지 않으면 블록체인이 돌아가지 않는 문제에 대해 이야기한다. 이를 보완한 DPoS의 경우 검증자는 정확하게 판단을 해야하는 위험이 따르게 된다. Tendermint는 이를 해결하고자 제시되었다.
Tendermint paper에 따르면 보안에서의 문제점 또한 제기하고 있다. 먼저, 이기적인 참여자에 의해 내쉬균형이 깨질 수 있다고 이야기한다. 또한, 이중 지불에서 검증을 하는 자들의 영향력(Power)을 문제점으로 제시하고 있다. 앞서 언급한 BitShares의 DPoS 방식에 대해서도 이중지불 등의 문제가 발생할 수 있다고 지적한다.
3. Tendermint Core
Tendermint는 앞선 문제점을 해결하기 위해서 두 가지 합의알고리즘을 사용한다. BFT 방식과 PoS 방식을 같이 사용한다. BFT 방식을 사용해 기존에 51%면 공격이 가능한 것을 2/3까지 공격을 당하여도 네트워크를 안전하게 사용할 수 있다고 이야기한다. 또한, 선별된 검증자들을 통해 서로 독립되어있는 블록체인들이 연결될 수 있다고 이야기한다.
Tendermint는 쉽게 사용하고, 쉽게 이용하며, 높은 성능을 보이고, 여러 어플리케이션을 사용할 수 있도록 만들고자 한다. 이를 위해 Tendermint는 Core 부분과 Application 부분에서의 역할을 서술하고 있다.
먼저 Tendermint의 Core에서의 역할은 다음과 같다.
-노드 간 블록 및 이체 공유
-정규(canomical)/변경배제(immutable) 이체순서의 확립(블록체인)
Application에서의 역할은 다음과 같다.
-UTXO 데이터베이스 유지
-이체의 암호서명 검증
-존재하지 않는 이체를 지불방지
-클라이언트들의 UTXO 데이터베이스에 대한 query 허용
Tendermint에서는 사용자를 위해 Application Blockchain Interface(ABCI)을 제공한다. Tendermint의 ABCI에서의 메시지 타입은 다음과 같다.
DeliverTx- 응용프로그램의 메시지이다. 블록체인의 각 트랜잭션은 메시지와 함께 전달이 된다. Application은 현재 상태, Application 프로토콜 및 트랜잭션의 암호화 자격 증명에 대해 DeliverTx메시지와 함께 받은 각 트랜잭션의 Validation을 검사한다. 이후 다음 Validation이 검사된 트랜잭션은 키 값 저장소에 값을 바인딩하거나 UTXO 데이터베이스를 업데이트하여 Application 상태를 업데이트 한다.
CheckTx- DeliverTx와 유사하지만 트랜잭션을 확인하는 데만 사용이 된다. Tendermint Core의 Mempool은 먼저 CheckTx를 사용하여 트랜잭션의 유효성을 검사하고 유효한 트랜잭션을 동료들에게만 릴레이한다.
Commit- 현재 응용 프로그램 상태에 대한 암호 확약을 계산하고 다음 블록 머리글에 배치하는 데 사용된다.
Valid한 트랜잭션은 위 그림처럼 블록으로 그룹화된다. 검증 및 트랜잭션 해시는 서명의 merkle tree root 해시이다. 이는 블록에 포함 된 거래 데이터 이다. 상태 해시는 헤더는 마찬가지로 영구 계정 상태의 Merkle root hash이다. (외부 블록 체인 트랜잭션을 적용한 후 마지막으로 블록 해시 유효성 검사 및 트랜잭션 해시를 해싱하여 계산된다. 블록 해시 자체는 Merkle root hash이므로 블록의 모든 구성 요소 계정 상태는 블록으로 연결되는 merkle hash 추적으로 확인할 수 있다 . 블록은 블록 내의 모든 트랜잭션이 유효하고 검증에 충분한 서명이 포함된다.
Tendermint의 프로토콜 참가자는 Validator라고 불린다. 그들은 거래의 블록을 propose하고 그들에게 투표하는 순서로 이루어진다. 블록은 체인에서 Commit되며 각 블록마다 하나의 블록이 있게 된다. 만일 블록이 Commit되지 않으면 프로토콜이 다음 가운드로 이동하고 새로운 Validator가 해당 높이의 블록을 제안하게 된다. 블록이 성공을 하려면 두 단계의 투표를 거치게 된다. 블록은 2/3이상의 Validator가 동일한 라운드에서 동일한 블록에 대해 사전 Commit을 할 때 Commit 된다.
Validator는 거래를 게시함으로써 합의 프로토콜에 참여하게 된다. 암호 서명 또는 투표를 다음 블록에 Broadcast한다. Validator는 자신이 가지고 있는 Coin과 동일하게 투표권을 가지고 있다. 이들은 Consensus에 참여할 때 자신들의 지분을 Stake하며 이를 bonding된 트랜잭션에 뒀다가 이에 참여를 안하게 될때는 unbonding된다. 이 때 unbonding된 Coin은 일정기간이 지나게 되야 사용할 수 있다(그 사이에는 묶여있다.).
Tendermint는 현재 Cosmos의 합의 알고리즘으로 사용되고 있다. Cosmos에서 어떻게 사용이 되는지는 다음 URL에서 확인 가능하다.
이더리움 연구회의 1,2기 정기 발표나 향후 업데이트 되는 3기 연구 자료는http://etherstudy.net을 통해서 확인 하실 수 있습니다.