Cosmos

Cosmos

Cosmos가 무엇인가?

코스모스체인은 각각 독립적으로 존재하는 여러 블록체인들이 서로 통신할 수 있도록 네트워크로 연결해 마치 블록체인 인터넷(internet of blockchain)처럼 상호 연계되어 작동하도록 하는 역할을 한다.

-해시넷 위키

코스모스는 인터체인이다. 실제로 코스모스의 무료 교육과정에서는 다음과 같이 서술한다.

모든 블록체인 생태계가 계속해서 성장하고 성숙함에 따라 제품 스택과 용어가 진화합니다.따라서 Cosmos는 Interchain이라고도 합니다 ."Cosmos", "Cosmos Ecosystem" 및 "Interchain"이라는 용어는 서로 동의어이며 개발자가 사용할 수 있는 다양한 도구("스택")를 Interchain Stack 이라고 통칭할 수 있습니다 .

코스모스 SDK를 사용하면 앱체인, 애플리케이션별 블록체인을 생성할 수 있다.

스마트 컨트랙트를 이용해 탈중앙화 애플리케이션(Dapp)을 만들었다면, 스마트 컨트랙트에 정의되고 다루어지던 애플리케이션 수준의 문제들, 로직들이 프로토콜 수준에서 정의되는 것이다.

따라서 코스모스 블록체인에는 스마트 컨트랙트가 필요하지 않다.

따라서 개발자들은 높은 가스비와 여러 제약에서 벗어나 일반적인 Dapp에서 보다 훨씬 복잡한 트랜잭션도 이용할 수 있다.

또한 코스모스는 IBC(Inter-Blockchain Communication Protocol)를 통해 이더리움과 같은 공용 네트워크와 상호작용 할 수 있다.

분산 네트워크의 합의

블록체인을 얘기할 때 빼놓을 수 없는 것이 바로 컨센서스, 합의이다.

합의 알고리즘이 네트워크에서 통용되기 위해선 Safety와 Liveness라는 특성을 가지고 있어야 한다.

Safety의 의미는 ‘노드 간 합의가 발생했다면, 어느 노드가 접근하든 그 값은 동일해야 한다’ 와 같다.

블록체인의 finality와 동일한 개념으로 이해하면 된다.

Liveness는 “합의 대상에 문제가 없다면, 네트워크 내에서 반드시 합의가 이루어진다” 라는 의미이다.

Safety : 문제 없는 노드 사이에서는 잘못된 합의가 이루어지지 않는다.

Liveness : 문제 없는 노드들은 반드시 합의를 한다.

그런데, 비동기 네트워크 내에서는 Safety와 Liveness를 모두 완벽히 만족하는 합의 알고리즘을 설계하는 것이 불가능하다는 것이 증명되었다.

byzantine failure가 아닌 fail-stop-failure가 하나만 있어도 Safety와 Liveness를 동시에 만족하는 합의 알고리즘이 존재할 수 없다.

이 증명을 “FLP Impossibility”라고 한다.

비동기 네트워크에서는 합의 문제를 완벽히 해결할 수 있는 분산 알고리즘이 없다는 것을 증명했다.

비트코인이 제시한 합의 알고리즘은 ‘Nakamoto Consensus’라고도 불릴 만큼, 이전 컴퓨터 과학의 합의 알고리즘에서는 시도한 적 없던 방법이었다.

하지만 블록체인 기술이 나타나기 전에도 분산컴퓨팅 기술은 있었고, 분산 환경에서 쓰이는 합의 알고리즘이 있다.

네트워크 내에 배신자가 있더라도 합의 내용에 문제가 없으려면 어떻게 해야 하는가에 대한 비잔틴 장군 문제(Byzantine Generals Problem) 를 해결하는 방안으로 제시된 비잔틴 장애 허용과,

비잔틴 장군 문제가 발생할 수 있는 상황에서도 네트워크의 합의를 보장하는 PBFT(Practical Byzantine Fault Tolerance) 알고리즘을 알아보자.

비잔틴 장군 문제

비잔티움 장군 문제는 1982년 제시된 논리적 딜레마로 비잔티움의 장군들이 차후의 행동을 합의하려 할 때 발생할 수 있는 의사소통의 문제에 관한 것이다.

이 딜레마는 각 장군이 자신의 군대를 가지고 있고, 각 장군이 공격하려는 도시가 아닌 다른 장소에 있다고 가정하고 있다.

장군들은 공격하거나 후퇴하기 위해서 동의를 얻어야 한다.

모든 장군이 합의에 도달하는 한, 즉, 공격을 하든 후퇴를 하든, 이를 협력적으로 실천하기 위한 결정에 동의한다면 아무런 문제가 없다. 그러므로, 다음과 같은 내용을 간주해볼 수 있다:

  1. 각 장군(노드)들은 공격, 혹은 후퇴(동의 혹은 거부)를 결정한다

  2. 결정은 번복할 수 없다

  3. 모든 장군이 같은 결정을 해야 하며, 이를 동시에 시행해야 한다

비잔틴 장군의 문제는 어떤 이유에서든 메시지가 늦게 전달되거나, 훼손되거나, 소실될 수 있다는 사실이 관건이다.

게다가 메시지가 성공적으로 전달된다 하더라도 문제이다.

한 명 혹은 그 이상의 장군들이 어떤 이유에서든 악의적으로 행동하기로 선택할 수 있다.

혹은 다른 장군들을 혼란스럽게 하기 위해 가짜 메시지를 보내 총체적인 실패로 이어질 수도 있다.

이러한 딜레마를 블록체인에 적용해 본다면, 각 장군들은 하나의 노드가 되며, 노드들은 현 시스템 상태에 합의를 달성해야 하는 상황이 된다.

달리 말하자면, 분산화된 네트워크의 대다수의 참가자들은 완전한 실패를 막기 위해 동일한 행동을 하기로 결정하고 이를 실천해야 한다.

그러므로, 분산화된 시스템에서 이러한 합의를 달성할 수 있는 유일한 방법은 최소 ⅔ 혹은 그 이상의 신뢰할 수 있는 정직한 네트워크 노드를 확보하는 것이다.

이는 네트워크 참여자 대다수가 악의적으로 행동하기로 결정할 경우, 시스템이 실패하거나 공격당할 수 있음을 의미한다.

간단히 말해, 비잔티움 장애 허용은 비잔티움 장군 문제의 딜레마에서 파생되는 실패들을 막기 위한 시스템이다.

비잔티움 장애 허용 시스템은 일부 노드가 고장나거나 악의적으로 행동하더라도 계속 작동할 수 있다.

비잔티움 장군 문제를 해결하는 방법은 하나 이상일 수 있으며, 따라서 비잔티움 장애 허용 시스템을 구축하는 다양한 방식이 있다.

pBFT 및 텐더민트

Safety를 확보하고 Liveness를 일부 희생하면서, 비동기 네트워크에서도 합의를 이룰 수 있는 알고리즘이 바로 Practical Byzantine Fault Tolerance (PBFT)이다.

즉 네트워크에 배신자 노드가 어느 정도 있다고 해도 네트워크 내에서 이루어지는 합의의 신뢰를 보장하는 알고리즘이다.

현재까지 블록체인 합의 알고리즘 중 BFT 방식을 채택했다고 하는 경우 대부분 PBFT 합의 알고리즘을 바탕으로 조금씩 변형을 가했다고 볼 수 있다.

PBFT를 간단히 요약하자면, 비동기 네트워크에서 배신자 노드가 f개 있을 때, 총 노드 개수가 3f+1개 이상이면 해당 네트워크에서 이루어지는 합의는 신뢰할 수 있다는 것을 수학적으로 증명한 알고리즘이다.

네트워크의 모든 노드는 거래와 같은 합의 대상의 상태를 변화할 것인지 prepared certificate와 commit certificate라는 두 번의 절차를 거쳐 결정한다.

대부분의 합의 구현은 특정 블록체인 프로젝트와 밀접하게 결합되어 있지만 Tendermint 는 Tendermint Core라는 분산된 합의 메커니즘을 제공하여 블록체인 생성 프로세스를 단순화하는 데 중점을 둔 툴킷이다.

Tendermint의 분산형 합의 엔진은 자체 퍼블릭 블록체인을 실행한다.

이는 합의 프로토콜에서 이더리움과 다르다.

검증을 위해 자금을 바인딩해야 하는 검증인의 개념을 사용하고 특정 수의 라운드 동안 블록을 검증하는 것이다.

Cosmos SDK

초기에 Cosmos는 Tendermint 팀이 구축한 오픈 소스 커뮤니티 프로젝트였다.

그 이후로 ICF(Interchain Foundation) 는 네트워크 개발 및 출시를 지원했다.

ICF는 2017년에 Cosmos 네트워크를 기반으로 하는 오픈 소스 프로젝트 개발 자금을 조달하기 위해 자금을 조달한 스위스 비영리 단체이다.

Cosmos 는 다음과 같은 독립적인 블록체인 네트워크이다.

  • 모두 BFT(Byzantine Fault-Tolerance)가 있는 합의 알고리즘으로 구동된다.

  • 모두 IBC(Inter-Blockchain Communication Protocol)를 통해 연결되어 있어 가치 이전, 토큰 이전 및 체인 간 기타 통신을 가능하게 하며, 모두 교환을 포함하거나 각 체인의 주권과 관련하여 타협할 필요가 없다.

Cosmos가 등장하기 전에는 완전히 새로운 체인을 개발하는 것이 스마트 계약을 구축하는 것보다 훨씬 어렵고 비용이 많이 들었다.

그러나 이제 Cosmos SDK를 사용하면 완전히 유연하고 안전하며 고성능이며 자주적인 애플리케이션별 블록체인 을 개발할 수 있다.

Cosmos SDK는 Golang의 Tendermint BFT에서 안전한 블록체인 애플리케이션을 구축하기 위한 일반화된 프레임워크이다.

Cosmos Hub, Zone

코스모스의 상호운용성을 위한 기반은 IBC이다.

Cosmos implements a modular architecture with two blockchain classes: hubs and zones.

코스모스는 Hub와 Zone이라는 두 가지 클래스로 모듈식 아키텍쳐를 구현한다.

Zone은 계정 및 트랜잭션 인증, 토큰 생성 및 배포, 체인 변경 실행을 수행하는 이기종 블록체인이다.

허브는 소위 Zone을 연결하도록 설계된 블록체인이다.

Zone이 IBC 연결을 통해 허브에 연결되면 해당 허브에 연결된 다른 존에 자동으로 액세스 한다.

이 때, 토큰을 이중으로 사용할 위험 없이 존 끼리 데이터와 값을 주고받을 수 있다.

허브는 다른 존에 대한 많은 연결이 있는 존으로 이해하면 된다.

허브와 존은 매우 중요한 개념이다.

아래 사진을 보면 매우 많은 Zone들이 연결된 맵을 볼 수 있다.

코스모스 허브와 거의 모든 Zone들이 연결되어 있다. 그렇다면 나머지 체인들도 그럴까?

Stargaze zone은 상대적으로 적은 체인과 연결되어 있다.

즉, Cosmos SDK를 이용해 앱체인을 개발하고, 우리가 원하는 체인과 연결할 수도 있고, 마음만 먹으면 모든 체인과 연결할 수도 있다는 뜻이다.

또한 아래와 같은 그래프가 제공되는데 담겨있는 내용이 흥미롭다.

  • DAU, 24시간 이내 트랜잭션을 전송한 계정 수

  • Token Price, Osmosis 체인의 OSMO로 가격이 책정되어 있다.

  • IBC DAU, 24시간 내에 적어도 하나의 외부 IBC 전송을 한 계정 수

  • Peers, IBC 커넥터가 설정된 Zone 개수

  • Channels, 특정 Zone을 연결하는 채널 수

재밌는 점은 Token Price가 각 체인에서 정한 토큰으로 가격이 표기된다는 점이다.

내가 PRIM 토큰을 만든다면 가스비도 PRIM토큰으로 지불하게 될 것이다.

Cosmos Hub는 네이티브 토큰인 ATOM이 있는 PoS 블록체인이다.

Cosmos Hub는 연결된 체인 간의 트랜잭션을 용이하게 하는 라우터로 이해할 수 있는데, 예를 들어 Cosmos Hub는 Zone이 허브와 연결된 다른 Zone을 신뢰하는 한 거래 수수료를 다른 토큰으로 지불할 수 있다.

IBC 연결은 텐더민트 기반 체인에 국한되지도 않는다. 텐더민트가 아닌 다른 블록체인도 텐더민트가 아닌 합의 메커니즘과 작동하도록 IBC를 조정하여 연결을 설정할 수 있다.

그에 대한 예시로 Gravity Bridge가 있다.

Cosmos Hub에서 실행되도록 설계된 Cosmos-Ethereum 브릿지이다.

Gravity는 Ethereum에서 시작된 ERC20 자산을 Cosmos 기반 체인으로 전송하고 다시 Ethereum으로 전송할 수 있다.

Last updated