CS/3-2 블록체인

[블록체인] 13. Cosmos - Internet of Blockchains

이지이즤 2022. 12. 9. 02:09

 

Blockchain Revisited

블록체인은 validators/minors가 관리하는 distrubuted ledger임.
validators/minors가 각각의 컴퓨터에 copy of the ledger를 가지고 있음.
-> 각 컴퓨터가 가지고있는 ledger가 모두 일치하는가? 변화가 생기면 동시에 반영하는가?
=> 블록체인은 central authority에 의존하지 않고 장부를 공유할 수 있음!!!

블록체인의 3계층

- application
 : state 구성 요소, state의 transaction을 유발하는 요소(지향하는 것. ex 비트코안: payment, 이더리움: platform)에 대한 명시

- networking
 : 노드들이 transaction이나 consensus 관련 메세지를 실제 다른 노드에게 전달하는 부분을 담당.

- consensus
 : 분산 legder의 single state를 모든 노드들이 합의하도록 하기위해 각 노드들이 정보를 주고 받아야 함.
   (ex. 비트코인에서 miner들이 채굴할 block을 만들기 위해서 transaction을 주고받고 채굴에 성공하면 채굴 성공한 block을 주고받음.)

=> 개발자가 새롭게 블록체인 프로젝트를 시작하려고 할 때, Cosmos가 nerworking consensus 서비스를 제공하여 개발자에게 도움을 줌. 

모든 블록체인 프로젝트에 공통적으로 필요한 부분(초록색)을 Cosmos가 제공해줄테니까,
Applicaition 개발자는 본인이 하고싶은 특화된 것(파란색)에 집중하게 함.

 

Cosmos fits in blockchain 3.0


The Bitcoin (Blockchain 1.0)

- 비트코인 자체가 application
- 블록체인 상의 최초의 decentralized application
- payment를 위한 currency
- 중앙 기관에 의존하지 않고 검열도 받지않는 상황에서 자유롭게 payment 할 수 있는 시스템

* 2 options to develop decentralized applications
  ① 비트코인의 codebase를 fork해서 만들고싶은 기능 집어넣기
      -> 비트코인 codebase가 monolithic하게 얽혀있어서 어려움.(3계층이 서로 mix되어있음)
  ② 비트코인 codebase는 그대로 받아들이고 그 위에 내가 생각하는 코드를 집어넣기
      -> 융통성이 떨어짐. code base의 원하는 부분 수정 불가능..

 

The Ethereum (Blockchain 2.0)

- EVM 자체가 application
- application 계층에 virtual machine(EVM)을 집어넣어서 DApp을 개발자가 원하는 방식대로 만들도록 해줌.
- 개발자를 위한 platform 제공
- EVM에서 smart contract를 실행할 수 있기 때문에, DApp 개발자가 본인이 구현하고싶은 비지니스 로직을 smart contract형태로 구현.
- 개발자들이 smart contract를 통해서 DApp을 개발할 때, 이더리움 블록체인에 어떠한 허가도 받지 않는 방식으로 smart contract를 deploy할 수 있음.

* 이더리움의 한계
 ① Scalability (확장성)
    : 한정된 block에 내 transaction을 집어넣기 위한 경쟁이 치열함.
     단위시간당 처리할 수 있는 트랜잭션 수가 EVM 성능에 달려있음. 확정성이 떨어짐. 
     (비트코인에 비하면 이더리움의 트랜잭션 처리량이 훨씬 크긴 하지만 막강한 서버로 굉장히 빠르게 처리하는 것에는 못미침)

 ② Usability (가용성)
    : smart contract로 무엇을 할 지 예측할 수 없기 때문에 일반적으로 많이 사용되는 opcode를 EVM에 넣어놨음.

 ③ Sovereignty (자주성, 자율성)
    : 각자 하고싶은 일을 할 수 있는지가 ethereum platform에서 지원하는 지 여부에 따라 달라짐. 
      자율성이 별로 없고 의존적일 수 밖에 없음.

=> 이러한 제한들을 해소하는 방법중 하나로 제시된 것이 Cosmos!!!

 

The Cosmos (Blockchain 3.0*)

   2014~
- 블록체인 개발자들의 개발 load를 줄여주는 것이 주요 목적임.
  개발자의 블록체인을 쉽게 구축할 수 있도록 하고, 서로 거래할 수 있도록 블록체인 간의 장벽을 허물어주려 함.
- Internet of Blockchains(블록체인끼리 연결)을 만들고 decentralized한 방식으로 서로 의사소통 함.
- DApp 각각은 본인이 잘 할 수 있는 것에만 집중하여 특화하고, 필요한 경우 다른 블록체인의 기능을 쉽게 가져와서 쓰자.
  모든 걸 다 하는 큰 컴퓨터 대신에, 하나씩 잘하는 여러 컴퓨터를 서로 연결!
- tools : Tendermint(코스모스 프로젝트의 엔진), the Cosmos SDK(Software Development Kit; 개발 도구),
             IBC(Inter Blockchain Communication), ABCI(Application Block Chain Interface)

 


Tendermint and ABCI


Tendermint는 이더리움의 Casper FFG(consensus)에다가 network기능을 포함시킨 것임.
개발자들이 본인의 application logic에만 집중할 수 있도록 제공하는 generic engine임. 
(Tendermint가 cosmos 프로젝트의 핵심tool임.)

Tendermint 엔진은 ABCI라는 소켓 프로토콜을 통해서 application과 연결됨.
ABCI는 어떤 프로그래밍 언어로도 wrap될 수 있어서 개발자가 본인의 개발 목적에 맞는 언어를 적절히 선택 가능.

Tendermint engine의 특성

- public or private blockchain 어떤 것이든 상관없이 결합 가능 
 : validator 선정 기준(application layer가 정함)에 따라 개발하려는 block chain이 public인지 private인지 결정됨.
   *public ->  staking 하면 validator 자격 생김.
   *private -> 제한을 가지는 미리 선별된 그룹에서 validator가 선정됨.
   위의 결정 내용에 상관없이 Tendermint가 지원 가능.

- high performance
 : block fix time이 초당 1개씩 가능. 굉장히 빠른 transaction 처리 speed 제공(초당 수천 트랜잭션).

- instant finality
 : 내 transaction이 block에 포함이 돼서 block이 채굴되거나 propose된 순간에 확정이 됨.
   Safety and Liveness에서 Liveness보다 Safety가 우선됨.

  1/3 이상의 검증자가 정직할 경우 fork가 발생하지 않음. 그렇지않으면 frok가 발생할 수도 있음.
  fork가 발생하지 않으면, 무조건 instant하게 finality를 보장할 수 있음.(만들어진 블록이 무조건 canonical chain에 포함됨.)
  fork가 발생하면, fork가 발생한 block에 대해서 supermajority의 vote가 있기 전까지는 더이상 block을 생성하지
  못하도록 함. validator가 어쩔 수 없이 투표를 해야하므로 fork이후에 반드시 하나의 canonial chain이 만들어질
  수 밖에 없게 함. -> 내 transaction이 포함된 block이 propose 되는 순간에 확정이 된 것임.

- Security
 :  fault tolerant(≒ Safety)와 accountability(fork 발생 시 그 사람이 책임지게 함)를 보장함.

 

Cosmos SDK and other application layer frameworks


Cosmos SDK는 개발자가 Tendermint engine위에 돌아갈 application을 쉽게 개발할 수 있도록 도와주는 프레임워크임.

Cosmos SDK의 설계 원칙

- modularity
 : 미리 만들어놓은 모듈을 개발자가 자신의 포르젝트에 적절하게 도입함으로써 개발 쉽게 하도록 함.(≒ 라이브러리)
  개발자가 자신의 application에 맞게 customize할 수 있도록 새로운 모듈을 만드는 것도 가능함.

- Security
 : SDK를 통해서 개발하는 application과 Cosmos 프로젝트에서 기본으로 제공(ex. Tendermint engine)하는 것이
  완벽하게 분리됨. (application과 virtual machine mechanics 사이의 interaction에 대한 security는 걱정하지 않아도 됨) 

application 개발을 할 때, 이더리움의 virtual machine상에서 개발하는 것보다 Cosmos SDK를 이용해서
application-specific blockchain을 만드는 게 더 좋음.
-> Why?
  DApp을 만드는 상황을 가정해보자.
이더리움처럼 DApp 개발 지원하는 플랫폼 상에서 EVM에 맞춰 만들면, 필요한 기능을 제공하지 않거나 효율적으로 제공하지 않는 경우, 성능 등에 어려움이 생김.
내가 만들려는 application에 특화된 blockchain을 만들자! 그것을 만드는 데 도움을 주는 것이 Cosmos 프로젝트임.

당신의 DApp을 이더리움상에서 개발하지 말고, 그 자체가 blockchain인 것 처럼 개발하라! Cosmos가 도와줄게!!

 

 

IBC – Connecting Blockchains Together


Inter-Blockchain Communication Protocol ;블록체인을 연결하는 핵심 프로토콜.
Cosmos SDK가 지원하는 매우 중요한 기능 중 하나이며 Tendermint(즉각 finality 보장)에 의존함.

완벽하게 다른 종류(different applications and validator sets)두 체인(heterogeneous chains)연결 가능(interoperable)

IBC의 동작 방법

예제) chain A에서 chain B로 10개의 토큰 전송
- tracking : A는 B에 대해서 알아야하고 B는 A에 대해 알아야 함.
                 (각자 서로 상대방의 light client node가 되어야 함; full node가 될 필요는 없음)
- bonding : transfer가 시작되면 토큰이 chain A에 locked up 되어야 함. (double spend 방지)
- proof relay : A가 B에게 "내가 10개의 토큰을 붙잡아 놓았고 이제 너에게 넘길거임"을 서명과 함께 전달함.
- validation : B에서 검증이 성공적으로 통과되면 B에서 자체적으로 토큰 10개를 만들고 사용함.

문제점)
① A와 B가 사용하는 토큰이 다르다면? (공통적으로 합의한 토큰이 없다면?)
② A가 lock up하는 데 시간이 오래 걸린다면? (A는 즉각 finality보장 안해서 lock up되는 도중에 double spend 일어난다면?) 

 

 


Designing “The Internet of Blockchains”

 

 

How to create a network of blockchains?

연결시키고자하는 서로 다른 blockchain 프로젝트가 100개쯤 있다고 할 때
각각을 서로 연결하려면 전체 connection의 수는 100*99/2 임. 연결할 블록체인 수 늘어나면 scalability 감당 불가.
-> 확장성 문제 해결을 위해 네트워킹 장치를 두자!

Hubs

이더넷스위치, 라우터의 역할을 하는 블록체인.
Zone과 Zone을 연결해줌. 즉, 블록체인끼리 연결시켜주는 특별한 목적의 블록체인.

Cosmos network에서 처음으로 만든 hub는 Cosmos Hub임.
-> public PoS blockchain이며, 여기서 사용하는 staking token(currency)는 ATOM임.(다른 토큰도 사용 가능 할 예정임)

Zones

그 자체가 개별 블록체인.
각각이 서로 다른 성격을 가지는 heterogeneous한 블록체인.
모든 다른 컴퓨터와 1대1 연결 되는 게 아니라 hub를 통해서 연결됨. 극히 제한된 몇몇 hub와만 연결되면 됨.

 

Bridging non-Tendermint chains


Tendermint 성격이 다른 두 블록체인을 연결시킬 수 있을까? (비트코인과 이더리움 연결 매우 어려움)
: Cosmos는 어떤 종류의 블록체인이든 연결시킬 수 있다고 주장하고 있음. but 아래 이유들로 쉽지 않을 것임..

- fast-finality chains(이더리움) vs. probabilistic-finality chains(비트코인)
 : 비트코인이 6-confirmation을 받으면 final로 간주한다는 것은 전적으로 확률임. 뒤집힐 가능성이 zero는 아님.
   완벽하게 다른 두 종류의 chain을 붙이는 것은 결코 쉬운 일이 아님.

- fast-finality chains을 Cosmos에 IBC를 통해서 붙이는 것은 쉬움
 : 예를들어 Ethereum Casper FFG와
Cosmos Network 직접 연결 가능

- PoWCosmos에 연결시키는 것이 문제임
 : Cosmos의 핵심기술은 Tendermint이고 Tendermint는 Ethereum Casper FFG와 유사함.(즉각적인 finality PoS방식)
   전형적인 PoW 방식의 비트코인을 연결하는 것은 굉장히 어려움.
 -> PoW 체인 연결하기 위해 Peg-Zone 이라는 특별한 종류의 proxy-chain 사용
 
* Peg-Zone
 : 서로 다른 성질의 블록체인 연결해주는 특별한 종류의 블록체인.
  - 연결시켜주려는 블록체인의 상태를 항상 track하고 있음. 
  - 그 자체가 fast finality를 지원하며 IBC와 compatable함. (Tendermint의 영향을 받음)
  - bridge하는 blockchain의 finality를 담당함. (비트코인의 6-confirmation이 최소 60분 걸림. 이게 fast finality 체인 입장에서는 엄청난 제약임. 비트코인을 뜯어고칠 수는 없으니 절충하기 쉽지 않음.)

 

Example: “PoW Ethereum” Peg-Zone

- 과거의 이더리움(PoW)의 Peg-Zone을 만드는 방식
; PoW Ethereum Cosmos가 서로 token을 주고받을 수 있도록 해보자.

- finality를 위한 threshold값을 결정함 ex) 100블록이 추가되면 final하다고 여김
- 이더리움 블록체인 상에 contract가 만들어져야 함.
  ; 이더리움에서 코스모스로 토큰을 보낼 때, 이 smart contract에도 토큰을 보냄.
    contract에서 asset을 freeze 시키고 100block이 지나면 풀어줌.
    토큰을 받았다는 내용을 Peg-Zone으로 보내줌.
  ; 코스모스에서 이더리움으로 토큰을 보낼 때는, 즉각적인 finality가 보장되므로 
    Peg-Zone을 통해서 바로 보내면 됨.

Peg-Zone은 연결하려고 하는 각 chain마다 customized 되어야 함.
Ethereum이 account기반이고 smart contract를 가지고 있기 때문에 "PoW Ethereum" Peg-Zone을 만드는 것은 비교적 간단함.
(비트코인은 account 기반이 아니라서 잔액도 털어야해서 복잡하고 smart contract도 없어서 Peg-Zone만들기 어려움.)

 

 


Solving Scalability with Cosmos


Vertical scalability

- 블록체인 자체를 확장시키기.
- Cosmos 프로젝트는 application이 blockchain을 포함하는 개념임.(DApp 개발 == DApp이 동작할 블록체인까지 개발).
  DApp이 요구하는 블록체인의 특성을 고대로 따서 최적으로 동작할 수 있도록 blockchain consensus network를
  만들 수 있음. -> 성능이 높아짐.
  Tendermint는 초당 수천개 정도의 트랜잭션 처리 가능함.(신용/VISA카드는 초당 15000~20000)

- 성능 향상 대상(bottleneck)은 application 그 자체임.
  이더리움의 speed up이 어려운 이유는 EVM때문임. 이더리움 상에서 DApp을 개발한다는 것은 EVM 상에서 돌아가는
  smartcontract를 만든다는 것인데, EVM을 거치지 않고 바로 Core로 연결되는 것이 성능이 더 좋을 것임.
  -> application의 business logic바로 core에 embedd시키는 방식을 Cosmos가 지원해줌.(Tendermint와 SDK 이용)

 

Horizontal scalability (not yet … )

consensus engine이나 application 자체가 optimized 되었다 하더라도 vertical sacling에서 single chain이 가지는 한계가 있음. -> horizontal scalability 등장!

하나의 applicationmultiple chain에 parallel하게 돌리자. 
: multiple chain연결, multiple chain을 coordinate 해야함.
  validator set이 동일해야하고 validator라고 정하는 규칙도 서로 맞아야 함.

 

So in the end, what is Cosmos?

1. Cosmos는 DApp 개발자를 위한 프로젝트임
   블록체인을 powerful하게 해주고 DApp 개발을 쉽게 해줌.
   해당 app에 특화된 서비스를 제공함.(Tendermint, IBC, Cosmos SDK를 이용해서 제공.)
   성능 향상 시켜줌.  

2. PoW형태의 chain을 연결할 필요가 있을 때는 Peg-Zone을 이용.
    체인과 체인 사이의 연결을 위한 범용의 프로토콜로 IBC를 제공함.
    한 체인이 독자성/자주성을 가지면서 다른 체인과 자유롭게 소통할 수 있도록 함.

3. 모든 블록체인 프로젝트가 기본적으로 가지고있는 성능의 한계를 뛰어넘기 위해서
    horizontal and vertical scalability solutions를 제공 하려함.(아직 미완성)

서로 연결! -> DApp을 개발하려고 할 때, 다른 블록체인이 굉장히 잘하는 일이 있다면 그걸 내가 굳이 짤 필요 없이
그 블록체인과 연결하고 요청해서 도움을 받을 수 있음.
(각 블록체인의 장점을 살리고, 못하는 것은 다른 체인의 도움을 받을 수 있게 하는 플랫폼!)

각 체인의 독자성과 자주성을 인정하면서도 다른 체인과 스무스하게 연결될 수 있도록 함.