Tendermint 에 대해 알아보기

임동규·2022년 8월 3일
1

Cosmos InterCahin

목록 보기
1/1
post-thumbnail

블록체인 앱 아키텍처

텐더 민트는 무엇인가?

텐더민트 모듈은 블록체인의 중요한 구성 요소인 합의 및 네트워킹에 참여하는 모듈임. 이 모듈로 인해서 더이상 개발자들이 피어검색, 블록전파, 합의 및 트랙잭션 완료와 같은 저수준의 블록체인 문제를 넘어가지 않고 블록체인을 설계 가능해야함.

텐더민트가 없으면 개발자는 이러한 문제들을 해결하기 위해 로직을 구성해야하며 이는 애플리케이션 개발에 추가시간, 복잡성 및 비용을 추가하게 됨.

텐더민트 코어란?

합의 엔진으로 동일한 트랜잭션이 모든 시스템에 동일한 순서로 기록 되도록 함. ABCI 라는 응용프로그램 인터페이스를 사용하여 모든 프로그래밍 언어로 트랜잭션 처리가 가능.

ABCI 란?

Application BlockChain Interface 로 텐터민트 코어가 ABCI 를 충족하는 소켓 프로토콜을 통해 애플리케이션과 통신을 함.

코어에서 애플리케이션으로 전달되는 3가지 기본 메세지 유형으로 구성되는데

  • DeliverTx Message - 블록으로 만들어진 트랜잭션들은 이 메세지와 함께 전달이 됨.여기서 받은 트랜잭션들은 검증이 된 트랜잭션이라는 것임. 이 메시지를 받은 노드들은 트랜잭션을 통해 애플리케이션 상태를 업데이트함.(트랜잭션 유효성 메시지)
  • CheckTx Message - 트랜잭션 유효성 검사 전용 메시지임. 텐터민트 코어의 멤풀은 먼저 CheckTx로 트랜잭션의 유효성(충분한 수수료 등등) 을 확인하고 유효한 트랜잭션만 피어에게 중계함.(블록 제안을 실행하기 위한 합의 엔진 메시지)
  • Commit Message - 다음 블록 헤더에 배치할 현재 애플리케이션 상태에 대한 암호화 커밋을 검증하고 확인하는데 사용이 됨. (애플리케이션 상태 쿼리 하기 위한 메세지)

코스모스의 합의는?

TBFT 합의 프로토콜임. Dpos 방식으로 보팅파워가 강한 노드들이 모여서 교대로 거래 블록을 제안하고 투표하여 유효하다고 판단되면 블록을 전파하여 단일 상태를 유지하는 프로토콜임. TBFT 는 검증인의 3/1 미만이 비잔틴이라고 가정할 때 안전이 절대 침해되지 않을 것임을 보장한다고 한다.

블록은 각 높이에 하나의 블록이 있는 체인으로 커밋됨. 블록이 유효하지 않으면 제안자의 자산에 slashing을 하고 다음 라운드로 이동하여 같은 높이에 대한 블록을 제안하게 됨.

이때 블록을 성공적으로 커밋하려면 두 단계의 투표가 필요함.

검증인이 블록 커밋에 실패할 수 있는 경우

블록 제안자가 오프라인이거나 네트워크가 느림 이때 텐더민트는 검증인을 건너뛸 수 있음.

건너 뛰게 된다면 제안자 그룹이 제안자가 바뀐걸 어떻게 알까?

타임아웃이 될때까지 기다리고 만약에 2/3에게 서명을 받지 못할 경우 다음 제안자가 같은 높이의 블록을 생성하고 블록을 제안한다.

이때 원래 제안을 해야했던 노드는 자산을 패널티를 받게 된다.

그렇다면 다음 블록을 받기위해 기다리는 시간은 얼마나 될까? 이점이 궁금하다.(알게되면 수정하겠음)

간단한 로직

  1. Propose 단계
    • validator가 블럭을 만들고 전파
  2. Prevote 단계
    • 다른 validator 가 Listen 상태에서 블럭을 받아들일지 투표하기 위해 Prevote msg를 Broadcasting
  3. Precommit 단계
    • 2/3 이상의 Prevote msg 를 받았으면 Precommit 메시지를 Broadcasting 한다
    • Precommit 에 동의한 validator이 2/3 이상인 경우 블럭을 commit , 아닌경우 다음라운드 진행

핵심

이 그림의 핵심은 2/3이 투표해야지만이 다음 단계로 넘어간다는 것이다. 빨간색 육각형을 보면 Wait for Prevote from +2/3 / Wait for precommits from +2/3 으로 적혀있다.
텐더민트 코어의 핵심은 1/3 미만이 비잔틴일 경우 블록체인으로서 작동한다는 것이다. +2/3 은 2/3이상으로 1/3 이 다르게 투표하더라도 정상 작동하게끔 설계된 것이다.

즉 Tendermint core가 하는 역할은 Block 을 Validator 노드들이 검증하고 투표하고 +2/3 이 되는지 확인하고 되지 않는다면 새로운 리더를 선출해서 블록을 다시 생성하게 되는 것이다.

profile
I will be Blockchain Core Developer

0개의 댓글