왜 컨플럭스 블록체인 플랫폼을 주목하는가
왜 컨플럭스 블록체인 플랫폼을 주목하는가
  • 케빈 손 해시드 리서치 애널리스트
  • 승인 2018.12.11 17:22
  • 댓글 0
이 기사를 공유합니다

확장 가능한 나카모토 합의 가능성 제시
블록체인의 활용범위가 넓어짐에 따라 확장성 문제가 본격적으로 이슈화 됐다

2008년 사토시 나카모토의 논문 비트코인: P2P 전자화폐 시스템(Bitcoin: A Peer-to-Peer Electronic Cash System)이 세상에 소개된 지 약 10년의 세월이 흘렀다. 사토시의 P2P 전자 화폐 시스템은 비탈릭 부테린에 의해 P2P 컴퓨팅 시스템으로 확장되었고, 블록체인의 잠재적 활용 범위가 확대되며 확장성(scalability) 문제가 본격적으로 이슈화되기 시작했다. 

작업증명 기반의 확장성에 대해 문제를 제기한 아서 저베 교수
작업증명 기반의 확장성에 대해 문제를 제기한 아서 저베 교수

 

2016년 아서 저베(Arthur Gervais) 교수 외 5인이 발표한 논문 작업증명 기반 블록체인의 보안과 성능에 대하여(On the Security and Performance of Proof of Work Blockchains)에서는 작업증명(PoW) 기반 블록체인 확장성의 근본적인 한계가 지적되었다.

현재 이 문제에 대해 제시되고 있는 솔루션들은 대개 지분증명(PoS), 위임지분증명(DPoS) 등 대안적 알고리즘이거나 샤딩(Sharding)을 통한 온-체인 수평적 확장 방식, 혹은 플라즈마 사이드체인(Plasma Sidechain) 및 라이트닝 네트워크(Lightning Network) 등의 오프체인 방식을 사용하고 있다. 

물론 이러한 접근들은 매우 의미있는 시도이고 실제로 어느 정도 성과도 보여주고 있다.

그러나 대개 순수한 비트코인 프로토콜과는 근본적으로 다른 구조를 채택하고 있어 아직 충분한 검증을 거치지 못했고 따라서 상대적으로 네트워크 보안성 등이 검증되지 않았다는 문제가 있다.

이러한 접근들과 달리 컨플럭스(Conflux)는 제네시스 블록 이후 약 10년간 한 번도 실패하지 않은 비트코인 프로토콜의 원리(Nakamoto Consensus; 나카모토 합의)를 기반으로 더 발전된 알고리즘을 제시하여 확장성 문제를 해결하려 한다.

전통적인 작업증명 기반 나카모토 합의의 문제점
비트코인은 그 혁신성에 비해 놀라울 정도로 단순한 구조를 가지고 있는 반면 처리 성능 면에서 한계를 지니고 있다. 이를 개선하기 위해서는 블록 사이즈를 키우거나 생성 주기를 줄여야 한다.

하지만 앞에서 언급한 저베 교수 외 5인의 논문에 따르면 이러한 방법들은 네트워크의 보안을 희생시키기 때문에 근본적인 한계를 가진다. 

조금 더 구체적으로, 블록 생성 주기에 비해 블록 전파에 걸리는 시간이 지나치게 길어지면 고아 블록(stale block) 비율 증가, 이기적 채굴(selfish mining) 기대 수익 증가, 이중지불 공격(double-spending attack) 비용 감소, 블록 확정(finality) 시간 증가 등의 문제가 발생할 수 있다. 즉 비트코인은 구조적으로 확장성과 보안성이 양립하기 어렵다.

이런 구조 때문에 노드들의 컴퓨팅 자원은 네트워크 데이터 처리에 효율적으로 사용되지 못하고 대부분 네트워크 보안을 유지하는 데 소모된다. 더불어 채굴 보상의 확률적 분산이 매우 크고 규모의 경제가 존재하기 때문에, 노드들이 대형 채굴장을 중심으로 풀을 형성하는 형태로 점점 더 집중화되고 있다.

컨플럭스는 블록체인을 확장한 블록트리(block tree)와 DAG(Directed Acyclic Graph)를 활용해서 트랜잭션을 ‘자연스럽게’ 분산 처리하여 네트워크의 확장성과 보안성을 동시에 개선하는 한편, 규모의 경제를 완화하여 채굴 노드가 다양하게 분산될 수 있는 환경을 제공하고자 한다. 만약 잘 설계되었다면, 컨플럭스는 일반적인 샤딩 알고리즘에 필요한 온체인 랜덤 숫자 생성(RNG; Random Number Generation) 등의 복잡한 절차 없이도 자연스러운 지리적 샤딩(geological sharding)을 만들어 낼 수 있다.

컨플럭스 프로토콜의 원리
컨플럭스는 크게 세 개의 빌딩 블록(building block)으로 구성되어 있는데, 이해를 돕기 위해 각각을 순차적으로 쌓아 나가도록 하겠다. 첫 번째 빌딩 블록은 고스트 프로토콜(GHOST Protocol)이다. 가장 긴 체인을 메인 체인으로 삼는 비트코인과 달리 고스트 프로토콜에서는 가장 무거운 서브트리(heaviest subtree)를 따라가는 체인을 피봇 체인(pivot chain)이라고 부르고 이것을 메인 체인으로 삼는다.

 ‘가장 무거운 서브트리’와 ‘피봇 체인’의 개념을 도식화한 것. 빨간색이 일반적인 ‘가장 긴 체인’이고 파란색이 ‘피봇 체인’이다.

여기서 ‘무겁다’는 것은 자손이 더 많다는 의미이다. 예를 들어 위 오른쪽 그림의 A와 B처럼 형제 관계에 있는 블록 사이에서 A는 3개의 자손 블록을, B는 4개의 자손 블록을 가지므로 B가 A보다 더 무겁다. 고스트 프로토콜의 장점은 고아 블록도 네트워크의 보안에 기여할 수 있다는 점이다. 

‘가장 긴 체인 법칙’에 따라 A 블록에 있는 트랜잭션을 되돌리기 위해서는 A와 그 뒤에 이어지는 3개의 블록을 되돌려야 하는 반면 ‘가장 무거운 체인 법칙’에 따라 B 블록에 있는 트랜잭션을 되돌리기 위해서는 B와 그 뒤에 이어지는 4개의 블록을 되돌려야 한다. 즉, 기존에 이중 지불 공격을 하려면 한 개의 메인 체인 블록만 되돌리면 됐으나 고스트 프로토콜에서는 메인체인에 연결된 고아 블록들까지 모두 되돌려야 하므로 네트워크의 보안이 더 안전해지는 것.

컨플럭스의 두 번째 빌딩블록은 DAG+블록트리 구조이다. 컨플럭스에서 블록들의 관계는 일반적인 블록체인에서의 부모-자식 관계 외에 그보다 조금 더 느슨한 관계인 참조(reference) 관계가 있다.

X블록이 Y블록을 참조한다는 것의 의미는 (부모-자식 관계와는 달리) X블록이 Y블록의 유효성을 지지한다는 게 아니라 단순히 X블록이 Y블록을 ‘목격했다’는 의미다. 즉 Y블록이 X블록보다 먼저 생성됐음을 X블록이 인정해준다는 의미다. 제네시스 블록을 제외하면 각 블록은 부모로 단 하나의 블록만 지정할 수 있지만, 참조 블록은 동시에 여러 개를 지정할 수 있다.

컨플럭스 블록 DAG의 구조. 실선 화살표로 연결된 트리 구조에 점선 화살표의 DAG 구조가 합쳐져있다.

위 그림에서 실선으로 표시된 (A<-D), (Genesis<-B), (E<-H) 등은 부모-자식 관계이고 점선으로 표시된 (B<-C), (F<-E) 등은 참조 관계이다. 메인 체인의 역할인 피봇 체인을 결정하는 데는 부모-자식 관계만을 유효한 것으로 인정한다. 따라서 위 그래프에서 피봇 체인은 (Genesis<-A<-C<-E<-H)가 된다. 위 그림에서 확인할 수 있듯 컨플럭스에서 부모-자식 관계도는 트리 구조로 구성되어 있으며 참조관계를 포함하면 DAG 구조이다.

컨플럭스의 세 번째 빌딩블록은 낙관적 블록 처리(optimistic block processing)이다. 일반적으로 DAG 기반의 프로토콜들은 서로 직접적인 선후관계가 존재하지 않는 블록들(예를 들어 위 그림의 D와 J)에 대한 순서관계(ordering)를 정하지 않는다. 그러므로 그런 블록들 사이에 서로 상충되는 트랜잭션이 존재할 경우 둘 중 하나의 블록만을 참으로 인정하고 다른 블록은 버려진다.

이와는 달리 컨플럭스에서는 전체 블록들의 순서관계나 개별 트랜잭션 사이의 상충은 ‘일단’ 신경쓰지 않고 유효한 블록이 생성되기만 하면 포함시킨 뒤 일정한 프로토콜에 따라 나중에 전체 순서(global ordering)를 정한다.

컨플럭스에서 트랜잭션의 순서를 정하는 방법. 블록 B와 G에 서로 상충되는 트랜잭션인 Tx3과 Tx4가 담긴 상황을 나타낸다.

순서를 정하는 방법은 다음과 같다. 먼저, 피봇 체인 안에 있는 블록들 사이의 순서는 일반적인 블록체인에서와 같이 부모 블록이 자식 블록보다 우선한다. 다음으로, 피봇 체인 내의 각 블록들은 각각 하나의 에폭을 형성하고 자신이 해당 에폭의 가장 마지막 순서를 가지게 된다. 피봇 체인이 아닌 블록들은 자신을 직·간접적으로 참조하는 피봇 체인 내의 블록 중 가장 순서가 빠른 블록의 에폭에 포함된다. 

예를 들어 위 그림에서 D는 피봇 체인 내의 E에 의해 참조되므로 E의 에폭에 속하게 된다. 또한 J는 I의 부모이고 I는 H에 의해 참조되므로 J는 H의 에폭에 속한다. 이때, 하나의 에폭 안에 있는 블록들 사이의 순서는 만약 부모-자식 관계나 참조관계가 있으면 해당 관계를 따르고 순서가 없을 경우 블록 해시값을 비교하여 결정론적인(deterministic) 방법으로 순서를 정한다. 

예를들어 H의 에폭에 속한 J와 I는 J가 부모 블록이므로 J가 I에 우선하고, 마찬가지로 H의 에폭에 속하였지만 부모-자식 관계나 참조관계가 없는 G와 I는 블록 해시값을 비교해서 순서를 정한다.

마지막으로, 서로 다른 에폭에 속하는 블록들은 앞의 에폭에 속한 것을 우선한다. 예를 들어 위 그림에서 D는 E의 에폭에 속하고 J는 H의 에폭에 속하기 때문에 D가 J보다 우선한다. 이 규칙을 종합하여 위의 블록들에 순서를 매겨보면 (Genesis, A, B, C, F, D, E, J, I, G, H)가 되고(D와 F, G와 I사이의 순서는 임의로 정한 것) K는 아직 순서가 정해지지 않은 상태이다.

컨플럭스는 이처럼 블록을 일단 낙관적으로 포함시킨 후 그것이 피봇 체인에 포함되거나 특정 에폭에 포함되었을 때(즉 피봇 체인 내의 블록에 의해 직·간접적으로 참조되었을 때) 순서를 확정하고 장부의 상태를 업데이트하는 방식을 사용한다. 여기서 자연스럽게 드는 의문은 블록을 앞서 정한 순서에 따라 정렬했을 때 서로 상충되는 트랜잭션을 어떻게 처리하는가 하는 부분일 것이다. 

컨플럭스는 여기에 대해 아주 간단한 답을 제시한다. 단순히 나중에 발생한 트랜잭션을 무시해버린다. 예를 들어 위 그림에서 X의 계좌에는 10개의 코인밖에 없는데 Tx2와 Tx3는 이 계좌에서 각각 8개의 코인을 소비하려고 하므로 서로 상충되는 트랜잭션이다. 한편 Tx2가 속한 A가 Tx3이 속한 B보다 우선하므로 컨플럭스 프로토콜은 Tx3을 무시한다. 

비슷하게 Tx4는 B와 G에서 중복으로 처리되었는데 B가 G에 우선하므로 G에서 처리된 것은 무시한다. 여기서 무시되는 것은 개별 트랜잭션이지 블록 전체가 아니라는 것에 주목할 필요가 있다. Tx3이 무시되더라도 여전히 B에 속한 다른 트랜잭션들은 정상적으로 처리된다.

이런 구조이기 때문에 컨플럭스 체인에서 트랜잭션은 단지 블록에 포함되었다고 해서 처리된 것이 아니라 자신이 포함된 블록이 피봇 체인에 포함되거나 피봇 체인 내의 블록에 의해 직·간접적으로 참조된 후 규칙에 따라 정렬했을 때 유효하다는 것을 확인한 후에 처리된 결과를 확인할 수 있다. 

물론 가장 긴 체인 규칙에서 마지막 블록이 확정되는 데 일정한 시간(비트코인의 경우 약 1시간 정도)이 추가로 필요한 것처럼 피봇 체인도 그 체인이 진짜인지 확정하는 데까지 추가 시간이 필요한데, 컨플럭스 기술 논문에 따르면 비트코인 네트워크와 비슷한 조건으로 비교했을 때 약 6분 정도면 충분하다고 한다.

이중 지불 공격 시나리오

어떤 공격자가 Tx2를 이중 지불하기 위해 제네시스 블록을 부모로 지정한 AttackB라는 블록을 생성했다고 하자. AttackB가 비록 제네시스 블록의 직계 자손일지라도 컨플럭스의 프로토콜에 따르면 이것은 피봇 체인에 속하지도 않았고 아직 어떠한 에폭에도 속하지 않기 때문에 이 블록 안의 트랜잭션은 처리되지 않는다. 한편 앞서 고스트 프로토콜에서 설명한 것과 같이 피봇 체인을 바꾸는 것은 가장 긴 체인을 바꾸는 것보다 더 어려운 일이다.

합의 프로토콜에 따라 공격이 실패했다.

따라서 AttackB 내의 트랜잭션이 처리되는 유일한 방법은 이 블록이 피봇 체인에 속한 블록에 의해 참조되는 방법뿐인데, 그 블록은 분명히 A보다는 뒤에 있게 될 것이다. 따라서 공격자의 블록은 A의 에폭보다 순서가 늦은 에폭에 포함될 것이기 때문에 Tx2가 아니라 Tx2와 상충되는 AttackB의 트랜잭션이 무시될 것이다.

이러한 구조는 위 논문에서 지적한 작업증명 기반 블록체인의 한계의 전제를 파괴하게 된다. 반드시 피봇 체인에 포함되지 않더라도 일단 유효한 블록을 생성하기만 하면 사후적으로 반드시 처리되기 때문에 채굴자들은 자신들의 블록이 피봇 체인에 포함될지 여부를 알 필요가 거의 없다. 

따라서 블록 전파와 검증에 소요되는 시간을 충분히 고려해서 블록 사이즈와 블록 생성 주기를 적절히 제한해야 하는 비트코인 프로토콜과 달리 그러한 제약이 거의 없어진다. 따라서 컨플럭스에서는 현재의 비트코인보다 더 큰 블록을 훨씬 짧은 간격으로 생성할 수 있다.

블록이 피봇 체인에 포함되지 않아도 블록 생성에 대한 보상을 어느 정도 받을 수 있다는 특징 때문에 컨플럭스는 채굴 보상의 확률적 편차가 낮다. 예컨대 작은 컴퓨팅 파워로 비트코인 채굴을 시도하는 것은 마치 복권을 구매하는 것과 같이 아주 운 좋게 채굴에 성공하면 많은 수익을 얻을 수 있지만, 대부분의 경우 하나도 채굴하지 못하고 투자금만 낭비하게 된다.

이와 달리 컨플럭스는 작은 수익이라도 비교적 일정하게 얻을 수 있다. 따라서 채굴자들이 현재의 비트코인과 같이 중앙화된 채굴풀에 들어갈 유인이 줄어들고 해시파워를 훨씬 더 분산시킬 수 있다.

시뮬레이션 데이터
컨플럭스 기술 논문은 여러 가지 시뮬레이션 데이터를 제공하고 있다. 네트워크 대역폭 제한 20Mbps와 40Mbps에 대해 각각 실험하였으며 1만 개에서 최대 2만 개의 풀노드를 20개국 800개의 EC2 가상머신에 분산 배치하고 도시 간 지연(latency)까지 고려하였다고 한다. 비트코인 프로토콜 및 고스트 프로토콜과의 비교도 제시하고 있다.

비트코인, 고스트, 컨플럭스의 블록 크기와 주기에 따른 블록 사용성을 비교한 그래프(위)
비트코인, 고스트, 컨플럭스의 블록 크기와 주기에 따른 블록 컨펌 시간을 비교한 그래프(아래)

시뮬레이션 데이터에 따르면 컨플럭스는 대역폭을 20Mbps로 제한했을때 4MB 블록 사이즈 및 블록 생성 주기 5s의 조건에서 2.88G/h의 처리용량을 보인다. 비트코인과 고스트 프로토콜에서 블록 사이즈 및 주기에 따라 버려지는 블록의 비율이 유의미하게 영향을 받는 것과 달리 컨플럭스에서는 모든 조건에서 거의 100%에 가까운 블록 사용성(block utilization)을 자랑한다.

공격자가 20%의 해시파워를 보유한다고 가정하고 허용오차(risk tolerance)을 0.01%로 잡았을 때 위와 같은 조건에서 컨플럭스의 트랜잭션 컨펌 시간은 평균적으로 10분 정도로 나타났다. 비트코인의 경우 서론에서 언급한 것과 같이 짧은 블록 생성 주기와 큰 블록 사용은 매우 긴 컨펌 시간으로 이어진다.

컨플럭스에서도 공격자의 비율이 증가할수록 트랜잭션 컨펌 시간이 길어지기는 하지만 컨펌을 위해 기다리는 시간에 따라 트랜잭션이 되돌려질 위험도가 지수적으로 감소하는 모습을 볼 수 있다. 이것은 고스트 프로토콜의 구조를 통해 네트워크 해시파워가 네트워크 보안에 매우 효율적으로 사용되고 있기 때문이다. 추가로, 네트워크의 대역폭 제한을 40Mbps로 상향 조정할 경우 5.76Gb/h, 비트코인 기준 약 6400TPS의 처리용량을 보여주었다고 한다.

잠재적 이슈
싸고 맛있는 고급 레스토랑이 존재하지 않는 것처럼 얼핏 완전무결한 것처럼 보이는 컨플럭스에도 여러 가지 잠재적인 문제점이 숨어있다. 그중 가장 심각한 문제는 일종의 ‘Nothing at Stake’ 문제이다. 이는 PoS 합의에서 흔히 등장하는 것인데, 채굴자들이 어느 것이 정당한 체인인지 고민하지 않고 양쪽에 모두 투표를 할 때 생길 수 있는 네트워크 보안 문제이다. 

이와 비슷하게 컨플럭스는 굳이 내 블록이 피봇 체인에 포함되지 않더라도 보상을 받을 수 있기 때문에 노드들이 자신들의 블록을 피봇 체인의 말단에 연결하려는 시도조차 하지 않고 아무 데나 연결해버릴 수 있다는 잠재적인 문제가 있다. 이것은 해시파워가 피봇 체인에 집중되지 않고 여러 곳으로 분산될 수 있으며 위의 시뮬레이션에서 본 DAG와 같이 적당한 폭을 잘 유지하지 않고 DAG가 횡방향으로 발산해버릴 수 있다는 것을 의미한다. 

이렇게 되면 피봇 체인을 되돌리는 것이 가장 긴 체인을 되돌리는 것보다 어렵다는 기본적인 전제 자체가 무효화될 수 있어, 비교적 적은 컴퓨팅 파워로도 네트워크 공격에 성공할 수 있게 된다. 따라서 컨플럭스 DAG가 논문에서처럼 잘 돌아가려면 아주 잘 설계된 토큰 이코노미를 통해 채굴자들이 (설령 결과적으로 피봇 체인에 붙지 못하더라도) 채굴을 하는 순간만큼은 피봇 체인에 연결하려고 노력하도록 유도하여야 한다.

그다음으로 중요한 문제는 적절한 병렬처리이다. DAG 구조를 통해 여러 블록을 동시에 처리하여 처리 용량을 높였더라도 블록들 사이에 중복된 트랜잭션이 지나치게 많을 경우 확장성의 측면에 있어 의미가 크게 퇴색된다. 

블록 생성 주기가 매우 짧아서 새로운 트랜잭션이나 블록이 공유되는 데에 걸리는 시간의 비율이 크기 때문에 지역별로 자연스럽게 샤딩이 일어날 가능성이 높다고 추론해볼 수도 있고, (예를 들어 중국에서 발생한 트랜잭션은 중국에서 먼저 처리될 가능성이 높기 때문에 미국 채굴자는 미국에서 발생한 트랜잭션 위주로 처리할 수 있다) 혹은 해시파워가 커서 피봇 체인에 연결할 가능성이 높은 채굴자들이 수수료가 높은 트랜잭션들을 우선적으로 처리하려고 할 수 있으므로 해시 파워가 상대적으로 작은 채굴자들은 수수료가 낮은 트랜잭션을 우선적으로 처리하게 되어 수수료에 따른 분산처리가 일어날 수도 있다고 추론해볼 수도 있겠지만, 확실한 것은 아직 아무도 알 수 없다.

정리
컨플럭스는 블록체인의 확장성 문제에 대해 기존의 타 프로젝트들과는 완전히 다른 형태의 솔루션을 제시하고 있다. 일반적으로 알려진 샤딩과 같이 여러 트랜잭션을 병렬적으로 처리히여 수평적 확장을 제공하면서도 그것을 위한 별도의 온체인 절차를 요구하거나 네트워크의 보안을 희생하지 않으며 오히려 더 강화한다. 

또한 DAG를 기반으로 한 타 솔루션들이 블록 혹은 트랜잭션들의 위상적 순서(topological order)만을 제공하고 분산장부의 전체 상태(global state)를 확인하기 힘든 것과 달리 컨플럭스는 피봇 체인을 중심으로 항상 모든 블록의 절대적 순서와 분산장부의 전체 상태를 일반적인 나카모토 합의에서처럼 확률적으로 확인할 수 있다.

기술 논문에는 작업증명 알고리즘을 기준으로 기술하고 있지만, 지분증명이나 다른 알고리즘도 메커니즘 설계만 잘 한다면 충분히 적용될 수 있으며 샤딩과 같은 기존의 온체인 솔루션이나 플라즈마 사이드체인, 스테이트 채널 등의 오프체인 솔루션들과도 병용할 수 있는 구조이다. 또한 논문상에서는 합의 알고리즘 자체에 대해서만 집중하고 스마트 컨트랙트나 라이트 노드 등에 대해 구체적으로 언급하고 있지 않지만 이러한 기능들 역시 충분히 구현 가능할 것으로 보인다. 즉 컨플럭스는 기술적인 측면에서 범용적인 솔루션을 제공하고 있다고 할 수 있다.

다만 네트워크 참여자들이 프로토콜의 의도대로 바람직하게 행동하도록 유도하기 위한 토큰 이코노미가 핵심적으로 중요한데, 아직 그것에 대한 설계가 공개되어 있지 않아서 종합적인 판단을 내리는 데에는 한계가 있다고 볼 수 있다. 따라서 토큰 이코노미 백서가 공개될 때까지 당분간 관심을 가지고 지켜볼만한 프로젝트라고 생각한다.

컨플럭스 기술 논문의 제목은 <Scaling Nakamoto Consensus to Thousands of Transactions per Second>이며 원문은 https://arxiv.org/abs/1805.03870 에 공개되어 있다.

이 글은 블록체인 액셀러레이터 겸 크립토펀드인 해시드의 케빈 손 리서치 애널리스트가 회사 미디엄 블로그에 쓴 것으로 해시드 및 필자 동의 아래 더비체인 독자들에게도 제공하고 있습니다. 최근 3500만달러의 투자를 유치한 컨플럭스가 추구하는 방향 및 기술적인 특징에 대해 잘 설명한 글입니다.
 



댓글삭제
삭제한 댓글은 다시 복구할 수 없습니다.
그래도 삭제하시겠습니까?
댓글 0
댓글쓰기
계정을 선택하시면 로그인·계정인증을 통해
댓글을 남기실 수 있습니다.