brunch

You can make anything
by writing

C.S.Lewis

by Brian Cheong Feb 12. 2019

더욱 효율적이고 안전한 블록체인을 위한 컨센서스

우리는 어떻게 더 나은 Multi Tier BFT-DPoS를 만들고 있나

    처음 프로젝트를 시작하고 지금까지 우리 프로젝트의 백서는 여러 번의 수정을 거쳐왔다. 프로젝트가 지향하는 방향과 기술의 결합에 대해서 최대한 정갈하고 친절하게 써보려고 노력하지만, 방대한 내용을 농축된 백서 안에 담아내기는 쉽지 않다. 그래서 앞으로 백서의 한 부분씩 꺼내서 그것의 의미에 대해서 좀 더 풀어써보고자 한다. 


    이번엔 우리가 만들고 있는 TTC 블록체인 플랫폼을 형성하는 컨센서스(Consensus; 합의 기제)에 대해서 좀 더 자세히 이야기해보고자 한다. 사실 많은 고민과 함께 설계되고 개발된 컨센서스인데 반해 많은 사람에게는 상대적으로 덜 알려져 있는 부분이기도 하다. TTC 프로토콜의 마케팅 중 많은 부분이 소셜 네트워크와 같은 대형 DAPP들과의 연합 네트워크를 통한 생태계 형성에 집중되어 있다 보니 그런 것 같다. 



    단언컨대, 블록체인 프로젝트에 있어서 컨센서스는 매우 중요하다. 한 네트워크의 모든 참여자가 블록체인 플랫폼이 특정 집단에 의해서 왜곡되지 않을 것이라고 신뢰하는 것은 매우 중요하다. 그 신뢰의 기반 위에서만 소위 말하는 토큰 이코노미가 제대로 작동할 수 있기 때문이다. 구체적인 컨센서스 운영 방식을 공개하지 않고, 코인/토큰이 어떤 식으로 분배되는지 또한 명확하지 않다면 그 코인/토큰은 기존의 대형 인터넷 서비스 업체에서 자체적으로 운영하는 마일리지 포인트와 다른 점이 없다. 이는 장기적으로 커뮤니티를 형성하고 더욱더 많은 참여자를 이끄는데 큰 제약으로 다가올 것이다. 


    프로젝트의 초창기엔 이미 자리 잡고 있는 다양한 플랫폼(이더리움, EOS 등)에서 TTC Protocol를 구현하고 운영하는 것에 대하여 검토를 진행하였으나, 현존하고 있는 플랫폼들은 우리의 수요를 만족시켜줄 수 없다는 점, 플랫폼의 성장 가능성 등을 고려한 끝에 우리는 자체 플랫폼을 구축하기로 결론지었다. 수개월 동안의 검토와 토론 끝에 잘 알려져 있는 BFT-DPoS를 기반으로 우리는 Muiti Tier BFT-DPoS라는 자체 컨센서스를 설계하였고, 개발 및 테스팅까지 완료했다. 아래에는 우리가 지금의 결과물에 도달하게 된 고민의 과정을 공유하고자 한다.



위임 지분 증명(DPoS) 컨센서스를 통한 성능 확보


    PoW (작업 증명), PoS(지분 증명) 등 다양한 컨센서스 알고리즘을 검토했지만 마지막엔 DPoS(위임 지분 증명)를 기본 알고리즘으로 채택했다. 수백, 수천만의 사용자들을 가진 DAPP과의 연계를 위해선 블록체인의 높은 성능과 효율성이 중요했는데 그중 DPoS가 적절한 솔루션을 제공할 수 있다고 판단했다. 



    DPoS는 네트워크의 모든 노드 참여자들의 투표 결과로 선출한 상위 노드(블록 프로듀서)에게 권한을 위임하여 합의하도록 하는 방식으로, 일정 수의 블록 프로듀서들이 투표에 참여한 다른 홀더들의 권한을 위임받아 블록 생성을 담당한다. 투표를 통한 위임, 그리고 이를 기반으로 네트워크를 유지/운영이 이루어져 현실사회의 간접 민주주의와 비슷한 모습을 보이기도 한다. 


간접  민주주의

    지금까지 DPoS는 Bitshares, EOS 등 다양한 프로젝트에서 구현된 바 있으나, 프로젝트 진행 과정에서 다양한 문제점을 보여주고 있었다. 복잡한 인터페이스로 인한 일반 홀더들의 높은 진입/응용 장벽, 낮은 투표 참여 동기, 그로 인한 낮은 투표율, 투표 후 홀더들의 무관심으로 인한 투표의 낮은 유효성, 그로 인한 소수 블록 프로듀서들 간의 담합과 자원 배분의 비효율 등의 이슈는 지속적으로 발생하고 있었다.


    그래서 우리는 기존의 DPoS의 장점을 계승하되 여전히 가지고 있는 문제점을 개선한 더 나은 컨센서스를 만들기로 했고 지금은 의미 있는 개선을 이루어 냈다고 생각한다.



투표 보상(Voting Reward)을 통한 홀더들의 참여율 제고


    TTC 블록체인에서는 블록 생성 라운드에 참여하는 대표자들(Representatives)이라고 불리는 블록 프로듀서와 그 대표자들의 선발에 참여한 투표자들(Voters)이 모두 일정 비율(현재는 황금 비율인 61.8%와 38.2%로 분배)에 따라 블록 생성에 대한 보상을 받을 수 있다. 



    일반 홀더들은 투표라는 행위를 함으로써 그에 따른 투표 보상을 받을 수 있게 되어 투표율은 자연스럽게 올라가게 된다. 투표자들의 투표 행위는 투표 시점으로부터 7일(168시간) 동안에만 유효하기 때문에 홀더들은 투표가 무효처리되기 전에 계속 재투표를 진행해야 한다. 


    이 보상은 블록 생성이 완료될 때에 분배되는 채굴 보상의 일부분이기 때문에, 홀더가 투표한 대표자가 블록 생성에 실패하게 된다면 대표자는 물론 투표자 또한 보상을 받을 수 없게 된다. 그러므로 투표자는 자신이 투표한 대표자가 지속해서 블록을 잘 생성하고 있는지를 파악하며 더 나은 대표자에게 투표하여야 더 많은 보상을 얻을 수 있다. 


    그런 의미에서 이 투표 보상(Voting Reward)은 단순히 보유한다고 해서 분배받을 수 있는 배당(Dividend) 같은 수동적 소득(Passive income)과는 구분된다. (그러므로 TTC는 증권이 아니다 :p)



다층 구조(Multi Tier)를 통한 안전성과 효율성 제고


    TTC 블록체인의 대표자들은 득표수에 따라 순위(Rank)와 티어(Tier)가 정해진다. 그리고 50위 내에 속한 대표자는 속한 티어에 따라 다른 확률로 블록 생성에 참여할 수 있게 된다. 즉, 득표수 1위부터 10위는 Tier 1에 속해 블록 생성 라운드에 100%의 확률로 참여할 수 있고 21위부터 30위는 Tier 3에 속해 블록 생성 라운드에 40%의 확률로 참여할 수 있게 된다. 이런 식으로 매 라운드마다 Tier 1에서 10명, Tier 2에서 6명, Tier 3에서 4명, Tier 4에서 1명의 대표자가 선출되어 총 21명의 대표자가 블록 생성에 참여하게 된다.  

  

  이렇게 되면 순위가 상대적으로 낮은 20위권의 대표자들도 상대적으로 높은 확률로 블록 생성에 참여할 수 있게 되고, 더욱더 많은 보상을 받을 수 있게 된다. 결과적으로 더 많은 블록 프로듀서들이 적극적으로 블록 생성에 참여할 수 있게 되는 것이고 이 기제는 플랫폼을 더욱 안전하게 만들어 준다. 


    언뜻 낮은 티어/순위의 대표자들에 투표한 사람들은 높은 티어의 대표자들에 투표한 사람들에 비해 더 적은 보상을 받게 되는 것 같아 보이지만, 낮은 티어의 대표자들은 득표수가 더 적기 때문에 투표 보상 분배(1/N) 시 분모가 작아져 투표자의 보상은 적어지지 않는다. 예를 들면, Tier 1의 1위 대표자A의 득표수가 100표, Tier 3의 21위 대표자B의 득표수가 40표라면 한 번의 블록 생성을 통해 분배받을 수 있는 투표 참여자들의 단위 투표 보상량은 동일하다.     

               


    이와 같은 기제에서 파레토 효율(Pareto efficiency)은 1/N1 = 0.6/N2 = 0.4/N3 = 0.05/N4인 상황에 맞춰진다. 즉 이때 Tier 1의 100표 투표자와 Tier 3의 40표 투표자가 받는 단위 투표당 보상량은 동일해진다. (1/100 = 0.4/40) 


    물론 여기엔 모든 대표자의 블록 생성 성공률(보통 Productivity로 표현한다)이 동일하다는 전제가 필요하다. 앞서 언급한 것처럼, 투표 보상은 블록 생성 성공 시 발행되는 채굴 보상의 일부이기 때문이다.  하지만 현실에서 대표자들은 보통 다른 블록 생성 성공률을 보여준다. 어떤 대표자들은 낮은 하드웨어 스펙을 가지고 있거나 불안정한 네트워크를 사용하고 있거나 등의 문제로 인해서 블록 생성에 가끔 실패하게 된다.   그럴 경우에 실패한 대표자는 그 라운드에서 블록 생성에 대한 보상을 받을 수 없게 되는데 그렇게 되면 더 높은 티어의 대표자에게 투표한 홀더라도 더 낮은 티어의 대표자에게 투표한 홀더보다 더 적은 보상을 받게 될 수도 있다. 


    Tier 1의 1위 대표자A가 97%의 블록 생성 성공률을 가지고 있고 Tier 3의 21위 대표자B가 100%의 블록 생성 성공률을 가지고 있다면 1위 대표자A에게 투표한 홀더의 기대수익(0.97*1/N1)은 21위 대표자B에게 투표한 이의 보상(0.4/N3)보다 3% 적게 된다. (사실 블록 생성에 실패하면 페널티 기제에 의해 다음 라운드에서 블록 생성에 참여할 기회 또한 잃게 되므로 보상의 차이는 더욱 커진다) 이런 이유로 투표자들은 막연히 높은 순위에만 투표하는 것이 아니라 높은 블록 생성 성공률을 갖춘 우수 대표자에게 투표하게 된다. 


    이렇게 되면 기존 Tier 1의 1위 대표자A에게 투표했던 홀더들은 대표자B 혹은 다른 대표자에게로 표를 옮기게 되고, 대표자 A는 위임받은 표가 줄어들어 자연스럽게 낮은 순위로 내려가게 된다. 대표자 B는 더 많은 표를 획득하게 되어 자연스럽게 높은 순위로 올라가게 된다. 이와 같이 처음에 낮은 득표수를 얻은 대표자라 하더라도 안정적인 블록 생성률을 갖추고 있다면 쉽게 높은 순위로 올라갈 수 있게 된다. 투표자들이 모두 이성적으로 투표 보상을 추구한다면 비효율 상태가 빠르게 개선될 것이고 빠른 속도로 파레토 효율에 다다르게 될 것이다. (나는 개인에게 이루어지는 직접적인 보상이 발생할 때 사람들이 훨씬 더 이성적으로 행동한다고 믿고 있다.)


   

    결과적으로 투표자들에게 있어 대표자를 선택하는데 가장 중요해지는 건 “블록 생성을 안정적으로 할 수 있느냐?” 즉 “네트워크를 안정적으로 유지/운영할 수 있느냐?”가 된다. 블록 생성 성공률은 기술적 요소(네트워크 속도, 하드웨어 성능 등)가 영향을 끼치기 때문에 블록 프로듀서들은 기술적인 요소에 훨씬 더 신경을 쓸 수밖에 없어진다. 투표 보상은 지속적으로 이루어지기 때문에 대표자의 선발 과정이 끝난 뒤에도 대표자는 지속적으로 블록 생성률을 관리해야 한다. 이 과정을 통해 네트워크 상의 불량 노드는 자연스럽게 도태되고 우수한 노드 중심으로 순위가 세워진다. 이는 블록체인 시스템의 효율성 개선과 대표자와 투표자들의 보상 증대가 같은 방향을 가짐을 의미한다. 보상이 블록 생성의 우수성을 중심으로 이루어지기 때문에 그 외의 비이성적인 요소(블록 프로듀서들끼리 표를 몰아준다던가, 다른 블록 프로듀서가 낮은 블록 생성 성공률을 보이더라도 눈감아준다던가 하는 다양한 형태의 담합 등)를 기반으로 한 투표 행위는 높은 기회비용을 수반하게 된다.  



대표자들 간의 투표를 통한 컨센서스 개선과 대표자들의 대표성 개선


    일반적으로 한 블록체인에서 컨센서스의 수정 및 개선 등은 하드포크 등 서버 업데이트/업그레이드를 통해 이루어진다. 하지만 TTC 블록체인에서 대표자들은 ‘대표자들 간의 투표’를 통하여 대표자와 투표자 간의 보상 비율, 마스터 네트워크에 슬레이브 네트워크를 추가하거나 혹은 제거하거나 슬레이브 네트워크의 블록 생성 시간 등의 결정을 서버 업데이트를 통하지 않고도 즉시 수정할 수 있다. (물론 전체 투표수의 2/3 이상을 충족해야 한다)



    대표자는 대표자들을 대상으로 한 투표 안건을 상정할 수 있다. 그리고 대표자는 투표 안건에 대해 공개 투표를 진행하게 된다. 홀더들은 투표 페이지에서 각 대표자의 안건에 대한 투표 상황을 확인할 수 있다. 홀더들은 자기가 이미 투표한 대표자A가 자신이 원하는 것과 다른 방향으로 표를 던졌을 때 위임했던 표를 철회하고, 자신의 의견과 맞는 다른 대표자B에게로 즉시 자신의 표를 위임할 수 있다. 그렇게 되면 홀더가 지지를 철회한 대표자A가 대표하는 투표수는 줄어들게 되고, 홀더가 새로 지지한 대표자B가 대표하는 투표수는 늘어나게 되고 대표자들의 순위에도 변화가 생기게 될 수 있다.


    이는 마치 내가 뽑은 국회의원이 나의 의견과 반대되는 법률안에 찬성할 경우 바로 그 표를 회수해서 내가 원하는 바를 대표하는 다른 국회의원에게 표를 다시 주는 것과 같다. 현실 사회에서는 투표 비용 (각종 사회적, 경제적 비용) 때문에 유권자의 의견을 그때그때 표현하는 것이 불가능하지만. 이처럼 블록체인을 통하면 훨씬 더 효율적으로 간접 민주주의를 실현해 낼 수 있게 된다.



내가 바라는 미래


    이렇게 우리는 투표 보상(Voting Reward)을 갖춘 Multi Tier BFT-DPoS Consensus를 구현함으로써 1) 플랫폼에 대한 홀더들의 적극적인 참여와 감시가 이루어질 수 있고 2) 홀더들의 의견이 대표자들을 통해 더욱 잘 표현될 수 있으며 3) 결과적으로 더욱 탈중앙화 되고 개선된 자치 기능을 갖춘 블록체인을 구축해낼 수 있을 것으로 기대하고 있다. 거기에 더해 TTC 프로토콜의 Rewards Engine과 연계되는 다양한 DAPP을 통해 수백, 수천만의 실제 사용자들이 생태계에 들어올 때, 훨씬 더 큰 영향력을 보여줄 수 있을 것이라 생각한다.



    이번 포스팅에서 소개된 모든 내용은 이미 개발이 완료되어 Merapi Testnet v0.1.0으로 구동되어 론칭되어 있으며, 모바일 월렛인 TTC Connect를 통한 대표자 투표 그리고 그를 통한 보상 기능 또한 이미 구현되어 있다. 이 글을 보는 누구든 TTC Protocol의 공식 Github에서 TTC 블록체인의 소스코드를 볼 수 있고 실제로 구동해볼 수 있다. 애플 앱스토어 혹은 구글 플레이에서 TTC Connect를 다운로드하여 테스트넷에서 진행되고 있는 대표자 투표를 진행해보고 테스트 코인 보상도 받아 볼 수 있다. 


    나는 우리가 설계한 컨센서스가 완벽하거나 완전하다고 생각하지는 않는다. 하지만 기존에 존재하고 있는 많은 문제를 효과적으로 개선하고 우리가 꿈꾸는 미래를 현실화하는데 충분히 큰 역할을 해낼 것이라고 생각한다. 그리고 그 과정에서 컨센서스는 물론 프로토콜 내의 다양한 토큰 이코노미는 실제 운영 과정에서 많은 사람의 도움으로 더욱더 개선된 방향으로 자리 잡아갈 것이라고 믿는다. 관련해서 좋은 의견과 토론은 언제든지 환영한다.




    짜임새 있게 설계된 블록체인 생태계, 사용자 친화적인 UX 그리고 실제 사용자가 결합되었을 때 블록체인의 대중화는 훨씬 빠르게 다가올 수 있을 것이며, 진정한 의미에서 성공적인 프로젝트로 자리 잡을 수 있을 것이라 생각합니다. 그리고 그것은 TTC 프로토콜이 궁극적으로 바라는 최종 목표이기도 합니다. 


    본문에도 남겼지만 컨센서스와 생태계 전반의 토큰 이코노미에 대한 다양한 토론을 환영합니다. 제 개인 블로그에 글을 남겨주셔도 좋고 TTC Protocol의 텔레그램으로 찾아오셔도 좋습니다.


    한 블록체인 프로젝트가 성공을 하기 위해서 무엇을 어떻게 해야 할지에 대한 고민은 ‘나는 지금 무슨 게임을 하고 있나?'에 공유해두었습니다.


 

TTC Protocol 공식 홈페이지 : https://www.ttc.eco/

TTC Protocol 공식 Github : https://github.com/ttceco

TTC Protocol Merapi testnet : https://www.ttc.eco/#/testnet

작가의 이전글 나는 지금 무슨 게임을 하고 있나?
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari