Proof-of-History | 솔라나의 역사 증명

scalalang2
CURG
Published in
10 min readDec 15, 2021

솔라나는 2021년, 혜성처럼 암호화폐 씬에서 엄청난 성장을 이룬 블록체인이다. 솔라나는 퀄컴에서 개발자로 일하던 아나톨리 야코벤코(Anatoly Yakovenko)에 의해 2017년에 의해 백서로 제안되었다.

솔라나의 주장(?)에 따르면 솔라나는 1초에 50,000 TPS를 처리할 수 있는 첫 번째 웹 스케일의 블록체인이라고 한다. 이번 글에서는 솔라나가 이런 엄청난 TPS를 달성할 수 있었던 핵심 기술이라는 역사 증명 (Proof-of-History)을 알아 볼 것이다.

시작하기에 앞서,

개인적으로 이 글을 쓰고 있는 필자는 블록체인 씬에 한 가지 피곤함을 가지고 있었다. 한 2–3년 전부터 지금까지도 자기들이 이더리움 킬러라고 주장하며 몇십만 TPS는 우습게 달성했다는 블록체인들이 나타나고, 흔적도 없이 사라지기를 반복했다. 그들이 높은 TPS를 달성한 내용을 보면 블록체인에서 탈중앙성을 포기하고 성능만을 높인 접근법이 많이 소개되었다.

클레이튼, 테라, 바이낸스 체인, 트론 등 세기 힘들 정도로 많은 블록체인들이 합의 알고리즘의 이름만 바꿔가면서 X-증명(Proof-of-X) 시리즈를 늘어놓으면서 기술적인 진보를 이루었다고 주장한다. 물론 비즈니스 관점에서는 이러한 사실이 크게 중요하지 않을 수 있지만 연구자 입장에서는 상당한 시간을 할애해서 백서를 보고 나면 연구에 그다지 도움이 되지 않는다는 걸 깨닫고 상당히 허탈하지 않을 수 없다.

그래서, 필자는 연구로 학회에 제출되지 않은 기술적 내용은 전부 코인값을 올리기 위한 마케팅 문구로 치부하고 쳐다도 안보고 있었는데 솔라나는 너무 눈부신 성장을 한탓에 필자의 이목을 끌었고 이렇게까지 성장했는데 솔라나의 기술적 문구를 마케팅 용어로 치부하기에는 내가 너무 편협한 시각을 가지고 있었던 것은 아닐까 싶어서 솔라나의 백서[1]와 공식 문서[2]를 다시금 보게 되었다. 이를 보고 나서 느낀 감정은 아니나 다를까, 솔라나에 매우 실망하게 되었다.

주의사항
본 글에서 주장하는 모든 내용은 필자 개인 생각일 뿐 CURG나 디사이퍼의 의견을 반영하지 않습니다. 처음부터 색안경을 끼고 본 백서이기 때문에 틀린 내용과 올바르지 않은 의견일 수 있습니다. 다른 의견이 있다면 댓글로 남겨주세요 : )

역사 증명 (PoH: Proof-of-History)

솔라나의 백서에 따르면 역사 증명이란 두 개의 이벤트 사이에 시간이 흘렀다는 것을 증명하는 암호학적 방법이다. 만약 여러분이 어느날 J신문사와 인터뷰했다면 J신문사의 창립일은 인터뷰일보다는 반드시 앞섬이 증명된다. 역사 증명을 실행하는 방법은 매우 간단하다.

우선 암호학점 해시 함수 (Hash Function)을 이용하면, 우리는 실제로 해시 함수를 실행하기 전에는 값을 예측할 수 없다. 그리고 해시 함수의 인자값으로 과거에 발생했던 해시를 입력하면 hash1은 hash2이전에 존재했음이 증명된다. 아래 [그림 1]은 대략적인 PoH 시퀀스를 보여준다.

[그림 1] 간소화된 버전의 PoH Sequence.

처음 이 이야기를 듣고 나서는 한가지 물음표가 머릿속을 맴돌았다. “아니 이거 그냥 블록체인 아니야?” 그리곤 “아니야 뭔가 더 있겠지 계속 읽어보자” 하면서 계속 백서를 읽어나갔다. 솔라나에서는 이런 이전 해시를 다음 해시로 넘기는 과정을 체인이라 부르지 않고 시퀀스(Sequence)라고 부른다.

검증가능한 지연 함수 (VDF: Verifiable Delay Function)

역사 증명은 그 자체로 검증가능한 지연 함수 (VDF)[4]가 된다. VDF의 자세한 이야기는 디사이퍼의 글[3]에 잘 소개되어 있으니 참고하길 바란다. 여기서는 간단히 정의만 하자면 다음 속성을 가져야 함을 말한다.

  • 특정 값을 계산하는데는 시간이 매우 오래걸려야 한다.
    (생성은 느리다)
  • 특정 값이 올바른 연산인지 확인하는데는 매우 짧은 시간이 걸려야 한다. (검증은 빠르다)

VDF를 저술한 저자들은 VDF를 만드는 방법으로 Permutation polynomial를 이용한다. 기본적인 아이디어는 f(x) = c 를 만족하는 유일한 해 x를 가지는 함수 f를 만드는 것이다. 이러한 함수를 만드일은 매우 느리지만 함수가 만들어지면 이를 계산해서 x로부터 c를 도출하는 일은 쉬운 일이 될 것이다.

VDF의 저자들은 값을 만드는 시간과 검증에 걸리는 시간 간격을 매우 크게 만들기 위해서 이런 시도를 했는데, 솔라나에서는 이를 단순하게 시간 간격이 ‘존재’하기만 하면 되는 것으로 생각했던 것 같다. 솔라나에서는 다음과 같은 방법으로 VDF를 구현했다고 주장한다.

이러한 주장은 VDF라는 개념이 나온 후에 나타난다.[5] 솔라나 백서 공개 시기는 2017년이고 VDF논문이 발표된 시점은 2018년이다.

① 사건에 시간 기입하기

sha256 해시 함수를 통해 이전 해시를 기입해서 다음 해시를 만드는 방법으로 우리는 시간을 증명할 수 있음을 보았다. 이제 해시 함수 파라미터에 특정 데이터를 입력하는 방법으로 특정 사건(Event)에 시간을 기입할 수 있다.

아래 [그림 2]를 보면 sequence를 생성할 때 이전 해시값과 더불어 특정 데이터의 해시까지 같이 기입하는 것을 알 수 있다. photograph1.sha256과 hash335를 기입하였고 시퀀스가 계속 이어지다가 has559와 photograph2.sha256값을 같이 기입하여 hash600을 생성했다. 이런 속성은 photograph2의 사진이 photograph1 이후에 찍혔음을 증명한다.

[그림 2] Proof-of-History Sequence With 2 Events

블록체인과 동일하게 임의의 시퀀스 번호에서 데이터를 변조하는 것은 결과인 hash값을 변형시키기 때문에 연쇄적으로 다음 PoH 시퀀스를 전부 invalidate한 것으로 만든다. 따라서, 한 번 기록된 사건은 조작되지 못한다.

[그림 3] PoH 시퀀스에 임의의 데이터를 입력한 그림

② 역사 증명 검증

역사 증명 시퀀스는 멀티 코어 컴퓨터에서 시퀀스를 생성하는 것보다는 훨씬 빠르게 검증 가능하다. 단순히 해시 연산을 수행해서 다음 해시가 올바른지만 검증하면 되기 때문에 시퀀스를 분할해서 멀티 코어로 병렬 처리가 가능하다. [그림 4]에서 이를 검증하는 과정을 보여준다.

[그림 4] 역사 증명을 멀티 코어로 검증하기

단순, 해시 연산을 통해서 검증이 가능하기 때문에 해시레이트를 사용해서 이를 단순하게 증명할 수 있다. 우선, 시퀀스를 만드는 일은 싱글 코어에서만 가능하기 때문에 Total number of hashes 만큼의 연산이 든다. 이를 검증하는 것은 작업을 쪼개서 각 코어에서 처리하면 되므로 한 코어의 해시레이트와 사용 가능한 코어수를 곱해서 나누면 된다.

[그림 5] 전체 시퀀스를 검증하는데 드는 예상 소요 시간

이를 종합하자면, 시퀀스를 만드는 것은 오로지 싱글 코어에서만 가능하고 이를 검증하는 것은 멀티 코어로 가능하다. 즉, PoH가 가지는 특징이 VDF의 속성과 일치하므로 솔라나의 설계자는 자신의 미디엄 글[5]에서 PoH를 High-Frequency VDF 라고 정의했다.

PoH를 High-Frequency Verifiable Delay Function 이라는 학계 용어를 붙이면서 몇 가지 비판을 받았는지 공식 도큐먼트에서는 실제 VDF를 설계한 학자들은 솔라나의 PoH를 VDF라고 인정하지 않을 것 같다면서 한 발 물러서는 모습을 보였다..

but if you asked the authors of the paper cited above, they might tell you (and have) that Solana’s approach is algorithmically slow and it shouldn’t be called a VDF. We argue the term VDF should represent the category of verifiable delay functions and not just the subset with certain performance characteristics. Until that’s resolved, Solana will likely continue using the term PoH for its application-specific VDF.

우선, 백서를 통해 여기까지 읽고나서 든 생각은 그냥 블록체인 구조인데 새롭게 역사 증명이라는 용어를 사용했어야 하는 의문이 들었다. 또한, 보통 작업 증명(Proof-of-Work)과 지분 증명(Proof-of-Stake)과 같이 블록체인에서 ‘증명’ 이라고 부를 때는 네트워크 상에 노드 간 분산 장부를 합의하는 알고리즘에 붙이는 경우가 많은 반면에

역사-증명은 자료 구조의 한 부분일 뿐 합의 알고리즘이 아님에도 증명이라는 이름이 붙어서 오해의 소지를 불러일으키기 쉽다는 생각이 들었고 솔라나는 실제로 합의할 때는 지분 증명을 이용한다. 마지막으로, 역사 증명을 사용해서 블록체인의 성능을 높였다고 하는데 실제로 역사 증명이 꼭 필요했는지에 대해서는 의문이 든다.

그 이유는, 솔라나의 검증인이 되기 위해서는 기본 장비 스펙이 이더리움에서 요구하는 최소 요구사항보다 월등히 높기 때문이다. 이더리움 재단에서 공식적으로 지원하는 이더리움 노드의 최소 요구사항[6]은 CPU 2 코어, 4GB RAM, 320GB의 저장장치에 네트워크 대역폭은 25MB/s인데 솔라나의 검증인이 되는 최소 요구사항[7]은 CPU 12 코어에 24+ 스레드, 128 GB RAM (??), Gen3 x4 NVMe SSD 그리고 GPU가 장착되어 있기를 권장하며 네트워크 대역폭은 최소 300MB/s+에 1GB/s를 선호한다고 하는데 애초에 요구하는 스펙 자체가 월등히 높다. 솔라나의 이런 장비를 갖추려면 집에서 하는 것은 절대 안되고 AWS 클라우드 위에 서버급 스펙을 달아야 하기 때문에 애초에 성능이 빠를 수 밖에 없고 성능을 위해 탈중앙성을 포기한 케이스이다.

탈중앙성 (Decentralization)에 중요 원칙 중 하나인 누구나 참여 가능해야 한다는 원칙은 permisionless만을 지칭하는 하지 않고 현실적으로 참여 가능한 정도를 포함하고 있다.

솔라나가 이렇게 높은 스펙을 요구한 이유는 무어의 법칙에 의존하고 있다. 하드웨어 성능이 매년 2배씩 증가할 것이기 때문에 언젠가 이정도 성능은 스마트폰에서도 낼 수 있을 것이라는 일반적인 믿음이다.

결론

필자가 좁은 시각으로 솔라나를 쉽게 해석해서 내린 판단일 수도 있지만, 솔라나 또한 다른 블록체인 사업자들과 마찬가지로 특별히 기술적 진보를 이뤘다고 보여지진 않고 기술 용어를 단순히 마케팅 용으로 사용했다는 느낌이 강하게 든다. 솔라나의 8가지 혁신이라는 글에서 자신들이 개발한 알고리즘에 역사-증명, 타워 BFT, 터빈, 걸프 스트림 등 여러가지 이름들을 붙였지만 정작 학계 논문으로 발표된 점은 없다는게 아쉬웠다.

개인적으로, 블록체인 업계에서 기술적 진보에 대한 노력은 뒤로 접어두고 코인 장사를 하는 사업자들이 많아질까봐 걱정이 된다. Web 3.0과 같이 비전은 항상 높게 제시하고 있지만 이를 구현하기 위한 기술적인 노력을 하는 곳이 점점 더 줄어드는 것 같다. 처음 비트코인이라는 분산 시스템을 공부했을 때 사토시 나카모토라는 익명의 개발자가 남긴 논문을 보면서 흥미와 함께 낭만을 느꼈는데 다시금 이를 느끼게 해줄 기술이 탄생하길 기대한다.

레퍼런스

[1] Solana: A new architecture for a high performance blockchain v0.8.13
[2] Solana: Docs
[3] Brief Overview of Verifiable Delay Function
[4] Verifiable Delay Function
[5] Proof of History: A Clock for Blockchain
[6] Ethhub — Geth

--

--

scalalang2
CURG
Writer for

평범한 프로그래머입니다. 취미 논문 찾아보기, 코딩 컨테스트, 언리얼 엔진 등 / Twitter @scalalang2 / AtCoder @scalalang