[Whitepaper] 스텔라(XLM) 백서 탐구

in #blockchain6 years ago (edited)

솔직히 리플은 블록체인이 파고들기 아주 좋은 분야를 정조준했다. 은행 간 송금에서 거처야하는 수많은 절차들을 단순화하고 기존보다 더 투명성 있게 운영할 수 있게 만든다는 것은 더할 나위 없이 블록체인의 몫으로 보였다. 하지만 다들 익히 알고 있듯이 리플은 승인된 노드들만 채굴에 참여시켰으며 리플 발행량의 상당 부분을 개발자들과 리플 랩스가 소유하고 있다. 많은 이들은 이러한 부분들을 지적하였고 리플 또한 사토시가 제시했던 블록체인 철학의 큰 틀에서 벗어나지 않기 위해 많은 노력을 하고 있다. 예를 들면 리플 랩스가 소유한 리플에 대해 스마트 컨트랙트의 형태로 투명하게 관리를 하는 것이 추진되고 있다. 하지만 여전히 구조상 permissioned 블록체인의 형태를 띠고 있었고 이에 리플의 창업자 중 한 명인 Jed McCaleb이 리플을 나와 새로운 도전으로서 스텔라 루멘을 창업한다.

스텔라 루멘은 루멘이라는 코인을 사용하며 초기에는 리플의 프로토콜로부터 개발을 시작한 것으로 알고 있다. 하지만 개발하던 합의 알고리즘 상에서 포크가 일어나며 결함이 발생함에 따라 새로운 코어를 개발하게 된다. 해당 사건은 아래의 링크에서 확인할 수 있다.
https://www.stellar.org/blog/safety_liveness_and_fault_tolerance_consensus_choice/

이리하여 기존에 개발하던 stellard를 버리고 stellar-core를 다시 개발하기에 이른다.

버려진 프로젝트 스텔라디. https://github.com/stellar/stellard를 잘 보면 INACTIVE라고 되어있다.

여튼간 합의 알고리즘의 결함이 발견되며 사실상 블록체인으로서는 사형선고를 받았던 스텔라는 발생했던 문제를 공개하고 개선된 합의 알고리즘을 제시하며 다시 일어서게 된다. 이 글에서는 개선된 합의 알고리즘에 대해 새롭게 나온 백서를 읽어보고 어떤 내용인지 이야기해보고자 한다. 스탠퍼드 박사 논문을 바탕으로 쓰였다는데 생각보다 되게 어려워서 30%? 정도밖에 이해하지는 못했지만, 스텔라의 합의 알고리즘에 대해 충분히 알게 되었다는 느낌이 들 수 있도록 이야기를 엮어 보자 한다.

백서의 제목은 다음과 같다.
STELLA CONSENSUS PROTOCOL:
A Federated Model for Internet-level Consensus
출처: https://www.stellar.org/papers/stellar-consensus-protocol.pdf
먼저 백서의 내용으로 들어가기 전, 위의 제목에서 'Federated'와 'Internet'이 어떠한 떡밥으로 존재하는지 잠깐 이야기해보고자 한다.

Federate는 '연합하다', '연방을 이루다'라는 뜻인데 스텔라에서는 합의 과정 속에서 각 노드들에게 부여하는 투표의 수가 리소스 오너십에 의해서 결정되는 것이 아니라, 연방 혹은 연합을 이루는 독립적 노드 당 정확히 1표를 부여하겠다는 의미를 뜻하게 된다. 무슨 뜻인고 하니, 비트코인의 POW나 이더리움 캐퍼스의 POS 방식은 합의에 참여하기 위해서는 전자의 경우 연산 능력이, 후자의 경우 담보금이 필요하다. 스텔라는 이러한 리소스 기반의 합의 참여 조건을 걸지 않고, 네트워크에 참여하는 각 노드들이라면, 네트워크에 기여할 수 있는 하나의 시민 노드로 인정하고 1표를 주겠다는 이야기다.

결국 이렇게 각 노드들이 1표씩을 부여받고 각자의 성능과는 상관없이 스텔라의 합의 과정에 참여함으로써 하나의 연방을 이루게 된다. 그리고 'Internet'이라는 말은 곧 이러한 노드들 간의 네트워크는 마치 인터넷처럼 서로 얽히게 될 것을 뜻한다. 굳이 이 단어를 쓴 이유는 우리가 인터넷 망에 연결할 수만 있다면, 다른 모든 인터넷에 연결된 다른 기기에게 연결될 수 있듯이, 스텔라의 프로토콜 또한 스텔라 네트워크에 들어오게 되면 각 노드들 간의 통신이 어떻게든 이루어질 수 있다는 뜻이다. 또한 인터넷 망 자체가 그 필요성에 의해서 자발적으로 성장했듯이, 스텔라 네트워크 또한 인터넷 망처럼 거대해지길 바라는 논문 저자의 희망 또한 담겨있다고 볼 수 있다.

아직 이해가 가지 않는 부분들이 있을 것이라 생각된다. 이에 대해 백서의 흐름에 따라 더 깊이 들어가 보자.
스텔라 네트워크는 FBA라는 합의 방식을 진화시킨 형태이다. FBA는 'federated Byzantine agreement'의 약자로서 'organic growth'에 적합하다는 점 때문에 채택된 듯 보인다. 만약 그렇다면 유기적 성장, 자연스러운 성장이 어떻게 가능하며 어떤 효과를 지니는지에 대한 대답을 해야 한다. 먼저 FBA는 네트워크에 참여할 때에 내가 '믿을' 노드들을 정한다. 그리고 내가 '믿는' 노드들이 특정 장부 업데이트에 대하여 일치할 경우, 그리고 내가 아는 내용들과도 또한 일치할 경우 합의에 도달한 것으로 간주한다. 네트워크에 참여하고 싶다면 내가 믿을 노드들만 정하면 된다. 또한 내가 누군가에게 '믿을만한' 노드가 될 수도 있는 일이다. 서로 유기적인 신뢰의 네트워크를 만들어 간다. 큰 장벽 없이 스텔라가 필요한 자는 이 네트워크에 부담 없이 참여한다. 참여하는 사람이 많을수록 네트워크 내 '믿을 만한' 노드들이 수가 늘어난다. 이러한 연쇄 속에서 강력한 네트워크 효과를 발휘하리라 기대한다. 이것이 FBA를 택한 이유가 아닐까 생각해본다.

스텔라는 다만 FBA를 그대로 채용하지는 않는다. 안전의 이유, 장애 허용의 정도(fault tolerance), 신호 block의 위험 제거를 내세우며 이를 개선한 SCP를 제안한다. '스텔라 컨센서스 프로토콜'이다. 네 가지 강점을 내세우는데, 재밌는 것이 'flexible trust'라는 말을 쓴다. 첫 번째 강점인 'decentralized control'과도 연결되는데, flexible trust는 내가 믿을 노드를 내가 정한다는 것이다. 이를 통해 자발적 주체들로 이루어진 유기적 네트워크가 생기리라 기대한다. 뒤에서 이야기하겠지만 그렇다고 해서 모든 노드들이 완벽히 똑같이 네트워크에 기여하는 것은 아니다. 각자의 노드들이 '믿을 만한' 노드들을 정하기 때문에, 분명 어떤 노드보다 더 믿을 만한 노드가 생기기 마련이며, 일종의 신뢰 권력이 생길 수 있다. 이는 뒤에서 조금 더 이야기하도록 한다.

이어서 문헌 연구 부분이 나오는데 POW에 대한 설명 및 비판으로 시작한다. 결국 블록체인의 핵심이라고 하면 ill-behaved actors, 전체 합의 규칙에 따르지 않는 자들, 잘못된 합의를 일으키는 자들을 어떻게 뿌리 뽑을 수 있는가에 대한 것이다. 사토시는 게임이론을 통해 POW를 만들었고, 같은 문제를 풀고(채굴), 같은 블록체인 포크에 블록을 잇지 않는 경우, 보상을 주지 않음으로써 이를 해결하였다. 마치 다들 정품 유희왕 카드로 게임을 하는 도중에 한 방에 모든 카드를 없애는 짝퉁 유희왕 카드로 게임을 참여하려고 해봤자 다른 이들이 껴주지 않는다는 뜻이다(물론 짝퉁 유희왕 카드의 매력에 빠진 이들이 많아지게 된다면 짝퉁 유희왕 게임을 하는 부류가 생길 것이다. 보통 이런 경우를 하드 포크라고 한다.). POW의 문제점은 너무 많은 리소스의 낭비가 이루어진다는 것이다. 그중 대부분은 전기세일 것이다. 또한 속도 문제가 나오는데, 이는 비트코인에만 해당되는 이유 같아서 크게 설득력 있지는 않았다.

POS의 경우는 앞서 말한 자원의 낭비는 훨씬 덜하지만 'Nothing at stake'의 문제가 있다. 앞의 비유를 이어서 설명해보자면 유희왕 카드가 모두 공짜로 풀려서 정품을 사든 짝퉁을 사든 돈이 들지 않기 때문에 정품도 사고 짝퉁도 일단 사두는 게 카드 플레이어에겐 이득이라는 뜻이다. 즉 채굴 비용이 없어지면서 모든 체인의 포크들에 대하여 동의를 하여 채굴 보상을 받는 것이 앞으로 어떤 포크가 최종 승인을 받을지 애매한 상황에서는 채굴자가 취해야 할 합리적인 행동이라는 뜻이다. 이렇게 되면 채굴자들이 수없이 다양한 합의 결과 모두에 동의를 하게 되고 단순 이중 지불 문제뿐만 아니라 삼중 지불 사중 지불도 가능해지는 한마디로 개판이 된다. 현재는 POS 참여 시 담보금을 맡기게 되고, 이 담보금의 상환에 일정 lock을 걸어둠으로써 해결하고 있다고 한다. 혹은 다른 POS + POW의 형태로 구현되기도 한다고 한다.

이제 깔 거 다 깠으니 마지막으로 이 논문의 주인공인 비잔티움 합의 방식이 나온다. 비잔티움 합의 방식은 리소스 오너십에 대해 합의 방식 참여권을 주는 방식이 아니기 때문에 한 주체가 여러 번 합의에 참여하는 중복 참여를 방지할 수 있어야 그 의미가 있다. 혼동 방지를 위해 여기에서 말하는 합의 방식 참여권이라는 것은 개념 상의 것이지 실제 존재하는 것은 아님을 말해둔다(비트코인의 경우 계산 능력으로서 채굴에 참여해야 하며, POS의 경우 일정량의 담보금을 묶어놔야 채굴에 참여가 가능하다는 의미에서 언급하였다). SCP는 이제 당연히 이렇게 좋은 비잔티움 합의 방식을 어떻게 개선하여 문제를 풀었는지 제시해주어야 한다. 이어 짧게나마 자신의 이복형제인 리플을 까는 것으로 논문 처음 꼭지가 마무리된다.
이 부분부터는 굉장히 이론적이고 뇌세포의 에너지를 많이 잡아먹게 된다. 합의 알고리즘을 연구하는 분들이 아니라면 굳이 100% 이해해야 되나 싶다. 먼저 FBA의 기본적인 개념부터 설명된다. 차례대로 slot, quorum, quorum slice이다.

slot은 장부 업데이트 단위이자 구분자로 여겨진다. 각 슬롯에는 업데이트에 관한 내용들이 있는데 만약 노드 v가 슬롯 i에 대해 그 업데이트 내용인 x를 성공적으로 자신의 장부에 기록하고, 슬롯 i 이전의 슬롯들까지도 모두 적용한 것이 확인된다면 이를 '노드 v가 슬롯 i에 대하여 업데이트 x를 표면화하였다'라고 하기로 정의한다. 마치 골든벨에서 답을 적으면 화이트보드를 머리 위로 들라고 하는 것과 비슷하다. 내가 적용한 업데이트가 완료되면 노드는 자신의 업데이트 사항들을 다른 노드들이 볼 수 있도록 표면화하는 것이다. 그리고 한번 이렇게 표면화된 경우, 각 노드는 그 사항을 변경할 수 없다. 낙장불입인 것이다.

quorum slice는 각 노드들이 믿기로 한 노드들 + 자기 자신을 뜻한다. 마지막으로 quorum은 쿼럼 내 모든 노드들의 쿼럼 슬라이스까지 모두 포함하는 조금 더 큰 노드 집합이다. 쿼럼 내 노드들은 자신들의 쿼럼 슬라이스까지 모두 포함되어 있음을 알기에 쿼럼은 자체적인 하나의 합의에 도달할 수 있다. 따라서 쿼럼 슬라이스는 항상 쿼럼보다 같거나 작다. 예시를 통해 이를 조금 더 명확히 해보자.

1.png

위의 그림에서 Q(v1)은 노드 v1의 쿼럼 슬라이스를 내뱉는 함수이다. v1을 포함하는 쿼럼은 반드시 v1과 v1의 쿼럼 슬라이스 노드들을 모두 포함해야 한다. v1의 쿼럼 슬라이스에 v2, v3가 있는데, v2, v3는 v4 없이 서로를 믿을 수 없음으로 v4를 각자의 쿼럼 슬라이스에 포함시켜야 한다. 따라서 쿼럼의 정의에 의해서 v2, v3의 쿼럼 슬라이스 또한 이에 포함되어야 하기에 v1, v2, v3, v4가 하나의 쿼럼을 이루어야 한다.

약간 느낌상 v4가 재판관 같은 느낌이, v2, v3가 변호사, 검사 같은 느낌이, v1이 피고인 같은 느낌이 들지 않는가? 비유가 좋지 않지만 바로 이어 나오는 내용이 이러한 계층적 구분을 통해 FBA 네트워크의 구조를 설명해준 부분이라 약간의 억지를 부려봤다. 그 형태는 다음과 같다.

2.png

위의 그림과 함께 왜 인터넷이라는 용어를 썼는지에 대한 떡밥이 풀리게 된다. 인터넷의 망구조와 위의 구조를 비유하며 설명한다. 인터넷 라우팅의 경우 공식적이진 않지만 사실상(de facto)의 티어가 존재한다. 인터넷 상 모든 노드들이 아무렇게나 데이터를 주고받게 된다면 내가 이 글을 쓰고 있는 똥컴에 많은 데이터가 우연히 몰릴 경우, 혹은 그런 경우들이 많이 발생할 경우 인터넷 망 자체가 느려지게 된다. 현재는 ISP라는 사실상 탑 티어급 데이터 센터들이 이러한 트래픽 라우팅을 잘 해결해주기 때문에 내 똥컴을 통해 시원시원하게 인터넷 망을 쓸 수 있다. 우리 컴퓨터가 바로 ISP로 연결된 것은 아니다. ISP로 이어지기 전 각 노드의 요청들을 모아주고 보내주는 중간 매개 장치들이 존재하고, 이러한 장치들은 자기네들끼리 연결되어 있기도 하고 직접 ISP에 연결되어있기도 하다. 핵심은 노드에서 발생한 요청이 더 잘 처리할 수 있는 곳으로 흘러가도록 만들다 보니 인터넷 망이 위와 같은 계층적 구조로 발전되었다는 것이다.

스텔라도 마찬가지로 합의를 이루는 것에 있어서 신뢰도를 기반으로 티어를 정의한다. 여기서 나오는 예시는 네트워크 내에서 노드들의 신뢰를 얻어 인정받는 노드들이 탑 티어로서 존재하고, 다른 네트워크의 노드들이 이 노드들의 표면화된 슬롯 업데이트 결정, 즉 투표들을 보고 판단하게 함으로써 전체 네트워크의 합의를 이루게 한다. 각 티어 계층의 노드들은 자신의 티어를 참고할 수도 있고 상위 티어를 참고할 수도 있다. 이 예시에서는 자신을 제외하고는 무조건 상위 티어의 노드 결정을 보도록 해놓았다. 어떤 노드를 믿어야 할지 불안한 경우 이러한 티어 기반의 쿼럼 구성이 도움이 될 수 있다. 내 상위 티어를 믿지 못하는 경우 내 티어의 일부 노드나 더 높은 티어의 노드 혹은 다른 상위 노드에 연결하면 된다. 핵심은 신뢰 티어가 낮은 노드들의 경우 그 노드가 믿는 다른 악의적일 가능성이 있는 노드들의 투표(표면화된 슬롯)보다 상위 신뢰 티어에서 내려온 투표의 중요도를 높이는 것에 있다. 정말 믿을 만한 사람에게 이야기를 들은 사람의 말을 바탕으로 합의를 이루겠다는 목표이다.

또한 이렇게 티어별 구분과 상위 티어에 대한 연결을 통해서 보다 믿을만한 슬롯들이 노드들 사이로 퍼지게 한다. 내가 믿을 만한 노드들이 다운되거나 접속이 되지 않는 경우, 더 믿을 만한 노드 혹은 그런 노드를 믿는 다른 노드들을 믿음으로써 기존에 받아야 했던 신뢰의 양을 회복한다. 하지만 이는 마치 탑 티어 노드들에 집중화된 네트워크처럼 보일 수가 있는데, 탑 티어 노드들이 자주 장애를 내거나, 거짓 합의를 시도하는 것을 발견하면, 노드들이 해당 노드를 더 이상 믿지 않으면 된다. 또한 탑 티어의 경우 상위 티어가 없기 때문에 서로가 서로를 검증하게 되고, 이 과정에서 낙오될 가능성도 있다. 신뢰 티어를 나누는 것은 각 노드에게 부여된 또 다른 투표권이다. 내 합의 사항은 분명 1표를 행사하긴 하지만, 이 1표를 참고하는 노드들의 수가 늘어나면 전체 네트워크 상에서는 이 표의 수가 n배가 되는 형태이다.

하지만 이러한 티어 구조만으로는 문제가 있다. 앞서 말한 쿼럼과 쿼럼 슬라이스의 용어로 이를 살펴보자.

쿼럼 자체는 앞에서 보았듯이 그 자체로서 하나의 합의를 만들어낼 수 있는 단위이다. 문제는 스텔라 네트워크는 참여자가 자의적으로 노드를 선택하기 때문에 쿼럼이 여러 개가 생겨날 수가 있다. 이 이야기는 즉 쿼럼 자체가 하나의 합의를 독립적으로 구성할 수 있기 때문에 쿼럼의 여러 개가 생기면 네트워크 내에 다양한 합의가 발생할 수 있다. 즉 하나의 단일한 합의를 이루지 못하고 체인에 포크가 생기는 것이다. 이는 매우 치명적인 문제로서 이를 해결하기 위해 쿼럼 간의 교집합이 필요하다. 교집합에 속한 노드가 각 쿼럼에서 이루어지는 합의를 하나의 합의가 될 수 있도록 중재해준다.

3.png

위 그림에서 v7이 악의적 행동을 할 경우, 각 쿼럼은 모두 오염된다. 이 쿼럼 자체는 v7 이외에는 다른 쿼럼과의 접점이 아예 없기 때문이다. 만약 이러한 일이 상위 티어에서 일어난다면 이들을 참고하는 하위 모든 티어가 다른 합의를 이루게 된다. 따라서 하나의 노드가 상위 노드를 참고할 때에는 다수를 선택해야 하며 탑 티어의 경우 서로 간의 검증과 더불어 진정 믿을 수 있는지에 대한 네트워크의 지속적 감시를 필요로 하게 된다.

따라서 FBA가 합의 방식에 대해 풀려고 하는 문제는 다음과 같이 정리된다.

모든 노드들의 합의 과정을 서로가 모두에게 공유한다면 해결될 수 있으나, 그것은 비용이 매우 크며 속도가 느리기 때문에 일부의 말만 믿을 수밖에 없다. 따라서 그 일부를 선택하는 것에서 발생할 수 있는 문제들(접속 불가, 악의 행동, 이상 행동)을 정의하고 각 케이스들을 해결하여 이를 전체의 의견을 모두 듣고 결정하는 것과 최대한 같게 만들고 싶다.

여기까지 보게 되면 이제 전체 논문 32페이지 중에 8페이지 정도를 본 것이 된다. 중간의 내용은 SCP가 FBA의 한계점을 극복하기 위해 했던 가정들, 상황들 그리고 이어지는 증명들이다. 이 모든 증명의 전개 과정을 내가 이해하여 멋들어지게 이곳에 적고 싶지만 논문 마지막 부분을 인용하며 넘어가고자 한다.

'SCP can only guarantee safety when nodes choose adequate quorum slices.'

스텔라는 멋진 프로토콜이다. 나는 세 가지 이유에서 그렇게 생각한다.

  • 먼저 스텔라는 금융 소외 계층을 위한 블록체인임을 표방한다. 그리고 난 이것이 사토시의 철학을 계승했다고 생각한다.

  • 스텔라 내부의 어떤 노드도 미리 주어진 특권을 누리지 않는다. 행동으로 증명하고 신뢰받는다.

  • 스텔라 네트워크는 노드가 계속 추가되더라도 에너지 소모가 없다. 노드들은 각자의 몫만 해결하면 된다.

물론 두 번째의 경우 탑티어 노드의 선택을 강요함으로써 훼손된 점이 없지 않지만, 네트워크가 자리 잡고 계속해서 커진다면 해결될 수 있지 않을까 생각해본다. 또한 블록 채굴 보상이 없다는 것이 걸리기는 하지만, 채굴 비용이 크지 않고 스텔라를 사용하기 위해 네트워크에 연결되는 것만으로도 합의 과정에 참여하는 것이 된다면 사실 채굴 보상이 있어야 할까 싶기는 하다. 우리가 인터넷에 연결하기 위해서는 그 인터넷의 일부가 되어야 하는 것처럼 말이다.

여튼간 스텔라의 선전을 빈다.

참고로 고백하자면 난 스텔라 홀더이다.

꺄륵^^

Sort:  

Congratulations @osehyum! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

You made your First Comment

Click here to view your Board
If you no longer want to receive notifications, reply to this comment with the word STOP

Do not miss the last post from @steemitboard:

SteemWhales has officially moved to SteemitBoard Ranking
SteemitBoard - Witness Update

Support SteemitBoard's project! Vote for its witness and get one more award!

Congratulations @osehyum! You received a personal award!

Happy Birthday! - You are on the Steem blockchain for 1 year!

You can view your badges on your Steem Board and compare to others on the Steem Ranking

Vote for @Steemitboard as a witness to get one more award and increased upvotes!

Coin Marketplace

STEEM 0.18
TRX 0.15
JST 0.029
BTC 62108.99
ETH 2429.44
USDT 1.00
SBD 2.64