[인터체인 시리즈 I]코스모스 네트워크 I - 데이터 상호운용 방법과 텐더민트 합의 알고리듬
이더리움이 코스모스 네트워크를 플라즈마와 더불어 이더리움 체인의 확장성을 확대할 수 있는 솔루션으로 채택을 했습니다. 사실 비탈릭이 코스모스를 주목한 건 지금보다도 1년도 더 전인 2017년 완샹 블록체인 서밋 때였습니다. 이미 그 때 코스모스를 이더리움의 확장성 솔루션으로 채택을 했습니다(사실 코스모스 네트워크의 시장성은 이 부분에서 검증된 것이 아닌가 싶습니다. 이더리움은 블록체인 중에서도 유저 기반이 가장 탄탄한 블록체인 중 하나로 평가받습니다. 2017년~2018년은 이더리움 기반 ICO가 산업의 트렌드로 자리잡을 정도였죠. 그런 유저 기반이 탄탄한 블록체인의 확장성 솔루션으로 플라즈마와 함께 지목된 것이 코스모스였습니다.)
그런데 국내에서 코스모스가 주목을 받기 시작한건 작년 여름부터 였던 거 같습니다. 갑작스럽게 여기 저기에서 코스모스에 대한 이야기가 나왔던 것으로 기억합니다. 코스모스가 무엇이길래 사람들이 코스모스에 주목을 하는 것일까요? 사실 그 이유에 대해선 제가 개인 블로그에 인터체인에 대해서 이야기 할 때 서술했던 거 같습니다. 코스모스는 인터체인으로써 체인과 체인을 엮어주는 매개가 될 것이고 이를 통해서 독립적으로 운영되었던 블록체인들은 중앙화 되어있는 거래소를 거치지 않고도 토큰과 데이터를 이동할 수 있는 것 뿐만 아니라 인터체인 네트워크를 통해서 기존 체인들이 가지고 있었던 확장성의 문제까지 해결할 수 있다고 보기에 블록체인 산업에 새로운 파라다임을 열 것으로 생각하시는 분들이 많습니다.
뭐, 사실 이러한 인터체인 기술이 블록체인 산업을 어떤 방식으로 바꿔놓을지는 아무도 모릅니다. 뭐든지 까봐야 아는 것이라서, 아직까지 이렇다 저렇다 단정짓기는 어렵습니다. 하지만 제대로 작동만 한다면 단순히 토큰 뿐만이 아니라 체인상의 데이터도 체인 상호간에 전달하며 각각의 독립적인 체인의 장점을 극대화 시킬 수 있는 방법들이 생기게 될겁니다.
그럼 이제 코스모스 네트워크에 대해서 알아볼 차례겠네요.
코스모스에서 이루어지는 가치/데이터 이동.
코스모스에서 자산이나 데이터가 어떻게 이동되는지에 대해서 알아보기 이전에 알아둬야하는 단어들이 있습니다:
IBC(Inter blockchain Communication) 패킷: 코스모스 네트워크 상에서 블록체인간 토큰 이동을 할 때 통하는 매개라고 보는 것이 가장 정확합니다.
Zone: 오늘날 샤드로 더 잘 알려져있고. 코스모스에 Zone은 독립된 블록체인을 가르킨다. Zone에서 블록 커밋을 수시로 Hub으로 전송하고, Hub도 마찬가지로 업데이트를 수시로 Zone들에 전송한다. 여기서 블록 커밋을 증명하는 방법은 머클 증명(이 머클 증명은 SPV 클라이언트 노드의 방식처럼, 머클 경로를 풀 노드에게 받아서 증명하는 방법입니다, 더 자세한 설명은 디사이퍼의 허성욱님이 작성하신 블록체인 확장성 솔루션 시리즈 6–1 :: NiPoPoW (Non-Interactive Proofs of Proof-of-Work) — SPV와 SkipList를 참조하시면 좋을 거 같습니다)이란 증거를 포스팅 함으로써 데이터들의 패킷(IBC 패킷)을 전송합니다.
Peg Zone: 코스모스 네트워크로 독자적인 블록체인 기반의 토큰이 전송될 때 거치는 장소.
Cosmos Hub: 독자적인 블록체인 데이터들이 거쳐가는 일종의 센터라고 보면 됩니다. 중앙 원장이라고 보시면 됩니다.
데이터가 어떻게 허브를 거쳐 다른 존으로 전송이 되는지에 대해선 Zone에 대한 설명을 할 때 했는데요. 그렇다면 독자적인 블록체인 기반의 토큰들을 허브로 전송할 땐 어떻게 해야할까요?
예를 들어보겠습니다. 만약 제가 이더리움을 코스모스 네트워크에 보내려고 하면, 일단 이더리움을 페그 컨트랙트에 보내야 합니다. 그리고 이 페그 컨트랙트는 이더를 저에게 받았다는 IBC 패킷을 코스모스의 페그존에 전달합니다. 그러면 이제 이에 상응하는 가치의 토큰이 페그존에 생성이 됩니다. 그리고 그 페그존에서 코스모스 허브로 전달되어 그 가치가 다른 체인으로 전송이 됩니다.
이 때 페그 컨트랙트에 보내진 이더리움은 페그존에서 IBC 패킷을 수신하지 않으면 동결되어 있습니다. 즉, 코스모스 네트워크에서 원래 이더리움 네트워크로 이더를 보내려면:
페그존->IBC 패킷을 페그 컨트랙트에 전달->페그 컨트랙트에 있던 이더리움을 다시 원 주소로 전송. 하는 과정을 거쳐야 합니다. 페그 컨트랙트에 페그존에게 IBC 페킷을 수신하지 않으면 이더를 다시 가져올 수 없습니다.
이렇게 독자적인 체인에서 코스모스 네트워크로 토큰이 옮겨가는 방법을 Two Way Pegging(2WP) 이라고 하며, 이는 현재 인터체인이 아니라 사이드체인을 사용할 때에도 유용한 자산 동결 방식으로 사용되고 있습니다. 이러한 방식을 2 Way라고 하는 것은 코스모스 네트워크로 데이터를 보낼 수도, 다시 받을 수도 있기 때문입니다. 만약 One Way pegging 방식이었다면, 자산을 보낼 순 있어도 다시 돌려받을 수 없기 때문에 코스모스 네트워크는 2WP를 채택한듯 보입니다.
콘센서스 메커니즘
코스모스 네트워크가 한국계 미국인인 재권이라는 사람에 의해서 만들어졌다는 사실은 다들 아실텐데요. 재권은 텐더민트(Tendermint)라는 엔진을 개발한 사람이기도 합니다. 텐더민트는 코스모스 네트워크가 돌아가는 기반이라고 봐도 무방한데요. EOS나 스팀이 돌아가는 메커니즘인 dPOS(위임지분방식)에 비잔틴 장애허용을 합친 것이라고 하는데. 사실 EOS의 의사결정도 위임지분방식+비잔틴 장애허용의 개념을 합친 것이라 이 개념은 사실 그렇게 새로운 방식은 아니라고 봅니다. 노드의 2/3 이상이 승인하면 블록이 최종으로 확정되는 방식은 EOS에서도 많이 봤던 방식이죠.
그런데 다른 점이라고 한다면, 텐더민트의 PBFT(Practicla Byzantine Fault Tolerance) 합의 프로세스 입니다. 텐더민트는 제안, 프리보트(Pre-vote), 프리커밋(Pre-commit) 세가지의 합의 과정으로 이루어져 있고. 프리보트와 프리커밋 두 과정 모두에서 노드의 2/3이상의 승인이 필요합니다. 그래서 노드의 2/3의 합의를 하면 블록이 최종적으로 확정되는 방식입니다.
제가 코스모스를 공부하면서 재미있게 느꼈던 부분은 블록이 생성될 때 마다 전송이 완전히 완료되는 one block finality 부분입니다. 기존의 블록체인들은 블록을 만든 후 합의가 이루어져 포크가 발생할 수 있었지만, 텐더민트 합의에선 선 합의 후 블록 성생의 메커니즘을 가져 포크의 위험성을 줄였습니다. 이게 재미있는 이유는 체인의 적합성을 따질 때 굳이 모든 데이터를 가져올 필요없이 가장 최근에 생선된 블록의 정보를 가져와서 사용해도 큰 리스크가 없게된다는 점입니다.
그런데 한가지 궁금한 점은 만약 이게 좋은 점들만 있다면 왜 새로운 블록체인들은 선 합의 후 블록 생성의 메커니즘을 채택하지 않는지, 혹시 선 합의 후 블록 생성의 매커니즘이 가지는 취약점이 있는지에 대한 여부겠네요. 사실 극단적인 가정으로 노드들끼리 합의하지 않는다는 가정을 든다면 one block finality 부분은 약점으로 작용될 수 있으나, 코스모스 진영에선 이러한 경우가 최대한 생기지 않게 하기 위해서 PBFT합의 프로토콜을 사용하여 노드의 2/3이상의 승인만 허용하도록 한듯 보입니다.
오늘은 코스모스 네트워크가 어떻게 데이터를 상호운용하는지, 그리고 텐더민트 합의 알고리듬은 무엇인지에 대해서 알아보았습니다. 다음에는 코스모스의 고버넌스와 코스모스 네트워크에서 사용되는 아톰이라는 토큰과, 이코노미 구조에 대해서 알아볼까 합니다. 그럼 즐거운 하루 보내세요.
-Rothbardianism
참고문헌
-Cosmos White Paper
-블록체인 확장성 솔루션 시리즈 6–1 :: NiPoPoW (Non-Interactive Proofs of Proof-of-Work) — SPV와 SkipList
이 저작물은 크리에이티브 커먼즈 저작자표시-비영리-변경금지 4.0 국제 라이선스에 따라 이용할 수 있습니다.