Polkadot이란 무엇인가?
본 글은 폴카닷(Polkadot Network)의 백서와 그 외의 자료들을 참고하여 폴카닷에 대해 요약, 정리한 글입니다. 폴카닷 네트워크의 경우 여러 사전 지식들이 필요한 프로젝트입니다. 혹, 블록체인 세계에 처음 오신 분들께는 적합하지 않을 수 있습니다…! 백서가 상당히 길어 내용을 다 담지는 못합니다만 최대한 요약을 했습니다. 설명이 미흡한 부분이 있을 수 있으니 피드백 부탁드립니다. 개인적인 연락은 [email protected]으로 해주시면 감사하겠습니다! Crypto Research Seoul에 대해 관심 있으신 분들도 이쪽으로 연락주시면 감사하겠습니다.
(Whitepaper : https://github.com/polkadot-io/polkadot-white-paper/blob/master/PolkaDotPaper.pdf)
(Lightpaper : https://github.com/w3f/polkadot-light-paper/blob/master/Polkadot-lightpaper.pdf)
배경
폴카닷은 InterBlockchain으로, 블록체인 간의 원활한 연결을 목표로 하는 프로젝트입니다. 웹에서 www가 네트워크를 묶은 것처럼 폴카닷도 블록체인을 묶겠다는 의지를 표하고 있습니다. 폴카닷 프로젝트의 대표적인 개발자로 Gavin Wood가 있죠. 상당히 강력한 팀으로 꾸려진 오픈 소스 프로젝트입니다. 최근 Parity 지갑 문제로 자산 대다수가 동결되었지만, 프로젝트 진행에는 차질이 없다고 하네요. 폴카닷은 굉장히 흥미로운 프로젝트입니다. 기술적인 부분도 흥미롭지만, 특히 참여자들 간 ‘역할’들이 상당히 균형적인 구조를 이루고 있습니다. 타 블록체인 간의 연결을 이룬다는 점에서 카이버 네트워크와 같은 타 프로젝트들이 미래 폴카닷에 기대려는 모습도 보입니다.
폴카닷은 서두로 기존 블록체인 프로젝트들의 다섯 가지 문제점들을 제시했습니다.
- Scalability(확장성) : 비트코인과 이더리움이 처리할 수 있는 트랜잭션량과 속도가 상당히 제한적이다.
- Governance(거버넌스) : 기존의 거버넌스는 PoW와 PoS에만 집중되어 있다. 이 두 합의 방식은 보상 체계에 있어 불공정하게 지급된다. 또한, 네트워크가 유연하게 변하지 못한다.
- Isolability(격리성) : 블록체인들 간 교류가 쉽지 않다. 일례로, 비트코인으로 이더리움 dapp을 사용하기 위해서는 대부분 이더리움으로 바꿔 사용해야 한다.
- Developability(개발 가능성) : 체인들이 격리되어 있고, 확장도 잘 안 되기 때문에 여기서 제대로 개발하기에 한계가 있다.
- Applicability(적용 가능성) : 종합적으로 프로젝트들이 실제 사용하기에 많은 어려움이 있으며, 이론 단계에서 머무는 프로젝트들이 많다.
폴카닷은 위 문제점들을 해결하려는 움직임을 보이며 그중에서도 추구하는 핵심 요소는 세 가지입니다.
- Interoperability(상호 운용성)
- Scalability(확장성)
- Shared Security(보안 자원 공유)
즉, ‘확장이 쉽고 체인 간의 연결이 뛰어나며, 연결이 늘어날수록 보안이 좋아지는 체인을 만들겠다!’입니다. Scalable Heterogeneous multi-chain(확장 가능한 이종 멀티 체인)이라고 하네요.
이제 폴카닷이 어떻게 구성되고 있는지에 대해 알아보도록 합시다.
구조
위 그림은 폴카닷의 주요 구조물을 보여주는 그림입니다.
- Relay Chain(중계 체인) : 중앙에서 ‘관리’하는 역할을 합니다. 곁가지인 파라체인 사이의 Tx(트랜잭션) 이동, 시스템의 본질적인 합의 합니다.
- Parachain(파라체인) : 독립적으로 돌아가는 곁가지 체인입니다. 여기에서 거래가 수집되고 처리됩니다. 또한, 뒤에 언급되겠지만 각 파라체인은 자연스럽게 각자의 커뮤니티를 가지게 됩니다.
- Bridge(브릿지) : 파라체인의 한 종류입니다. 이더리움, 퀀텀과 같은 다른 기존 블록체인 간의 연결을 담당해서 특별히 취급됩니다.
폴카닷은 확장 가능한 이종 ‘멀티’ 체인입니다. 릴레이 체인을 중심으로 수많은 파라체인들이 독립적으로 돌아갑니다. 그만큼 많은 양의 거래를 처리할 수 있습니다. 즉, 확장성의 문제를 해결할 수 있습니다. 각 파라체인의 헤더는 릴레이 체인에 보관되어 있습니다. 이를 통해 조작, 이중지불을 방지하게 됩니다. Bitcoin의 사이드체인과 유사합니다.
폴카닷에서의 합의구조는 PoS에 기반을 둡니다.(모든 토큰은 새로이 발행되지 않음) 그러나 그 위에서 여러 가지 시스템이 섞여져 있습니다. (Tendermint, HoneyBadgerBFT 등에서 많이 참고했다고 함) 재미있게도 네 개의 직업군 간의 관계로 추가적인 합의를 끌어냈습니다. 이 네 개의 직업군들은 서로서로 견제하며 미묘한 합의를 이루어냅니다. 이제, 각 직업군에 대해 살펴봅시다.
직업군
Collators(수집가) : 파라체인, 정확히는 한 파라체인의 커뮤니티에 상주하고 있습니다. 즉, 동시에 여러 곳의 파라체인에 중복하여 상주할 수 없습니다. 수집가들은 파라체인으로 들어오려는 Tx들을 수집하여 블록을 생성합니다. 생성된 블록은 영지식 증명을 이용해 릴레이 체인에 넘겨져 검증된 후 파라체인에 연결됩니다. 연결되면 블록 내의 Tx 수수료들을 보상으로 받습니다. 하나의 파라체인 커뮤니티에는 여러 명의 수집가가 상주할 수 있으며, 보상을 위해 이들은 ‘경쟁적’으로 블록을 생성합니다.
Validators(검증자) : 릴레이 체인에 상주하고 있는 폴카닷의 핵심 직업군입니다. 네트워크에 일정량의 토큰을 스테이킹시켜서 검증자의 권한을 얻습니다. 이 검증자들은 다른 검증자들과 합의하여 체인을 실질적으로 연결하는 역할을 합니다. 파라체인 마다 랜덤하게 Validator Set이 배치되며, 또한 블록마다 set이 바뀝니다. 이들은 수집가들로부터 넘겨받은 블록을 검증하여 파라체인에 연결하는 역할도 하며, 파라체인들 사이에 Tx이 오가야 한다면 이들을 옮겨주는 역할도 합니다. 또한, 이들 파라체인들을 묶어주는 릴레이 체인을 만들어냅니다.
Validator는 체인을 연결하여 네트워크로부터 보상을 받습니다. 또한, PoS에 기반을 두어, 자신이 네트워크에 스테이킹한 토큰량에 비례하여 이자를 받습니다. 가장 하는 일이 많고, 그만큼 가장 많은 권한을 가지고 있으므로 가장 견제를 많이 받고, 처벌 또한 강력합니다. 정도에 따라 벌금 정도로 끝날 수도 있지만, 선을 넘을 경우 스테이킹된 모든 토큰을 잃습니다. 스테이킹된 토큰의 양이 어느 정도 밑으로 내려갈 경우, Validator 직위가 박탈됩니다. 또한, Validator의 역할 기간이 끝났다고 하더라도, 3개월 정도는 스테이킹시킨 토큰을 빼낼 수 없습니다. 이 기간에 악행이 드러날 경우 역시 처벌받습니다.Nominators(지명자) : 유권자의 개념입니다. 자신이 가진 토큰으로 Validator 혹은 Validator 후보을 ‘지명’하여 네트워크에 스테이킹시킵니다. 이렇게 하여, 스테이킹시킨 토큰 만큼의 이자를 받게 됩니다.
Fishermen(감시자) : 직역하면 어부, 네트워크에 반하는 행동을 하는 구성원을 낚아 올립니다. 그 행동을 네트워크에 보고하면 Fishermen은 보상을 받습니다. 예를 들어, 악의적인 Validator 낚아 고발하여 그의 토큰이 회수될 경우, 대부분은 소각되지만, 일부는 Fishermen의 보상으로 돌아갑니다.
아래는 네 직업군 간의 관계도입니다.
추가로 파라체인 풀에서 Collator 간의 경쟁이 심해질 경우, Validator에게 일정량의 Tx 수수료의 일정량을 제공하여 자신의 블록이 체결될 확률을 높일 수 있다고 하네요. :)
흐름
아래는 폴카닷의 구조를 한 번에 보여주는 그림입니다.
위 그림을 통해 실제로 데이터가 어떻게 흘러가는지 대략 살펴보겠습니다.
릴레이 체인 주위에는 이러한 파라체인이 존재합니다. 앞서 언급했듯이, 파라체인은 파라체인 커뮤니티(점선 박스)를 자연스레 가지게 되는데, 이곳에서 Collator와 Fisherman이 활동하게 됩니다. Collator는 외부의 Tx들을 수집하여 블록을 만든 후, 릴레이 체인에 상주하고 있는 Validator에게 보내게 됩니다. 이들 사에서 Fisherman이(J가 아니라 낚싯바늘입니다) 감시, 추가적인 검증을 하게 되죠.
Validator(역삼각형)은 후보 블록을 받아 검증 후, 블록을 파라체인에 추가하며, 파라체인간 메시지 이동을 수행하게 됩니다. 하얀 동그라미는 파라체인의 큐, I/O라고 하며, 메세지의 이동 통로 + 후보 블록 대기 장소 입니다. Validator가 이 동그라미들을 제어합니다.
왼쪽 그림과 같이 큐를 통해 Tx들이 계좌에서 나가고 다른 계좌로 들어갑니다.
인터체인 통신
이장에서부터는 조금 더 심화한 내용을 다루려 합니다. 먼저 파라체인간 통신이 어떻게 이루어지는지 살펴보겠습니다.
기본적으로 파라체인의 큐는 파라체인을 기준으로 입력 큐(input queue)와 출력 큐(output queue)로 나눠집니다. 출력 큐에서 나온 Tx은 Validator에 의해 다른 파라체인의 입력 큐로 옮겨집니다. 이때, 옮겨지는 과정은 파라체인에도 기록되며, 간접적으로 Validator에 의해 릴레이 체인에도 기록됩니다.
기록되는 과정은 이러합니다. 가령, A 파라체인에서 B 파라체인으로 메시지를 전달하는 경우에는, 1. A 파라체인에 기록됨과 동시에, 파라체인의 정보가 릴레이 체인의 n번째 블록에 기록됩니다. 2. Validator는 A 파라체인 출력 큐의 메시지를 B 파라체인 입력 큐 대기열에 등록시킵니다. (대기열이 꽉 찼을 경우 라우팅할 수 없습니다) 3. 대기열에 따라 B 파라체인에 메시지가 전달되면, B 파라체인에 기록되고, 이 B 파라체인은 릴레이 체인의 n+1번째 블록에 기록되게 됩니다.
이 과정에서 대기열의 데이터들은 위 그림과 같이 Merkle Tree의 구조로서 관리됩니다. 릴레이 체인의 경우, Ethereum과 유사하게 state 기록 형식일 것이라 하며, EVM 혹은 그와 비슷한 것을 사용할 것이라 합니다. 반면, 아주 단순한 기능만 구현하도록 하여 이더리움의 gas와 같은 수수료는 제외했습니다.
릴레이 체인 – 파라체인
릴레이 체인에 파라체인이 붙어 있는 구조 역시 흥미롭습니다. 릴레이 체인에는 그 릴레이 체인에 연결되어있는 파라체인들의 목록을 담고 있는 레지스트리가 존재합니다. 이 레지스리에는 각 파라체인의 상태 정보(입/출력 대기열 정보 등)가 포함됩니다. 또한, 이 레지스트리는 “하드 코딩”되어 있어, 파라체인의 추가/제거에 일정량의 작업을 요구합니다. 이 덕분에 무분별하게 파라체인을 추가할 수 없지만, 추가할 시에는 비용이 필요합니다. 물론, 추가에 대한 비용은 파라체인을 추가하려는 주체가 지불해야 합니다. 추가로 재미있는 점은, 릴레이 체인에 또 다른 릴레이 체인을 연결할 수 있습니다. 이를 통해 추가적인 확장성을 확보합니다.
릴레이 체인에 연결되는 파라체인은 세 종류로 구분합니다. 아래의 내용은 폴카닷 백서와 컨퍼런스(https://www.youtube.com/watch?v=483umOwF44E&t=533s)의 내용을 참고했습니다.
- Open Parachain : 일반적인 파라체인으로, 폴카닷의 메인 네트워크에 강력하게 묶여 있습니다. 즉, 합의를 폴카닷 네트워크에 전적으로 맡김을 의미합니다.
- Closed Parachain : 주로, private나 consortium 체인 대상으로, 오픈 파라체인과 다르게 약하게 연결되어 있습니다. 이 파라체인은 폴카닷 네트워크에 합의를 맡기지 않고, 내부의 권위자(authority)들이 합의합니다. 폴카닷 네트워크에서는 메시지 연결을 담당하며, 영지식 증명을 이용해 단순한 검증만을 하게 됩니다. 이는 Parity의 주요 기술인 PoA(Proof-of-Authority)를 따릅니다.
- Bridge : 파라체인의 종류이기도 하지만, 큰 구조라고도 볼 수 있는 브릿지는 기존에 존재하는 외부 블록체인과의 연결을 담당합니다. 이 역시 폴카닷 네트워크의 합의에 크게 의존하지 않습니다. 애초에, 외부 체인은 그들만의 합의와 생태계가 꾸려져 있기 때문에 폴카닷의 합의를 빌릴 필요가 없기 때문이기도 합니다.
여기서 언급된 폴카닷 네트워크의 릴레이 체인 합의는 Validator들이 구성하며, 아이디어는 Tendermint와 HoneyBadgerBFT에서 참고했습니다. 특히, Tendermint와 상당히 유사해 보입니다. 이 글에서는 Tendermint에 대해 다루지 못하는 점 양해 부탁드립니다.
합의
결과적으로 합의가 어떻게 이루어지는지 알아보겠습니다. 파라체인 합의와 릴레이 체인의 합의는 한 메커니즘 내에서 이루어집니다. 합의는 기본적으로 Validator간의 두 번의 투표로 이루어집니다. 각 Validator는 한 파라체인 블럭의 두 항목인 Availability와 Validity에 대해 투표해야 합니다.
- Availability : 해당 블록에 해당하는 파라체인의 출구 정보를 알고 있는지 투표합니다.
- Validity : 실질적으로 이 블록이 유효한 블록인지 아닌지에 대해 투표합니다.
Validator의 2/3 이상이 투표에 참여하고, 1/3 이상이 availability에 긍정적인 투표를 하면 이 블록은 릴레이 체인에 참조됩니다. 그 후 파라체인 블럭 대기열로 들어가 결과적으로 해당 파라체인에 합쳐지게 됩니다.
만약, Validity 투표에서 양쪽 모두 투표자가 있는 경우, 단순 사고가 일어났거나 악의적인 그룹이 존재한다고 여겨 세 번째 투표를 개시합니다. 이 세 번째 투표에서는 모든 Validator들이 참여해야 하며, 유무효성을 떠나 노드 간의 의견을 제시할 수도 있습니다. 이 투표에서 패소한 쪽이 승소한 쪽의 최소한 일정 비율 이상이면 포크가 일어났다고 판단하여 잠시 릴레이 체인 합의에서 제외됩니다. 만약 패소한 쪽의 비율이 일정 비율 아래면, 패소한 쪽을 악의적인 그룹으로 간주하여 처벌을 가합니다.
위의 내용이 기본적으로 그려진 합의 과정입니다. 그러나, 위와 같은 합의에서는 여러 추가적인 문제들이 생길 수 있습니다. 예를 들어, Validator에게 집중화되어 있는 문제, Validator Set에 문제가 생겼을 때의 파라체인 지연 문제, 더욱 근본적인 문제로는 Collator들이 전송하는 후보 블록 선정 과정들이 있습니다. 이를 해결하기 위해 폴카닷은 여러 가지 해결 방안을 제시했습니다. 외부인의 참여와 모니터링을 허용해주는 것, 랜덤함수를 이용한 후보블록 선정, Collator 보험 등등이 있습니다.
브릿지
그렇다면 다른 블록체인과의 연결을 담당하는 브릿지를 어떻게 그려내는지 살펴보겠습니다. 아래의 내용은 (https://blog.stephantual.com/title-12deb5d6eeed)를 참고했습니다.
- Polkadot <-> Ethereum-like
이더리움과 같이 스마트 컨트랙트가 구현이 되는 블록체인의 경우, 폴카닷과의 연결은 쉬울 것으로 예상합니다. Solidity의 ‘break-in’ 계약을 구현해 폴카닷에서 이더리움으로, ‘break-out’ 계약을 통해 반대의 경우를 이루어낼 계획입니다. 다만, bridge를 유지함에 있어, 이더리움의 경우 gas 비용이 540,000 gas/day 정도로 예상한다고 합니다. 이 비용적인 측면은 연결되는 블록체인에 크게 의존하고 있습니다. - Polkadot <-> Bitcoin-like
이더리움과 같은 체인들과 달리 Bitcoin의 경우 튜링 불완전성 때문에 스마트 컨트랙트의 구현이 현재로선 불가능합니다. 또한, 서명에도 제한점이 많습니다. 많은 참여자가 필요한 폴카닷과 달리 비트코인은 최대 3명의 서명만을 지원하는 multi-sig가 대부분입니다. 따라서, 비트코인과의 연결은 폴카닷 팀의 큰 과제로 남습니다. 추후, 비트코인의 하드포크를 통해 기능이 향상된다면 더 좋은 해결책이 보일 것으로 예상합니다.
코스모스와의 비교
폴카닷 프로젝트보다 코스모스 프로젝트가 먼저 설계되었습니다. 또한, 두 프로젝트는 서로 꽤 교류가 많은 Tendermint사와 Parity사에서 각각 진행되는 프로젝트입니다. 폴카닷의 백서에서도 나와 있듯, 먼저 진행 중이던 코스모스를 많이 참고했으므로 기본적인 합의 구조는 비슷할 것입니다. 또한 두 프로젝트 모두 인터블록체인으로 다른 블록체인들의 관심이 쏠리기 마련입니다. 그렇다면 둘은 경쟁 관계인가?라는 질문이 떠오릅니다. 필자는 그렇지 않다고 생각합니다.
코스모스 역시 인터블록체인 프로젝트로서 다른 블록체인간의 연결을 추구한다는 점에서 공통점이 있지만 두 프로젝트의 지향점은 약간 다릅니다. 코스모스의 경우 각 블록체인 생태계 내에서 사용되는 토큰, 코인간 가치 전달에 초점이 맞춰져 있지만 폴카닷의 경우 메시지의 전달, 즉 Smart Contract의 전달에 초점이 맞춰져 있습니다. 이는 두 프로젝트가 협력 관계로 간다면 더 좋은 시너지를 낼 수 있을 것을 의미합니다. 실제로 최근, 두 프로젝트가 협력한다는 얘기가 들리더군요. 폴카닷의 입장에서 생각하자면, 코스모스를 통하여 Bitcoin과의 연결을 꾀할 수도 있을 것이란 생각이 들었습니다. 적절한 비유일진 모르겠지만, 카르다노가 CCL과 CSL로 컴퓨팅과 가치전달을 나눠 놓은 것처럼 폴카닷과 코스모스가 서로의 역할을 분리해 거대한 생태계를 만들 수도 있을 것 같습니다.
마무리
뛰어난 개발진에, 논의도 꾸준히 되는 프로젝트입니다. 또한, 수많은 프로젝트들이 폴카닷을 믿고 로드맵을 진행한다고 해도 과언이 아닙니다. 그만큼 기대가 큰 프로젝트입니다. 그에 따른 불안감도 만만치 않습니다. 가장 큰 의문점은 정말 실현 가능한가?일 것입니다. 확단할 수는 없습니다만 앞서 말씀드렸듯 뛰어난 인재들이 포진된 프로젝트이기에, 또한 오픈소스 프로젝트의 특성상 좋은 의견들이 쉽게 반영될 수 있기에 긍정적이라 생각이 듭니다.
스마트 컨트랙트가 지원되지 않는 프로젝트들, 예를 들어 Bitcoin이나 IOTA와의 연결은 중요한 문제입니다. 전체 블록체인 생태계 내에서 큰 지분을 차지하는 이들과의 연결을 해결하지 못하면 블록체인의 인터넷을 이루어냈다고 볼 수 없습니다. 폴카닷 측도 이를 알기에 계속해서 좋은 방안들을 제시하는 것 같습니다. IOTA와의 연결에 있어 최근 Gavin Wood가 제안한 내용에 따르면, 폴카닷과 연결에 있어 맹점인 거래를 추적할 수 없는 IOTA의 문제를 머클트리를 이용한 전역적인 상태 분산화를 통해 해결할 수 있다고 합니다.
이런저런 의문점들이 제시됩니다만, 폴카닷은 블록체인 생태계 내외에서 꽤 재미있는 변화를 가져올 것이로 생각합니다. Closed Parachain을 이용하면 퍼블릭이 아닌 블록체인들과 연결됩니다. 그러므로, 현재의 많은 기업이 추구하는 방향과 조화될 수 있을 것입니다. 블록체인 프로젝트들의 큰 문제점 중 하나인 ‘실생활과의 연결’에 큰 공헌을 할 수 있으리라 예상됩니다.
잘보고갑니다 :)
감사합니다ㅎㅎ
ETH 가 아닌 쪽과 과연 연결이 될 수 있을지 기대반 걱정반 되는 프로젝트네요 ㅎㅎ
확실히 그런면이 있죠
저의 소견으로는 [ETH내부 -> 타 인터체인, 플랫폼 -> 기타 등등 크로스체인]순으로 갈 듯 싶습니다
이 중에서 저는 다른 플랫폼(ex. Qtum, Neo, Cardano)들과 어떻게 호환을 할 것인지가 제일 궁금합니다
다른 플랫폼의 Smart Contract 사이에서 메시지를 주고 받는다는데 실제 데이터 흐름이 어떻게 되는지 알고싶네요:)
군대닷 이라는 별명을 가진 폴카닷이네요.
저번에 해킹 당해서 이더를 날린 슬픈 역사를 가지고 있기도 하고요...
정리 감사합니다.
군대닷ㅋㅋㅋ 적절하네요
개발에는 차질이 없다고는 하지만 걱정이 되긴 합니다...
하루 빨리 전역했으면 하네요
이런 프로젝트를 설계하고 실행에 옮긴다는게 참 대단합니다. 대단한 포스팅 잘 보고 갑니다.