devops

Cosmos Blockchain의 State machine, Tendermint, ABCI 본문

DevOps/Chain

Cosmos Blockchain의 State machine, Tendermint, ABCI

vata500 2023. 1. 10. 18:23
반응형

Cosmos 체인의 아키텍처를 이해하기 위해선 상태머신과 텐더민트 그리고 인터페이스인 ABCI를 알아야한다. 하나씩 짚어보자

https://medium.com/cosmos-korea/텐더민트-tendermint-설명-퍼블릭-블록체인-public-blockchain-세계에서-비잔틴-결험-감내-bft-기반-지분증명-pos-적용하기-d195944b984b

State Machine

블록체인은 'replicated deterministic state machine'이라고 부른다. 즉, 복제되는 결정론적인 상태머신이다. 상태머신은 컴퓨터 사이언스의 개념으로 머신이 다양한 상태를 가질 수 있으나, 특정 시점엔 하나의 상태만 가진다.

여기서 현재 시스템의 상태를 말하는 'state'와 상태를 변화시키는 트리거 역할을 하는 'transaction'이 있다.

+--------+                 +--------+
|        |                 |        |
|   S    +---------------->+   S'   |
|        |    apply(T)     |        |
+--------+                 +--------+

위를 보면 상태 S는 T라는 트랜잭션에 의해서 S'가 된다. 대체로 블록체인에서는 여러 트랜잭션들이 번들 형태로 블록에 포함되어 효율적인 과정을 거친다.

상태머신을 결정론적이라고도 하는데, 이는 만약 노드가 동일한 트랜잭션 순서를 재생하면 항상 동일한 상태로 끝난다는 것을 의미한다. 

Cosmos SDK는 개발자가 최대한 유연하게 그들의 어플리케이션과 트랜잭션 타입, 상태 transition fuction을 정의할 수 있도록 해준다. 

Tedermint

                ^  +-------------------------------+  ^
                |  |                               |  |   Built with Cosmos SDK
                |  |  State-machine = Application  |  |
                |  |                               |  v
                |  +-------------------------------+
                |  |                               |  ^
Blockchain node |  |           Consensus           |  |
                |  |                               |  |
                |  +-------------------------------+  |   Tendermint Core
                |  |                               |  |
                |  |           Networking          |  |
                |  |                               |  |
                v  +-------------------------------+  v

텐더민트는 Application-agnostic engine이다. 이는 블록체인의 consensus와 networking 레이어를 핸들링할 수 있게 해준다. 텐더민트 코어는 트랜잭션의 순서에 대한 합의를 위해서 BFT 알고리즘을 사용한다.

합의 알고리즘을 위해서 Validator라는 노드가 사용되며, Validator들은 블록체인 트랜잭션의 블록을 추가하는 역할을 한다. 하나의 Validator는 블록의 제안자로 선정되고 생성된 블록을 Validator들의 2/3 이상이 서명하는 경우에만 유효한 것으로 간주되어 블록이 추가된다.

ABCI

              +---------------------+
              |                     |
              |     Application     |
              |                     |
              +--------+---+--------+
                       ^   |
                       |   | ABCI
                       |   v
              +--------+---+--------+
              |                     |
              |                     |
              |     Tendermint      |
              |                     |
              |                     |
              +---------------------+

텐더민트는 ABCI라는 인터페이스를 통해서 트랜잭션을 어플리케이션에 전달한다.

텐더민트는 트랜잭션의 바이트만 다루는데, 이는 바이트가 의미하는 것이 무엇인지 알 수 없다는 것이다. ABCI를 통해서 바이트를 어플리케이션으로 전달하고 트랜잭션의 메시지가 성공적으로 처리되면 반환 코드를 받는다.

 

반응형
Comments