Conflux 연구 총감독 양광: PoW와 PoS의 전반적인 비교

2019.11.26

컨센서스 메커니즘에 대한 논란은 이미 많이 있었지만, 이러한 분석은 대부분 불완전하다. 碳链价值(Carbon Chain)이 주최하는 오프라인 살롱 1기 행사에서 Conflux 연구 감독인 양광 박사는 1만3000여 자를 사용해 POW와 POS 컨센서스 메커니즘의 원리, 운행 시 부닥친 문제점, 양자의 우열을 전반적으로 분석했다. 이 글은 즐겨찾기 모음에 추가하고, 반복적으로 보기를 권할 만큼 유익한 글이다.

강연자: Conflux 연구 총감독 양광

문자 정리 및 교정: Cinderella, 당한

이 분야에서의 나의 연구와 견해들을 함께 나눌 기회를 갖게 되어 매우 기쁘다. ​ 먼저 우리 Conflux 팀을 간단히 소개하겠다. 우리 팀의 핵심은 야오반의 몇몇 급우와 후배, 그리고 다행히도 야오치즈 선생님께서 우리 수석과학자와 고문을 맡아 주셨다. 우리가 블록체인이라는 업계에 뛰어든 이유는 이 업계에는 매우 중요하고 의미 있는 새로운 문제들이 많이 있기 때문이다. 내가 가장 잘 알고 있는 암호학과 게임론의 경우, 블록체인이 직면하고 있는 것과 해결해야 할 많은 문제들은 이미 학술계의 최일선에 있는 연구 방향이다. 이런 문제는 엔지니어만으로 해결할 수 있는 것이 아니라, 학계의 역량을 더 많이 모아, 모두가 함께 협력해야 전체 블록체인 업계가 앞으로 더 잘 나아갈 수 있다고 생각한다.

01 빌 공격과 블록체인 컨센서스 협의

오늘 나는 PoW와 PoS를 비교해보겠다. 가장 대표적인 블록체인 컨센서스 협약을 먼저 돌아보자: 여러분은 거래를 블록으로 패키지화하고, 해시 인용을 통해 블록을 하나의 체인으로 연결함으로써 하나의 공유된 장부를 얻을 수 있다. 하지만 장부 하나를 이렇게 직접 쓰는 것은 분명 안전하지 않을 것이다. 왜냐하면 나쁜 사람도 장부 하나를 만들 수 있고, 그 장부 두 개를 동시에 당신 앞에 둘 수 있고, 어떤 것이 진짜인지 어떤 것이 가짜인지, 우리가 어떤 것을 믿어야 하는지가 문제가 되기 때문이다.

img

중심화된 것이라면, 물론 이 문제는 해결하기 아주 쉬울 것이다. 내가 알리페이를 사용하는데, 알리페이가 내 계좌에 얼마가 있다고 알려준다면, 그 말을 믿을 것이다. 만약 사실과 일치하지 않는다면, 나는 법원에 가서 그를 고소할 수 있는 다른 의견이 있다. 그러나 탈중심화 됐다면, 이 일은 말하기 어렵다. 탈중심화가 되었을 때, 여러분이 이렇게 다른 사람의 말 한마디를 듣고 결정하지 않고, 다른 방식으로 컨센서스를 형성해야 공정한 장부를 만들 수 있습니다. 그렇다면 탈중심화 된 환경으로 가려면 어떻게 공감대를 형성해야 할까? 쉽게 생각할 수 있는 한 가지 방법은 우리가 투표하고, 모두가 함께 투표하고, 장부 하나를 가져온 후, 모두가 이것을 믿으면 된다.

그러나 기왕 투표라고 말한 이상, 우선 투표권은 어떻게 배분되어야 하는가 라는 투표의 공평성 문제가 있다. 예를 들면 오늘 우리가 다 같이 투표를 진행하는데, 내 손에 백 표가 있고, 앉아 있는 사람들 한 명당 한 표씩 가지고 있다면, 우린 이것을 투표라고 하지 않는다. 내가 백 표가 있는데 기본적으로 내가 투표하고 싶은 곳에 투표한다면, 결과는 나의 선택이 될 것이다. 우리가 정말 하나의 컨센서스를 이루려고 한다면, 이런 불공평한 방식으로 투표할 수는 없을 것이다. 따라서 투표권 배분은 합의안의 가장 핵심적이고 중요한 부분 중 하나다. 오프라인에서의 투표권 배분 문제는 쉽게 해결할 수 있다. 우리는 간단히 1인 1표로 배분하면 된다. 다들 신분증을 가지고 있고, 그 다음에 투표할 때 등록하면 된다. 하지만 온라인상에서는 1인 1표를 지키기가 매우 어렵다.

img

우선, 당신이 온라인상의 환경에서, 특히 탈 중심화 된 환경에서, "무엇을 한 사람이라고 하는가"를 어떻게 정의할 것인가 하는 것이 큰 문제이다. 당신은 한 계좌를 한 사람으로 할 것인가, 아니면 한 IP를 한 사람으로 할 것인가, 아니면 당신이 다른 어떤 방법으로 확인할 것인가? 인터넷에서는 모두 익명으로 존재하고, 당신은 채팅할 때 인터넷 너머에서 당신과 이야기하는 것이 과연 발을 깎는 사내인지 개인지조차 판단할 수 없다. 그래서 우리에게는 시빌 공격에 대항하는 메커니즘이 필요하다. ​ 우선 시빌 공격이 무엇인지 간단히 이야기하겠다. 그것은 공격자가 많은 계정을 저비용으로 만들 수 있고, 그 계정들을 함께 움직이도록 통제하여, 사람들이 많은 것처럼 보이게 한다는 것이다. 예컨대 댓글 알바가 여론을 선도하고, 영화 채점 사이트도 누군가가 사람을 모아서 그 위에 특별한 논평을 하러 간다. 만약 이런 댓글 알바의 다중 계정이 공격하고 있다면, 당신이 마지막 투표로 얻은 결과는 진실이 아니다. 누군가가 이런 식으로 엄청나게 많은 표를 던질 수도 있고, 마지막 투표 결과는 이 개인에 의해 완전히 통제된 것이다. 전통적인 인터넷 환경에서, 우리는 시빌 공격에 대항하는 방식이 많은데, 예를 들어 계좌당 등록비용을 증가시키는 것과 같다. 인터넷상에서 계정을 등록할 때는 항상 하나의 인증번호를 입력해야 하는데, 이 일은 컴퓨터를 사용해서 처리하기엔 너무 번거롭고, 프로그램을 써서 할 수 있지만, 이것 역시 어렵다. 하지만, 사람이 하면 간단하다. 몇몇의 사이트에서는 회원가입 시, 휴대전화 번호를 필요로 하거나, IP주소를 확인하는데, 이러한 방법들이 모두 시빌 공격에 대항하는 방식이다. 하지만 탈중심화된 환경에서, 그러한 방식은 사용하기 적당하지 않다. 왜냐하면, 탈중심화 된 환경에서 누가 이 검증 코드를 배포하고, 누가 검증 코드를 제대로 기입했는지 판단해야 하는가? 그리고 누가 핸드폰 번호를 검증하러 가는가? IP주소를 쓴다고 해도, 사실 매우 불공평한 방식이다. 왜냐하면, 한 사람이 동등하게 하나의 IP주소를 향유하는 것은 아니라는 것을 알기 때문이다.

이러한 이유로, 블록체인에서 우리가 실제로 사용하는 해결책 중에 가장 흔한 것은 작업증명(PoW)과 지분증명(PoS)인데, 후자는 대리의 지분증명(DPoS)을 포함한다. 그리고 어떤 다른 증명 방식, 예를 들어 당신이 얼마나 많은 공간을 가지고 있는지, 혹은 얼마나 많은 가상 화폐를 태웠는지 증명하는 다른 방법들도 있지만, 현재 가장 많이 사용되는 것은 PoW와 PoS, 이 두 가지이다. 여기서 나는 PoW이건, PoS이건, 혹은 다른 어떤 PoX이건 모두 시빌 공격에 대항하는 메커니즘이며, 컨센서스 알고리즘(합의)의 중요한 구성 부분이지만, 컨센서스 알고리즘 자체와 동일하지 않다는 것을 강조하고 싶다.

02 작업증명

다음으로, 먼저 여러분 모두가 비교적 잘 알고 있는 작업증명에 대해 이야기해보겠다.

작업증명의 기본적인 사상은 바로 해시레이트가 블록 생성권을 결정한다는 것이다. 만약 당신이 PoW 계산의 어려운 문제를 풀 수 있다면, 당신은 블록 생성을 할 수 있다. 요약하자면, CPU 한 표, 또는 GPU 한 대, 채굴기 한 대에 한 표로 이해할 수 있다. 아마 그런 의미일 것이다. 그것의 이점은 우선 이 시스템이 무허가라는 것이다. 참가자는 누구의 허가도 없이, 기계와 해시레이트가 있는 한 참여할 수 있다. 이론적으로는 심지어 기계가 꼭 필요한 것도 아니다. 만약 당신이 수동으로 한 블록의 해시를 산출해서 이것을 즉시 업로드 할 수 있다면, 다른 사람도 이것을 합법적인 블록이라고 인정할 것이다. 또 하나는 PoW 투표 행위 자체의 코스트가 비교적 높은 것으로, CPU나 GPU 혹은 채굴기를 사용하던, 기계의 코스트나 전력의 코스트를 착실하게 써 나가야 한다. 이건 우리가 전에 이야기했던 검증 코드와 형식적으로 약간 비슷하다. 그렇지 않은가? 어떤 검증 코드는 사람이 보고도 숫자나 알파벳이 무엇인지 알아보는 데 시간이 걸리고, 알아내야만 비로소 검증이 된다. 작업증명의 가장 큰 장점은 투표한 표와 투표권이 묶여 있는 것이라고 생각한다. 투표가 성사되면, 투표자 본인도 투표 내용을 수정할 수 없다.

작업 증명의 일반 논리로, 투표할 때 한 블록을 포장해 그 위에 작업 증명해야 한다. 이를 입증하면 한 표를 던져야 하는데, 이때 포장한 블록을 수정할 수 있는 방법이 없다. 예를 들어, 내 채굴기를 하루 동안 작동시키면 많은 표를 던질 수 있지만, 그 전날의 해시레이트를 새로운 한 블록에 집중시킬 수는 없다. 다른 한편으로는, 내가 스스로 낸 블록을 복구하려면, 나도 남의 블록을 복구할 때 필요한 동등한 해시레이트를 내야 한다. 이것은 PoW의 매우 좋은 특징이다.

물론, PoW 메커니즘에 근거한 컨센서스 알고리즘에도 단점은 있다. 우선 지연이 비교적 높다는 단점이 있다. 왜냐하면 우리가 거래를 블록에 포장한 후, 이 블록이 곧 유효한 후보 블록이 되는 것이 아니라 적어도 하나의 작업증명이 되어야, 이 블록을 후보 블록이라고 할 수 있다. 여기서 작업증명이 되는 시간을 특별히 짧게 설정할 수는 없다. 조금 후에 왜 너무 짧으면 안 되는지 이야기하겠다. 그래서, 적어도 블록을 포장하는 것부터 블록이 완성되는 것까지의 작업증명이 되는 동안만큼은 당신의 거래가 다른 사람에게 확인될 수 없다. 비트코인이 6개의 블록이 모여야 확인을 하는 것이 아니라 한 블록을 보는 순간 바로 확인을 한다고 해도 한 건의 거래를 확인하는 데 평균 10분이 걸린다고 한다. PoW 메커니즘이 또 다른 비난을 받는 점은 에너지 소모가 매우 높고, 환경친화적이지 않다는 것이다. 이 점에 대해서, 작업증명의 에너지 소모가 필요한지의 여부는, 사람마다 견해가 다를 수 있다는 것으로 생각되어, 유보적인 견해를 가질 수 있다고 생각한다. 하지만 우리가 작업증명에 대해 이야기하고 있는 이상, 작업량을 도저히 줄일 수가 없다. 만약 줄인다면 다른 이름으로 불러야 할 것이다.

img

PoW의 컨센서스에 근거한 주요 문제를 어떻게 해결할 수 있는지 살펴보겠다.

첫째는 확인 속도가 더디다. 비트코인을 예로 들자면, 1개의 블록을 생성하는데 평균 10분 정도가 소요된다. 확인할 경우, 6개의 블록이 생성될 때까지 기다려야 하고, 평균적으로 1시간 정도 소요된다. 두 번째는, 처리량이 적다는 것은 이미 모두들 잘 알고 있고, 이미 그런 점에서 비트코인은 몇 년 동안 비판을 받았다. 그리고 셋째로, 에너지 소모가 높고 친환경적이지 않다. 하지만, 세 번째는 우리가 PoW를 써야 하기 때문에 이 정도의 에너지 소모는 피할 수 없다. 그래서, 우리는 이 문제를 해결할 생각을 하지 않는다.

앞의 두 문제에는 느린 확인 속도와 적은 처리량이 있다. 사실 두 문제 모두 PoW 문제의 목표 난이도를 낮추고, 블록 생성 속도를 높이는 간단한 해법이 있다. 실제로 라이트 코인은 그렇게 운영된다. 목표 난이도를 비트코인의 10분에서 2.5분으로 낮춘 뒤, 단숨에 블록 생성 속도가 비트코인보다 4배나 빨라졌다. 처리량을 높이는 또 다른 방법은 블록 용량을 늘리는 것이다. BCH가 블록의 용량을 1M에서 8M로 먼저 확장한 뒤, 추가적으로 32M으로 확대하였고, 심지어 미래에 128M까지 확장시키자는 제안까지 나왔다. 직관적으로, 같은 블록 생성 속도에서 블록의 용량이 클수록 처리량도 많아진다.

이렇게 간단하다면, 비트코인의 느린 확인 속도와 적은 용량 문제를 해결할 수 있지 않을까? 물론 그렇지 않다. 정말로 간단하다면 비트코인은 현재 10분, 1M로 설정하지 않았을 것이다. 왜 아까 말한 방법으로는 문제를 해결하지 못하는 것일까? 왜냐하면 우리가 블록을 생성하는 속도가 빨라지면, 블록체인은 매우 빈번하게 포크가 발생한다. 특히, 당신이 블록을 생성하는 속도가 블록 전파 속도를 초과할 때, 그 블록이 포크 되는 상황이 심각하기 때문이다.

우리가 PoW 문제의 난이도를 낮추고, 블록 생성 속도를 높인 다음 블록의 용량을 늘린다면, 실제로 네트워크 요건이 일정할 경우, 블록 전파 속도를 낮출 것이 분명하다. 블록이 크면 클수록, 블록 전파 속도가 느려지기 때문이다. 그리고 만약 당신이 블록을 생성하는 속도는 빠르지만, 블록 전파 속도가 느리다고 말하면, 다시 말해, 내가 다른 사람에게 새로 생성된 블록을 받기 전에 스스로 한 블록을 생성할 수 있으면 포크가 발생한다. 또한, 그 차이가 비교적 크다고 하면, 포크가 많이 발생할 것이다.

포크가 많이 발생하면, 어떤 것이 안 좋을까? 가장 안 좋은 것은 안전성을 떨어뜨린다는 것이다. 비트코인 안에서 우리는 흔히 나쁜 사람들이 공격하는데 51%의 해시레이트가 필요하다고 말한다. 이 전제는 착한 사람들이 모두 하나의 메인 체인에 집중되어 있다는 것이다. 그러면 49%의 착한 사람이 그 위에 모이고 51%의 나쁜 사람이 공격할 수 있다. 그러나, 이렇게 빈번한 포크가 발생한다면, 예를 들어서 나는 포크 A에 30%의 해시레이트가 있고, 포크 B에 40%의 해시레이트가 있다. 이때 나쁜 사람들은 포크 B를 포크 A로 되돌리려고 하는데, 이는 많은 것을 필요로 하지 않으며, 그것은 단지 11%의 해시레이트만 있으면 된다. 전 세계의 성실한 해시레이트가 가장 많은 두 포크 사이의 차이보다 약간만 더 많으면, 공격자는 최장 체인을 이 두 개의 분지 위에서 이리저리 뛰어다니게 할 수 있다. 그래서 정말 간단하고 거칠게 비트코인의 파라미터를 고치면, 결국 안전성이 떨어질 수밖에 없다.

img

하지만 나는 이 안전성이 낮아진 것이, PoW를 탓할 수 없다고 생각한다. PoW는 여기서 단지 시빌 공격에 대항하는 메커니즘일 뿐이고, 그것의 난이도는 조절할 수 있다. 이곳의 안전성이 떨어뜨리는 장본인인 이 냄비는 PoW가 아닌 '최장 체인'에 있어야 한다. 왜 포크가 잦을수록, 안정성이 낮을까? 비트코인이 최장 체인 컨센서스를 채용했기 때문이다. 최장 체인 메커니즘에서 포크가 발생하면, 성실한 해시레이트가 따라서 포크 될 가능성이 높고, 이것은 성실한 사람이 투표하면 포크가 발생하는 것을 의미하며, 그러면 나쁜 사람이 마지막의 결과를 더 쉽게 조종할 수 있다.

그리고 다음 질문: PoW에 근거한 최장 체인의 컨센서스는 왜 포크가 발생했을까? 여러분이 모두 좋은 사람이라면, 포크가 발생하지 않아야 하지 않는가?

그렇지 않다. 우리는 그림에 있는 각각의 선으로 하나의 노드를 표시하고, 오른쪽을 가르키고 있는 화살표는 시간을 표시한다. 이 노드가 블록을 하나 생성할 때마다, 그것은 블록을 전파해야 하지만, 전파가 되는데 시간이 걸리기 때문에, 하나의 "시간 광뿔"이 생성된다. 블록이 생성되는 노드로부터 멀어질수록, 전파되는 블록을 받는 데까지 시간이 더 오래 걸리며, 상응하는 경우에는 더 늦은 시간까지 기다려야만 방금 생성된 새 블록을 볼 수 있다. 즉, 노란색 구역과 이후 다른 노드에서만 당신의 이쪽에서 생긴 블록을 볼 수 있다. 광뿔이 있는 이상, 그에 상응하는 것은 광뿔 바깥의 영역, 즉 그림 위의 녹색 부분이다. 한 노드가 이 광뿔 바깥 구역에 있을 때, 그는 당신의 이쪽에 방금 한 블록이 생겼다는 것을 알 수 없다. 즉, 만약 네트워크에서 생성된 다음 블록이 뒤쪽 노란색의 이 부분에 있다면 안전하다. 왜냐하면 이 시점에서 모든 노드가 최신 블록을 보고, 그들이 재생산하는 블록이 뒤따르면 포크가 발생하지 않을 것이기 때문이다. 만약 그들이 착한 사람이라는 가정 아래에.

img

그런데, 만약 블록의 생성 속도가 빠르다는 가정하에, 내가 초록색 광뿔 바깥 구역에 블록을 생성한다면, 포크가 발생할 것이고 마지막에는 고아 블록이 생길 수밖에 없다. 왜냐하면 이 두 블록은 서로 인용이 불가능하기 때문이다. 따라서 단순히 추정해 보면, 고아 블록율은 대개 광뿔을 제외한 이 구역의 면적을 원하는 블록 생성 간격으로 나눈 총면적과 같다. 블록 생성 사건은 원하는 블록 간격 내에 동일한 확률로 무작위로 나타나기 때문이다. 한편, 녹색의 광뿔 외 구역 면적이 차지하는 비율이 낮을수록, 고아 블록이 생길 가능성이 낮다는 것을 나타낸다.

그런데, 사실 우리가 딱 4가지의 노드만 있는 게 아닐 것이다. 노드가 굉장히 많을 텐데, 노드가 많아지면 블록 전파 시간이 자연스럽게 길어질 것이다. 블록 전파 시간이 길어지면, 광뿔 바깥 영역의 면적이 커지고, 우리의 블록 생성 간격도 길어져야 고아 블록이 비교적 작은 범위 이내로 억제된다는 것을 의미한다. 사실 고아 블록 자체도 안전성에 영향을 준다. 만약 고아 블록의 비율이 20%이라고 가정했을 때, 51%가 아닌 41%의 해시레이트만으로 공격을 수행할 수 있다. 따라서, 안전성을 높이기 위해, 고아 블록을 줄이기 위해, 블록 생성 간격을 벌려야 한다. 예를 들어, 비트코인은 10분으로 정해져 있다. 이 10분은 물론 완전히 바꿀 수 없는 것은 아니지만, 다만 고쳐지면 안전성이 약간의 영향을 받을 것이 분명하다.

img

블록 생성 간격을 길게 늘인 후에는 전체 시스템의 효율성이 저하되며, 특히 처리량에 미치는 영향이 크다. 여기서 우리는 전체 시스템의 대역폭을 살펴보면, 그것을 세 부분으로 나눌 수 있다. 일부 대역폭(파란색 부분)은 여러분이 전송하다가 결국에는 컨센서스에 추가될 거래이고, 그리고 일부 대역폭(빨간색 부분)은 여러분이 전송한, 컨센서스에 들어가지 않은 데이터이다. 여기에는 전체 합의의 지출을 포함하여, 최종적으로 합의서에 포함되지 않은 폐기된 블록과 거래도 있을 것이다. 마지막 부분(흰 부분)은, 낭비되는 대역폭에 쓰이지 않은 것이다. 우리가 PoW를 시빌 공격에 대항하는 메커니즘으로 사용하고, 최장 체인의 프로토콜로 마지막 컨센서스를 계산한다면, 우리는 대역폭에 대한 활용도가 사실 매우 낮다.

img

비트코인의 경우, 우리는 600초에 1MB의 유효한 블록을 생성하고, 600초에 1MB의 유효 블록을 기대한다. 내가 이 블록을 몇 번 더 확장해도 전체 네트워크 안에는 600초의 시간이 있고, 효율적으로 이용하는 저장된 정보의 양이 20MB도 안 될 것이다. 그러나 현재 인터넷의 평균 속도는 이미 600초에 몇 GB가 전달되고 있다. 이는 전체 네트워크 대역폭에 대한 활용도가 전체의 1% 정도여서 낭비가 심하다. 만약 우리가 약간의 기술로 블록 전파 속도를 빠르게 한다면, 예를 들어, 컴팩트 블록을 만드는 기술을 사용한다면 녹색 광뿔 밖의 구역의 시간은 그동안 짧아질 것이다. 이렇게 하면 우리는 블록 생성 시간의 간격을 비례하게 줄일 수 있고, 이전과 같은 안전성을 유지하면서 대역폭의 활용을 좀 더 향상시킬 수 있다. 하지만 이렇게 향상돼도 우리가 최장 체인으로 고아 블록 비율을 조절해야 한다면, 대역폭 활용도는 여전히 어디에도 미치지 못한다. 일반적으로, 하나의 퍼블릭 체인 네트워크는 몇 천 내지 만 개의 노드가 있을 수 있고, 블록 전파를 하려면 평균 열 번 내지는 더 많이 전송해야 할 수도 있다. 열 번의 전송이 필요한 경우, 블록이 생성되는 노드부터 다음 노드에 전송되고, 그 다음 노드가 블록으로 받아들여지고, 검증이 완료된 후 다음 노드에 다시 전송되는, 이러한 과정을 열 번 반복한다. 이 열 번의 전송 전 과정 이내에서, 내가 고아 블록의 비율을 낮추려면, 전 네트워크의 다른 노드에서 이 시간 내에 두 번째 블록이 생기지 않도록 하거나, 아주 낮은 확률로만 두 번째 블록이 생기게 해야 한다. 이렇게 긴 시간 동안 여러분들은 사실 한 블록만 전파한다는 것이다. 첫 번째 사람이 두 번째 사람에게 전파한 후에, 두 번째 사람이 세 번째 사람에게 전파할 때, 결국 첫 번째 사람은 한가한 상태가 될 것이다. 그렇지 않은가? 그래서 결국 대역폭 활용도가 높지 않을 수밖에 없다. 기존보다 몇 배는 더 개선이 될 수도 있지만, 전체 대역폭을 풀가동하는 것은 불가능하고, 10분의 1을 사용하는 것만으로도 충분하다고 볼 수 있다.

이왕 이렇게 된 이상, 포크를 피하고 싶다면, 대역폭을 전부 다 사용할 수 없다면, TPS는 어디에도 올라갈 수 없다. 왜냐하면, 동기화된 데이터가 그만큼 많으니, 그 안에 둘 수 있는 거래는 거래의 사이즈가 변하지 않으면, 상한선이 있기 때문이다. (거래 사이즈 축소도 TPS를 향상시킬 수 있지만, 다른 모든 블록체인도 같은 기술을 사용할 수 있고, 상대적인 열세는 여전히 불변한다)

사실 방금 해결해야 할 문제는, 포크가 생기고 나면 성실한 해시레이트가 집중되지 않아 안전성이 떨어진다는 것이다. 그러나 이 해결책이 단지 포크의 발생 확률을 낮추는 것만은 아니다. 예를 들어, 우리는 DAG 기반의 유향 무환도로 해결할 수 있다.

img

이더리움이 포크를 선택할 때, 최장 체인이 아닌 GHOST 프로토콜을 사용한다. 사실 이더리움은 약간 수정된 버전을 사용한다. 이 합의의 핵심 사상은 포크가 발생했을 때, 최장 체인이 아닌 가장 무거운 서브 트리에서 갈라진 자락을 선택한다. 그렇게 되면, 포크가 발생하든 안하든, 얼마나 많이 발생되든 간에 안전성의 문제는 크지 않다. 포크된 성실한 채굴자라도, 여전히 이전의 선택에 안전성을 기여하기 때문이다. 예를 들어 채굴자가 뒤쪽의 한 블록에서 포크 된다면, 포크 직전의 어딘가에서 가지가 어떻게 선택되어야 하는지에 대해서는, 채굴자는 여전히 안전성에 기여한다. 그것은 선택되어야 할 가지의 서브 트리에 하나의 무게를 기여한다.

그러나 GHOST 프로토콜은 대역폭을 비교적 충분히 사용할 수 있다고 하지만 동시에 낭비도 심하다는 단점이 있다. 왜냐하면, 가장 무거운 서브 트리의 체인에서 최종적으로 확정되지 않은 블록들 안의 거래는 인정하지 않기 때문이다. 몇몇 블록을 채굴했지만, 결국에는 컨센서스가 형성되지 않아 이 블록들의 처리량이 낭비되었다. Conflux는 사실 GHOST와 비슷한 방식으로 하나의 주축 체인을 정하고, 확정될 때까지 기다린 후에, 우리가 모든 블록을 하나씩 순서를 정하면, 모든 블록 안의 거래는 전체 시스템의 처리량에 기여하게 된다. 물론 순서를 정해 놓고도 충돌이 있거나 중복되는 거래를 처리해야 하기 때문에 충돌하는 거래를 모두 수행할 수는 없다. 만약 우리가 대역폭의 관점에서 해석한다면, GHOST 프로토콜은 대역폭을 매우 잘 활용할 수 있지만, 그것은 전체 시스템의 지출이 비교적 크며, 컨센서스에 들어가지 않은 블록을 많이 전송하기 때문에 대역폭을 낭비하게 된다.

​ Conflux는 중복되는 거래가 있을 수 있지만, 전체 대역폭에 대한 활용이 충분하고, 그 전제하에서 효율적인 대역폭 활용도가 GHOST보다 훨씬 높기 때문에 전체 시스템의 처리량을 높일 수 있다고 말했다. 대비하면 비트코인의 총 대역폭 활용률이 특히 낮기 때문에(~1%) 아무리 프로토콜의 지출을 낮추더라도, 처리량에서 Conflux와의 격차는 여전히 뚜렷하다.

지금까지 PoW에 대한 간단한 내용이었다. 다음은 지분 증명에 대해 한번 살펴보겠다.

03 지분증명

지분증명의 기본 사상: 당신이 화폐(때로는 사람들이 이것을 stake라고 부른다)를 가지고 있을 때, 기장권이 있고, 그 후에 투표권이 있다는 것이다. 당신의 투표권은 당신이 가지고 있는 화폐의 수에 비례할 때, 이것이 바로 하나의 화폐당 한 표라는 것이다. 쉽게 말해 돈이 많을수록 투표할 권리가 커진다.

PoS 프로토콜의 기본 틀은 모든 참여자의 통화 보유량에 따라 패킹권과 투표권을 할당하는 것이다. PoS의 시스템에서 패킹과 투표 두 가지를 분리되어 있고, 그 역시 분리할 수 있다—PoW 시스템에서 이 둘은 사실 동일하다. 패킹권을 분배한 후, 패킹권을 가진 사람은 후보 블록을 생성할 자격이 생긴다. 이 블록에는 처리할 거래가 포함되어 있고, 자신의 서명이 있다. 후보 블록이라고 해서 컨센서스에 들어가는 것을 뜻하지 않는다. 후보 블록 전파 이후에는 투표권이 있는 사람들이 투표해야 한다.

img

투표 형식은 투표된 블록에 서명을 하는 것이다. 투표 후, 많은 표를 얻은 후보 블록이 최종적으로 컨센서스에 들어가 효과적인 블록으로 거듭날 수 있다. 물론 투표의 과정은 우리가 많은 방식으로 수행할 수 있고, 비교적 흔한 것은 다수결의 컨센서스 알고리즘을 사용하는 것이다. 현재 우리는 몇 명이 투표할 자격이 있고, 몇 표가 있는지 알고 있기 때문에, 이 컨센서스 알고리즘으로 우리는 쉽게 1/2 혹은 2/3를 넘는 다수결을 산출할 수 있다. 이 점은 PoW와 매우 다르다. 왜냐하면, PoW 시스템에서 당신은 네트워크 전체의 해시레이트가 얼마나 되는지 전혀 모르기 때문에 단지 추정에 의존해야 할 뿐 아니라, 일반적으로는 아직 정확하지 않기 때문이다. 그래서 PoW 시스템에서는 확실한 임계 값을 가지고 무엇이 다수인지 판단하는 것은 불가능하다.

탈 중심화 메커니즘에서 우리는 누가 패킹을 맡고, 누가 투표를 책임질 것인지를 선택해야 한다. 때때로 효율성을 위해 여러분은 먼저 비교적 작은 위원회를 선출하고, 그들이 투표를 담당하도록 할 것이다. 대리 지분 증명된 DPoS 메커니즘이 아니라면, 이러한 위원회는 대개 무작위로 선정되며, 또한 공평성을 위해 자주 번갈아야 한다. ​ PoS 시스템에서 어떤 참여자가 PoS 컨센서스 프로토콜을 위반하는 것으로 감지되면, 이들에 대해 처벌을 내릴 수 있다. 예를 들어 자신의 한 표를 여러 블록에 투표하거나, 그가 표를 갖고 있다고 해도, 투표하지 않는 등, 시스템의 안전성에 영향을 미치는 행위 모두를 처벌할 수 있다.

지분 증명의 장점이 무엇인지 다시 한번 살펴보자.

첫 번째 장점: 채굴자와 화폐 소지자의 동기는 일치한다. PoS의 채굴자들은 모두 화폐를 가지고 있어야만 했고, 전체 생태환경에서 화폐를 가지지 않으면서, 채굴기에만 의존하여 채굴하는 역할을 줄였다. PoW의 커뮤니티에서는 부잣집, 개발자, 그리고 채굴자, 이 삼자의 이익이 완전히 일치하지 않는 경우가 종종 있다. 마지막에 이르기까지 많은 일이 성사되기 어려울 정도이다. PoS에 이르러서는, 이제 적어도 채굴자와 자본가의 이익은 더욱 일치할 것이며, 충돌과 의견 차이를 어느 정도 줄일 수 있을 것이다.

두 번째 장점: PoS 지연을 매우 낮게 만들 수 있고, 확인은 매우 빠르게 할 수 있다. PoS 시스템에서는 하나의 거래를 받으면 바로 패킹할 수 있고, 패킹 이후에 바로 전파가 가능하며, 이 시간은 기다릴 필요가 없다. PoW와 다르게, 최소 하나의 PoW 문제만 풀 수 있는 시간만 기다리면 된다. 실제로 PoS 컨센서스의 지연은 주로 인터넷과 투표 참여 인원수에 의해 제한된다. 투표하는 사람이 많아질수록, 분명 기다려야 하는 시간이 더 길어질 것이다.

세 번째 장점: PoS는 작업 증명이 필요하지 않기 때문에 친환경적이다. 투표는 실제로 사인을 하는 것이고, 많게는 간단한 연산을 더 하는 것이다. PoW 난제를 푸는 것보다 훨씬 쉽다.

img

그러나 그것의 단점 또한 위의 내용과 상대적인 것이고, 그것은 PoW 시스템의 몇몇 장점들을 잃었다.

첫째, 무허가 PoW 시스템에 비해, PoS의 시스템은 익명성과 허가성적으로는 좀 나쁘다. 왜냐하면, 내가 한 사람으로서 PoS라는 시스템에 들어가 투표하고 싶은데, 투표를 하려면 내가 먼저 화폐를 소지해야 한다. 이 화폐는 내가 다른 방식으로 얻을 수 있는 것이 아니다. 나는 반드시 이미 화폐가 있는 그 사람들과 거래를 해야 한다. 그들에게 화폐를 건네받은 후에야 비로소 나는 권리가 생긴다. PoW와는 다르게, 기계 한 대만 가지고 시스템에 접속하면 바로 화폐를 채굴할 수 있다.

둘째, 투표행위 자체는 원가가 매우 낮아 서명만 하면 효율적인 투표를 생성할 수 있다. 하지만, 이 방법은 안전성에 약간의 문제가 있다. 예를 들어, PoS 시스템에서 흔히 볼 수 있는 무 이해 공격 문제이다.

그 이외에, 투표권을 재사용할 수 있고 양도할 수 있다는 것도 나쁜 것이다. 만약 내가 자신의 프라이빗 키를 다른 사람에게 팔았다면, 내가 이전에 투표한 표들은, 전에 각각의 가지에서 행해진 선택에 의해, 이때 나의 비밀키를 얻은 사람은 다시 한번 투표할 수 있다. 이전의 투표권을 재사용할 수 있는 것은 안전성에 문제를 가져올 수 있다. 롱 레인지 공격에 대해 이야기를 할 때 다시 자세히 토론해보자.

이렇게 되면 노드 사인이 충분히 있고, 시스템 전체에서 대부분의 노드가 성실하다면, 이 시스템은 포크가 절대로 발생하지 않으며, 아주 빨리 처리할 수 있고, 여러분의 확인 속도 역시 빨라질 것이다. 예를 들어, EOS에서 빠른 블록 생성속도와 확인 속도를 실현하였다.

하지만 PoS 컨센서스라면 새로운 문제도 있다.

첫 번째는 전송 복잡도가 투표하는 사람의 수와 연관되어 있다는 것이다. 그리고 보통 제곱의 관계이다. 투표에 참여하는 사람들의 수가 많을수록 전송은 복잡해지고, 여러분은 더 오래 기다려야 한다. 만약 우리가 미국 대통령을 1인 1표로 뽑는다고 하면 전체 투표 과정은 매우 복잡하고 느릴 것이다. 반대로, 정치국 내부에서 투표를 진행하여 한 가지를 결정하는 것이 훨씬 빠를 것이다. 왜냐하면 투표에 참여하는 사람이 적기 때문이다.

투표권 결정 시점이 후보 블록의 생성보다 이르다는 PoS 컨센서스의 본질적인 문제도 있다. 이 블록이 있기 전에 나는 누가 투표권이 있고 누가 투표권이 없는지를 알았다. 투표권의 결정 방식 때문에 실제로 투표권을 결정하는 것과 이를 행사하는 것은 분리되어 있으며, 함께 귀속되어 있지 않다. 내가 투표권을 얻었을 때, 다른 사람은 말할 방법이 없기 때문에 이 표를 반드시 누구에게든 투표해야 하는 것을 규정한다. 그래서 투표권을 얻은 후에 나는 언제든 자유롭게 투표할 수 있고, 내가 투표하는 행위로 인해 투표권이 있는지 없는지를 결정하지 않을 것이다. 하지만, 그렇게 되면 투표권이 더 유연해지고, 내가 선택할 수 있는 정책의 공간이 더 커지고, 게임 전체가 더 복잡해진다는 것을 의미한다. 통상적으로, 정책 공간은 안전성에 좋지 않다. 왜냐하면 공격자에게 더 큰 조작 공간을 남기기 때문이다. 성실한 사람은 규칙대로 가는 것이 보통인데, 그는 한 번에 하나의 동작을 정하지만, 공격자가 조작할 공간이 많으면 할 수 있는 일이 많아져서 안전성을 보증하기가 더 어려워진다. 결과적으로 PoS 시스템에서는 무 이해 공격, 롱 레인지 공격과 같은 더 많은 공격 방식이 있게 된다.

img

그러면 왜 PoS 시스템에서는, 우리가 PoW 시스템에서 그랬던 것처럼 먼저 블록을 생성하고 나서 투표권을 결정할 수 없는 것일까? 왜냐하면, 투표권에 대한 컨센서스 확보가 필요하기 때문이다. 유권자가 어느 후보 블록에 투표를 하던, 누가 투표할 권리가 있는지는 모든 사람이 알아야 한다. 그렇지 않으면 PoW와 유사한 상황으로 퇴화될 수 있다. 이것은 PoS 시스템에서 stake grinding이라고 부르는데, 매번 시도하여 많은 새로운 블록을 만들어내고, 그 블록들에서 자신에게 가장 이익이 되는 블록을 골라 전파하는 것을 말한다. 그리고 이 블록이 전파되면, 투표권을 정한다. 실제로 먼저 블록을 생성하고, 나중에 투표권을 결정하게 되면, 우리는 포크가 발생하여, 여러 갈래로 가지 난 다음, 매 가지의 블록 뒤쪽에 모두 친우단(亲友团)와 같은 위원회가 함께하고, 친우단에 많은 사람들이 이 블록은 맞다고 얘기하는 것을 볼 수 있을 것이다. 하지만 블록마다 뒤에 따라붙는 친우단이 다 다르기 때문에 아무리 투표를 해도 체계적인 컨센서스가 형성되지 않는다.

또 다른 PoS 컨센서스의 문제점은 대부분의 노드가 성실하다고 가정해야 한다는 것이다. "성실"이라는 것은 일반적으로 암호학에서 좀 더 많이 제기되는 것이다. 그러나 게임론과 경제학에서는 한 사람이 정직하다고 말하는 것이 드물고, 한 사람이 이성적이라고 말하는 경우가 더 많다. 만약 거짓말을 하면 돈을 더 벌 수 있다면, 많은 사람들은 거짓말을 선택하게 될 것이다. 그러니까, 이 노드들이 성실하다고 가정하면, 실제로 매우 강력한 가설이다. 거짓말을 하고, 악을 행함으로써 돈을 많이 벌 수 있더라도 합의를 지키는 쪽을 택하겠다는 뜻이다. 이 부분은 어느 정도까지의 성실성을 요구하는지에 대한 구체적인 합의가 있어야 합리적인 가설인지 알 수 있다.

img

PoS 컨센서스가 가져오는 이러한 새로운 문제들을 어떻게 해결할 것인지 이야기해보겠다.

첫 번째는 전송 복잡도가 매우 높은 문제를 말하는 것인데, 이것은 사실 가장 해결하기 쉬운 문제이다. 여러분은 비교적 작은 위원회를 무작위로 골라서, 이 사람들을 대표로 투표를 맡거나, 대리투표를 할 수도 있는데, 내가 표를 먼저 EOS 안에 있는 노드 같은 대표에게 투표하고, 그 다음 이렇게 선택된 대표들이 나를 대신해서 투표를 하는 것이다. 이런 이점은 실제 블록 생성 컨센서스 투표 참여 인원이 적어, 투표의 복잡도를 낮출 수 있다는 것이다. 인민대표대회나 해외의 의회나 배심원단은 이와 비슷한 논리를 사용한다.

그리고 어떻게 공격에 대항할 수 있을까? 한 가지 방법은 우리가 대부분의 사람들이 성실하다고 가정하고, 인터넷이 매우 좋은 동기성을 가지고 있다고 가정한다면, 한 블록을 전파하고 난 후, 예를 들어 1분 또는 30초라는 정해진 시간 동안, 전체 인터넷 대부분의 노드를 받을 수 있다고 가정하는 것이다. 이 전제하에서 매우 쉽게 컨센서스를 생성할 수 있다. 그러나 이러한 가정은 실제로 매우 강력하며, 현실적으로 보증하기 쉽지 않다. 우리가 어떤 공격의 문제를 해결해야 할 때, 이 공격이 존재하지 않는다고 가정하고 문제를 해결했다면, 이는 분명 납득할 만한 방법이 아닐 것이다.

PoS 시스템을 대상으로 비교적 흔히 볼 수 있는 몇 가지 공격 방식에 대해 다시 논의해 보겠다.

img

첫 번째는 무 이해 공격인데, 사실은 한 표로 여러 번 투표하는 것을 말한다. 한 PoW의 시스템에서 채굴자들이 두 블록과 같은 포크를 보았다면, 그의 해시레이트는 한 개만 따라가서 파낼 수 있을 뿐, 두 개는 동시에 채굴할 수 없다. 물론 진짜로 두 블록을 동시에 파면 안 되는 것도 아니고, 그렇게 하면 한 블록에 할당되는 해시레이트가 줄어들 수밖에 없다는 뜻이다. 양쪽에 채굴을 하는 해시레이트를 더 하는게 정해진 값이라, 보통 아무도 그렇게 하지 않는다. 하지만, PoS의 시스템 안에서는 달라진다. 예를 들어, 왼쪽에 포크가 하나 있다. 자, 한 표를 던져주고, 오른쪽에 포크가 하나 있는 것을 보면 한 표를 더 던진다. 이렇게 해서 어떤 포크가 컨센서스라고 해도 나는 투표의 인센티브를 나눠 가질 수 있다. 이렇게 되면, 나쁜 사람들은 기뻐할 것이다. 나쁜 사람들이 말하길, 어차피 자기가 포크를 생성하여 이성적인 채굴자들도 자신에게 표를 줄 것이다. 그렇다면, 자신이 남은 "비이성적인 좋은 사람들"이 쥐고 있는 투표권보다 많으면, 이전의 메인 체인을 다시 복구할 수 있을 것이다. 그러면 결코 안전하지가 않다.

무 이해 공격에 대해 흔히 볼 수 있는 대항 방법은 한 표로 여러 번 투표하는 행위를 한 번 감지하면, 그 사람에게 처벌을 내리는 것이다. 당신이 만약 정말 한 표로 여러 번 투표한다면, 다른 사람이 당신이 투표했다는 정보를 받아 체인에 제출해서 "이 사람은 한 표로 여러 번 투표했어요. 그 사람에게 돈을 뺏어요" 라고 말할 수 있다. 근데 이런 방법도 사실 내가 양쪽에서 한 표로 여러 번 투표를 할 수 있는 상황이 생길 수도 있다. 하지만 마지막에는 한쪽에서만 돈을 떼이게 되지만, 다른 한쪽에서는 더 큰 수익을 낼 수도 있다.

또 하나는 뇌물 공격이다. 투표할 때, 대부분의 참여자들은 실제로 이성적인 사람들에 더 가깝다. 예를 들어, 당신이 100원을 가지고 있고, 매번 투표할 때마다 얻는 수익이 1원이라면, 나는 당신이 나의 블록에 투표해준다면 당신에게 2원을 주겠다고 말할 것이다. 아마 많은 사람이 이 제안을 받아들일 것이다. 그러면 나쁜 사람들은 아주 낮은 비용으로 자신의 몫을 지지할 표를 더 많이 구할 수 있다. 예를 들어 자산 100위안에 해당하는 투표권을 2위안에 살 수 있다면, 이것은 분명 안전성에 영향을 미칠 것이다. 현재, 뇌물 문제에 대한 해결책이 나왔다. 특별히 완벽한 것은 아니지만, 꽤 믿을 만한 수준이라고 볼 수 있다. Algorand가 해결 방안을 제시한 것처럼, 투표권 배분은 난수를 통해 결정된다. 유권자들이 투표권의 증명을 공개하기 전까지는 도대체 어떤 사람이 투표권이 있는지 모두가 알 수 없다. 그렇게 되면, 적어도 투표하기 전에 내가 투표권이 있다는 걸 아는 사람은 아무도 없을 것이고, 그들은 내게 뇌물을 줄 방법이 없을 것이다. 공개투표 이후 1차 투표가 끝날 때마다 위원회 사람들을 모두 바꿔 다시 뽑는 방식이라 투표권이 있다는 것을 알았을 때는 이미 투표를 한 상태라 뇌물을 건네 결과를 바꿀 방법이 더 이상 없다. 여기서 컨센서스 참여자들의 성실성에 대한 가설이 있다. 투표권이 있다고 해서 온라인상으로 여기저기에 내가 어떤 순번의 투표권이 있는지, 돈 내고 살 사람이 있는지 물어보는 건 말이 안 된다. 현실에서 누군가가 실제로 이 일을 대규모로 물어보면, 사실 커뮤니티에서 쉽게 발견될 수 있다. 그렇게 되면, 여러분은 누군가가 이런 공격을 하고 있다는 것을 알게 될 것이고, 대응도 비교적 쉽게 할 수 있을 것이다. 그래서, 이것은 공격받을 위험을 낮추는 방법 중 하나이다.

또 하나는 롱 레인지 공격에 대한 안전성이다. 이것은 무엇을 말하는가? A 씨는 제네시스 블록에 20%의 화폐 혹은 20%의 지분을 갖고 있으면 정상적인 블록에서 블록을 생성하여 투표할 수 있다는 것이다. 하지만 A 씨는 어느 틈에 그가 갖고 있던 체인의 화폐를 모두 팔아치울 수 있고, 현금을 찾아 헤맨다. 지금 그는 체인에 아무런 돈이 없기 때문에 나중에 다른 사람이 체인에서 그를 처벌할 수는 없다. 이때 그는 자신의 프라이빗 키를 공격자에게 판다. 공격자는 A의 것, B의 것, C의 것, 많은 사람들의 많은 프라이빗 키를 인수할 수 있다. 그 프라이빗 키들을 인수한 후, 이 프라이빗 키들이 제네시스 블록 안에서 통제하는 권리는 아마도 50%가 넘고 심지어 80%가 넘을 수도 있다. 그런 다음 공격자는 이러한 프라이빗 키를 가져와서 나중에 악의적인 블록을 만들고, A, B, C를 대신한다. 그리고, 그들은 각각 한 표씩을 투표하여 악의적인 블록을 지지할 것이다.

제3자가 보기에, 이 블록은 진짜 메인 체인의 블록과 마찬가지로 합법적으로 보이는데, 그 이유는 많은 사람들이 투표하러 가기 때문이다. 만약 나쁜 사람들의 체인이 충분히 길다면, 나중에 새로 들어온 사람들은 지금 두 개의 체인이 있고, 한 개당 많은 사람들이 투표한 것을 발견하게 될 것이다. 내가 어떤 것을 믿어야 할까? 이때, 이미 컨센서스는 잘못된 것이다. 그렇다면, 이런 공격에 어떻게 대응할까? 한 가지 방법은 약한 활성화를 보장하는 것이다. 즉, 성실한 채굴자 한 사람에게 적어도 시간 간격을 두고 올라가서 최신 상태를 동기화하도록 요구하는 것이다. 만약 누군가가 당신에게 그 상태가 틀렸다고 말한다면, 1년 전의 어느 상태로부터 포크해와야 하는데, 그것은 복구된지 너무 오래되었기 때문에, 당신은 그런 조언을 받아들이지 말아야 한다.

또 다른 방식으로는 보증금을 걸고, 복구할 수 있는 길이 제한를 늘리는 것이다. 이더리움의 Casper PoS 프로토콜에는 이렇게 설치되어 있다. 만약 당신이 투표에 쓸 돈을 굳이 팔아야 한다면 가능하다만, 당신은 일정 시간 동안 기다려야 한다. 이 시간은 다른 사람들이 당신이 이미 사용한 투표권으로 투표하러 가서 승인이 나지 않았다는 것을 다시 확인할 수 있을 만큼 충분한 오랜 시간이다. 왜냐하면 다른 사람들은 이미 합법적인 체인을 따라 멀리 갔기 때문이다. 이것은 이더리움의 해결책이다.

Algorand, 여기에서의 해결 방안은, 여러분이 성실하다면, 성실한 사람으로서 당신이 매회 투표한 후에, 당신은 해당 투표에 사용된 프라이빗 키를 없애야 한다. 당신이 그것을 없앤 후에, 아무도 다시 열쇠를 가지고 나쁜 일을 저지르지 않을 것이다. 이 해결책은 맞는 말이지만, 참여자들의 도덕적 수준에 대해 비교적 높은 요구를 하고 있다.

PoS에 기반을 둔 컨센서스 시스템에는 또 다른 문제가 있다. 보통 우리가 작은 위원회를 택할 때, DPOS를 사용하지 않는다면, PoS 시스템에서 우리는 무작위로 뽑아야 한다. PoW 투표에서의 무작위성은 주로 여러분의 분산과 병행하여 채굴할 때의 운에 의해 생기는 것이다. 왜냐하면 PoW 문제를 푸는 것 자체에 내재된 랜덤성이 있기 때문이다. 하지만 우리가 무작위로 하나의 투표 위원회를 선택해야 한다면, '어떻게 하면 공정한 난수가 생길까?'라는 또 다른 문제를 해결해야 한다.

img

어떻게 공정한 난수가 생기는가 하는 것은 암호학적으로도 여러 해 동안 논의되어 온 문제이며, 현재는 비교적 좋은 대안도 있다. 이 대안은 절대적으로 균일하고 완벽한 난수를 생성할 수는 없다고 말하지만, 편차를 한 범위 이내로 제어할 수 있다. 한편, 균일하고 완벽한 난수를 생성하는 것은 어렵다. 왜냐하면, 2/3 이상의 화폐 공격자가 있으면 전체 체인을 완전히 제어할 수 있고, 발생한 난수도 마음대로 고를 수 있다는 것을 알고 있기 때문이다. 그래서 당신이 만약 67%의 화폐를 가지고 있다면, 100%로 난수를 조절할 수 있다. 10%의 화폐가 11%의 난수를 통제한다고 말하는 것도 특별히 받아들일 수 없는 것이 아니다. 사실 PoW에 기초한 비트코인도 유사한 성질을 가지고 있다. 예를 들어 51%의 해시레이트가 있으면 체인에서 100%의 수익을 통제할 수 있다. 조금 적을 때는 실제로 20%의 해시레이트가 개인 채굴을 통해 실제 해시레이트가 차지하는 백분율보다 약간 높은 수익을 얻을 수 있습니다. 이것은 비선형적인 관계이지만, 그것이 너무 많이 빗나간 것이 아니라면, 여러분은 일반적으로 마지못해 받아들일 것이다.

PoS 컨센서스의 안전성 가설은 PoW보다 강하다. POW는 우리에게 51% 이상의 성실한 해시레이트를 요구한다. PoS의 Algorand이 Staker에 대한 요구는 80% 이상의 돈이 성실한 사람들의 손에 묶여 있어야 하고, 그리고 그 사람들은 매우 성실할 필요가 있다는 것이다. 그들은 자신이 투표권이 있는지 없는지에 대해 다른 사람에게 미리 알려주지 않는다. 투표 후에 해당 프라이빗 키를 삭제해야지, 다른 사람에게 팔면 안 된다. 또한 그들은 정기적으로 접속해서 상태를 동기화해야 하고, 일정 기간 동안 자신이 투표권을 갖고 있는지, 있다면 제때 투표해야 하는지도 따져봐야 한다. 우리가 지금 많은 사람들이 그러하듯이, 돈이 은행에 있으면 그냥 놔두고, 돈을 쓸 때가 아니면 시스템에 로그인하지 않는다면, 나쁜 사람들은 마지막 실제 투표에 활약한 사람들 중에서 어느 정도 비율만 넘어서면 된다. 불활성화, 불 투표자는 실질적으로 안전성에 기여하지 않는다. 물론 일반적인 PoS라 하더라도 최소한 2/3 이상의 돈이 성실한 사람의 손에 있어야 하며, 또한 어느 정도 활동성에 대한 가정이나 요구가 있어야 한다. 적어도 성실한 사람들은 자주 접속해보고, 표를 던지길 바란다.

또한 PoS 컨센서스에 기반한 시스템은 작동할 때 약간의 문제가 있다. 하나의 프로젝트가 종종 처음에 가동되기 시작할 때, 그것의 자산 분포가 탈 중심화가 되지 않을 때이기 때문이다. 비트코인이 처음 시작할 때처럼, 나카모토 사토시는 많은 돈을 가지고 있을 수 있다. PoS의 시스템이라면 그 혼자서 전체 시스템을 완전히 제어할 수 있다. 다른 프로젝트의 개발팀 그리고 초기의 몇몇 큰 투자 기관들은 대부분의 화폐를 이미 가지고 있을 것이고, 그들의 PoS에 대한 발언권은 엄청나게 커질 것이다. 그래서 PoS의 퍼블릭 블록체인 하나를 어떻게 작동시킬지도 꽤 큰 문제이다. EOS 가동 전에도 많은 시간이 걸렸기에 잘 운영되는 것이다. 그래서 이 점에 대해, 우리 팀은 적어도 프로젝트가 가동될 때 PoW를 사용하는 것이 PoS보다 훨씬 더 편해야 한다고 생각한다. PoW 방식만이 무허가가 될 수 있으며, 그 다음에 시작하는 화폐도 발행할 때 비교적 공평할 것이다.

마지막으로, PoS는 몇몇 규정을 어기는 행위를 검사하고 체인에서 이들을 처벌할 수 있지만, 공격자들의 이익이 전적으로 체인에 있지 않을 수도 있고, 그는 체인 이외에 다른 수익이 있다. 예를 들어 내가 이더리움에서 공격을 하면, 그 위에서 처벌을 받아 많은 이더리움 코인을 손해 보고, 동시에 가치가 떨어질 수도 있다. 만약 내가 다른 시장에서 이더리움 코인을 공매도한다면, 공매도로 더 큰 수익을 올릴 수 있다. 그러면 체인 밖의 동기는 체인에 많은 돈이 있는 사람들이 여전히 이 체인을 공격할 수 있는 동력을 갖게 만들 것이다. 이것은 PoS가 해결하기 어려운 문제이기도 하다.

04 PoW VS PoS

마지막으로 PoW와 PoS 메커니즘에 기초한 컨센서스의 비교를 간단히 해보겠다.

하나는 메커니즘의 진입이다. 그것은 도대체 허가가 있는 것인가? 투표가 익명인가? 참여 인원수에 제한이 있는가? 투표의 형식은 병행인가 아니면 전파를 통한 방식인가? 투표 결과가 확인되는 방식은? 투표의 한계비용은?

하나는 안전성이다. 내가 생각하는 가장 큰 두 가지의 차이점은 투표권이 먼저 있는가, 아니면 후보 블록이 먼저 있는가 하는 것이다. 투표행위와 투표권리는 귀속되어 있는가? 이러한 관점에서, PoW는 안전성 측면에서 비교적 잘하고 있다.

그러나 PoW의 투표 결과는 한 가지에 누적된 우세가 충분히 커야 확인할 수 있기 때문에, 한 블록만 기다리는 게 아니라 성실한 해시레이트를 한 블록에 집중시켜, 뒤에서 일정 시간 동안 일한 뒤에야 확인할 수 있다. 따라서 PoW 시스템은 일부 최적화를 통해 확인 속도를 최대한 빠르게 한다고만 말할 수 있지만, PoS만큼 초급 확인을 하기는 어렵다.

img

투표의 한계비용이라고 하면 기계와 전기료가 있어야 하기 때문에 PoW는 이 문제를 피할 수 없다. 하지만 다른 것은 잘했다. 상대적으로, PoS는 성능면에서 비교적 좋고, 주로 안전성에서 떨어진다. 바로 그것이 투표권을 먼저 결정하기 때문에, 여러분이 이 투표권을 가지고 마음대로 투표할 수 있다. 그리고 당신은 한번 투표한 후에, 이 권리를 가지고 다시 한번 투표할 수 있다. PoS의 기타 몇몇 문제들은 실제로 우리가 위원회나 대리 지분 증명으로도 그 문제들을 경감시키거나 해결할 수 있지만, 오직 투표권 문제들만큼은 해결하기 어렵다. 투표권과 투표행위가 귀속되지 않는 문제는 PoS의 한 본질적인 난제이다.

PoW의 단점은 확인이 느리고, 처리량이 상대적으로 낮다는 것이다. PoS의 주요 단점은 뇌물 공격, 롱 레인지 공격, 무 이해 공격 등 여러 가지 공격 수단에 어떻게 대응할지 고려해야 한다는 것이다. 이러한 공격에 대응하기 위해서는, PoS 프로토콜이 많은 상황을 처리해야 하기 때문에 비교적 복잡해진다. 알다시피, 복잡한 시스템일수록 안전성을 보증하기가 더 어렵고, 한편으로 분석하여 증명하는 것이 더 어렵다. 다른 한편으로는, 공격자도 복잡한 시스템에서 더 쉽게 허점을 찾을 수 있다.

img

아직 많이 사용되지 않는 방식인 PoW와 PoS가 섞여 있는 컨센서스가 있다. PoW의 장점은 안전하고 믿을 수 있는 반면, PoS의 장점은 효율성이 높고 특히 확인속도가 빠르며, 에너지 소모가 비교적 낮기 때문이다. 이 두 가지 장점을 결합할 수 있다면, 보다 바람직한 컨센서스 도출이 가능할 것이다. 동시에 여러분은 체인이 아닌 DAG의 방식으로 블록을 조직하는 것도 고려할 수 있다. DAG의 방식은 포크를 두려워하지 않기 때문에 과도하게 블록 속도를 제한할 필요가 없다. 따라서, 블록을 비교적 빨리 생성할 수 있고 대역폭만 있으면 동기화할 수 있다.

img

처리량이 인터넷 용량과 대역폭의 상한선을 넘었을 때 더 확장을 하고 싶으면 다른 부분에서 생각을 해봐야 한다. 하나의 비교적 간단한 아이디어는 두 번째 확장 방안을 사용하는 것이다. 각각의 거래를 온 사이트로 전달하여 검증하지 말고, 예를 들어 sharding처럼 하나의 거래가 shard 내부에서 국소적으로만 검증되면 온 사이트의 대역폭을 절감할 수 있다. 라이트닝 네트워크도 유사한 논리를 사용한다. 또 다른 비교적 어려운 방식으로 짧은 영 지식 증명, 확률 검증 증명 등 '검은 과학 기술'을 사용해야 하는데, 여기서는 이야기하지 않겠다.

그러나 PoW와 PoS가 혼합된 시스템을 설계하는 데 있어 가장 어려운 점은 어떻게 양자의 장점을 한데 결합시키느냐는 것이지 그것들의 단점을 하나로 결합시키는 것은 아니다. 나는 PoW 방식으로 한 표를 얻고, 그 표로 후보 블록에 대한 투표를 할 수 있는 설계가 있다는 것을 들었다. 내가 생각하기에 이런 방식은 좋은 방법이 아니다. 왜냐하면, PoW투표와 투표권을 귀속하는 이점을 포기했고, 안전성은 PoS 시스템에 더 가깝기 때문이다.

PoW와 PoS의 이점을 결합할 수 있다면, 안정성이 높고, 확인이 빠르고, 처리량이 많으며, 에너지 소모 역시 합리적인 시스템을 만들 수 있다. 아직까지 특별히 좋은 해결책을 보지 못했지만, 앞으로 이런 완벽한 해결책이 나올 것으로 기대한다.

Source: https://blog.naver.com/conflux-chain/221719163796