솔라나를 최초의 웹 스케일 블록체인으로 만드는 7가지 혁신

솔라나의 50,000 TPS 블록체인 네트워크를 가능케하는 기술 혁신 이해하기
솔라나는 2017 년에 설립자 아나톨리 야코벤코가 분산 노드 네트워크가 단일 노드의 성능과 일치하게 하는 방법을 찾았을 때 고안되었습니다. 어떤 주요 블록체인도 이를 구현해내지 못했고, 이를 달성하는 것이 솔라나의 최종 목표입니다.
비트코인 및 이더리움과 같은 작업증명 방식 시스템은 초당 약 10TPS 정도의 처리속도를 가지고 있습니다. Tendermint와 같은 실용적 비잔틴 결함 허용(PBFT) 기반  지분증명(PoS) 시스템은 100 – 200 개의 노드에 약 1,000TPS를 지원합니다. 솔라나는 PBFT와 유사한 PoS 합의 알고리즘 블록체인으로 현재 테스트넷은 200개가 넘는 노드에 50,000 TPS 이상을 지원하므로 세계에서 가장 성능이 뛰어난 블록 체인이자 세계 최초의 웹 스케일분산 네트워크입니다.
퀄컴,인텔, 넷스케이프, 구글 출신 선구적인 기술 전문가들로 구성된 솔라나팀은 회사 설립 이후로 이러한 혁신적인 성능 기준에 맞게 솔라나 네트워크를 구현하는데 필요한 기술을 고안해내는 데 중점을 두었습니다.
솔라나팀은 단일 노드의 성능과 일치하는 무허가형 분산 네트워크를 위한 7 가지 핵심 기술을 개발했습니다:
역사증명 (POH)— 합의 이전의 시계; 타워 비잔틴 장애허용(Tower BFT) – 역사증명으로 최적화된 버전의 프랙티컬 비잔틴 장애허용(PBFT); 터빈 – 블록 확산 프로토콜; 걸프 스트림 – 멤풀이 없는 트랜젝션 전달 프로토콜 씨레벨 – 병렬처리 방식 스마트 컨트렉트 런타임;
클라우드 브레이크 – 수평으로 확장된 계정 데이터베이스; 그리고 복제자 – 분산 원장 저장소 이 글에서는 위 핵심기술에 대해 하나씩 간단하게 설명하겠습니다. 더 자세한 내용을 알고 싶다면 위 링크를 클릭하여 확인해보세요.
역사증명(PoH) 방식  블록 체인 네트워크 전체가 단일 노드의 성능과 일치할 경우, 이는 대역폭이 보틀넥이 아님을 의미합니다. 이를 위해서는 먼저 네트워크의 노드간 통신 방식을 최적화해야합니다.
무선 셀룰러 네트워크는 블록체인 기반 네트워크와 많은 유사한 점이 많으며, 오랫동안 네트워크 통신 최적화에 중점을 두고 있습니다. 네트워크 통신 규모면에서 보면, 단일 라디오 타워에는 (일정량 이상의 사용자가 동시에 접속 시) 각각의 휴대폰이 특정 무선 주파수에서 통신하는데 충분한 대역폭이 없으므로, 통신사들은 동일한 주파수에서 여러 사용자가 모바일 통신을 이용할 수 있도록 하기 위해 다중 액세스 기술이 필요했습니다.
시분할다중접속(TDMA)은 셀룰러 네트워크의 대규모 확장성을 가능케 하는 주요 기술 중 하나입니다. TDMA는 타워가 각 무선 주파수를 타임 슬롯으로 나누고, 이 타임 슬롯을 각 휴대폰에 할당하게 합니다. 이러한 방식으로, 셀 타워는 글로벌한 네트워크용 시계를 제공합니다. 이로써 각 주파수가 다중, 동시 데이터 채널을 지원하게 하고,  동시에 동일한 주파수를 사용하는 다수의 휴대폰이 통신장애를 덜 받게 함으로써 제한된 대역폭이 크게 확장하게 됩니다.
오늘날의 블록 체인 기반 네트워크에는 시계를 어떻게 다루어야 하는지에 관한 문제점이 있는데 바로 새로운 블록이 생성될 때마다 블록체인에 있는 시계가 그 시간을 알립니다. 이더리움의 경우, 15 초마다 한 번씩 발생하며 한개의 블록에 들어갈 수있는 정보는 한정적입니다. TDMA와 비슷한 블록체인 기반 네트워크는 모든 검증 노드가 동의하는 초 미만 단위의 세분성을 가진 시계이므로 트랜잭션을 보다 효율적으로 처리 할 수 ​​있습니다.
솔라나 기술 혁신의 핵심은 역사증명(POH) 방식 알고리즘으로, 합의 이전 단계에 작동하는 어디에서나 사용 가능한 무허가형 시간 소스입니다. POH는 합의 프로토콜도 네트워크 해킹을 차단하는 안티시빌(anti-Sybil) 메커니즘도 아닙니다. PoH는 블록체인 네트워크 내 시계 문제에 대한 해결책입니다.
다른 블록 체인에서는 검증 노드들이 서로 대화하여 시간이 지나갔다는 것에 동의하지만, 솔라나 네트워크에서는 검증 노드가 각자의 시계를 가지고 있고 SHA-256 기반, 순차 해싱 검증지연함수(VDF)로 시간의 흐름을 인코딩하여 그 시계를 유지합니다.  솔라나는 임의성을 위해 VDF를 사용하지 않습니다.  대신, 각 검증 노드는 VDF를 사용하여 자체 시계를 유지 관리합니다. 각 검증 노드가 각자의 시계를 가지고 있기 때문에, 전체 에퍽(리더 활동 시간) 동안 리더 선정 스케줄을 미리 정합니다. 텐더민트와 마찬가지로, 미리 정해진 리더 순서는 수천 블록이 생성되는 동안 지속됩니다. 다만, 텐더민트와는 달리 네트워크는 실패한 노드를 위해 기다리지 않습니다. 각 검증 노드는 VDF를 실행하여 블록과 검증 노드를 전송할 수 있는 차례임을 증명합니다. 블록 생성자(BP)는 블록 생성에 대한 보상을 받기 때문에, 각 검증 노드는 자신의 차례에 블록과 검증인들에 대해 증명함으로써 보상을 받습니다.   역사증명(PoH) 방식에 따라 선출되는 리더는 돌아가면서 하며, 네트워크 컨디션과 관계없이 전체 네트워크에서 계속 리더 노드가 돌아가면서 활동합니다. 이것은 네트워크가 멈추지 않는다는 것을 의미합니다. 솔라나 네트워크에서는 검증 노드가 서로 소통하지 않고도 리더 노드를 교체하기로 결정할 수 있습니다. 이것은 미묘하면서도 심오한 변화입니다. 어떤 블록체인에도 이와 비슷한 메커니즘은 없습니다. 각각의 다른 체인에서 검증 노드는 의사 결정을하기 위해 서로 소통해야합니다. 솔라나에서 리더 교체 결정은 비동기적으로 이루어집니다.
이런 핵심 혁신기술로 인해 스택이 올라갈수록 시스템 최적화 가능성이 열렸습니다. POH는 타임스탬프용 시계를 제공할 뿐만 아니라, 솔라나가 블록타임 (800ms), 블록 확산도(log200 (n)), 처리속도 (50K-80K TPS) 및 원장 저장 공간(페타바이트)과 같이 네트워크를 최적화할 수 있게 합니다.          타워 비잔틴 장애허용(Tower BFT) 역사증명(PoH) 방식과 더불어, 솔라나는 특히 동기화된 시계를 충분히 활용하도록 설계된 프랙티컬 비잔틴 장애허용(PBFT)과 비슷한 합의 알고리즘인 타워 컨센서스(Tower Consensus)를 실행합니다. PBFT와 달리 타워 컨센서스는 일관성보다 생동감을 선호합니다. PBFT와 마찬가지로 노드는 합의에 도달하기 위해 타임아웃을 기하급수적으로 늘리지만, 원장은 신뢰가 필요 없는 시간 소스이므로, 노드는 네트워크에 있는 다른 모든 검증 노드의 타임아웃을 관찰하고 조사 할 수 있습니다. 이해를 돕기 위해 예를 들어 보겠습니다.
당신이 섬에 있고 usb가 담긴 병이 떠다니고 있다고 상상해보십시오. usb 안에는 솔라나 원장이 있습니다. 원장 자체만으로도, 각각의 노드는 존재하는 검증 노드의 수, 검증 노드의 상태 그리고 각 검증 노드가 네트워크의 어떤 블록에 사용한 타임아웃을 계산할 수 있음을 알 수 있습니다. 노드들 사이에 peer-to-peer 메시지가 없어도, 데이터 구조만으로도 검증 노드가 투표할 수 있으며 따라서 네트워크는 합의에 도달할 수 있습니다.
터빈(Turbine) 솔라나 컨센서스 레이어가 peer-to-peer 메시지에 의존하지 않기 때문에, 솔라나는 독립적으로 합의에 도달하는 네트워크에서 블록을 전송하는 방식을 최적화할 수 있습니다. 솔라나의 블록 확산 기술인 터빈은 상당부분 비트토런트에서 영감을 얻었습니다. 한 블록이 전송될 때, 그 블록은 이레이져 코드(erasure code)와 함께 작은 패킷으로 분할되어, 대형 패킷 세트에 흩어지게 됩니다. 팬-아웃(확산된 패킷)이 200 인 경우, 네트워크의 두 번째 합의 레이어는 40,000 개의 검증 노드를 수용할 수 있습니다. 따라서 ,검증 노드는 최종성에 log200 (n)만큼의 영향을 주면서 블록들을 전파할 수 있습니다. 실질적으로, 각 연결이 100ms 인 경우 400ms에서 복제가 이뤄지며,  40,000 개의 노드 네트워크에서는 500ms의 완결성을 달성하게 됩니다.
팬 아웃 메커니즘은 장애(fault)를 극복할 수 있어야 합니다. 따라서, 검증 노드는 리드솔로몬 이레이저 코드 (Reed-Solomon erasure code)를 사용해 데이터를 인코딩하여, 어느 정도의 장애를 허용합니다.
걸프 스트림(Gulf Stream) 고성능 네트워크에서, 멤풀 관리는 다른 체인에서는 다루지 않아도 되었던 새로운 차원의 문제점입니다. 걸프스트림은 트랜잭션 캐싱(caching)을 푸시하고 네트워크 가장자리로 전달하는 기능을 합니다. 모든 검증 노드는 솔라나 아키텍처에서 정해지는 리더의 순서를 알고 있으므로, 클라이언트와 검증 노드는 예상되는 리더에게 트랜잭션을 미리 전달합니다. 이를 통해 검증 노드는 미리 트랜잭션을 실행하고 확정 시간을 단축합니다. 또한 리더를 더 빠르게 전환하고, 확정되지 않은 트랜잭션 풀로 인해 검증 노드에 가해지는 메모리 부담을 줄입니다.
월렛과 같은 클라이언트는 특정 블록 해시값을 참조하는 트랜잭션에 서명합니다. 클라이언트는 네트워크에 의해 완전히 검증된 비교적 최근의 블록 해시값을 선택합니다. 블록은 대략 800ms마다 생성되며, 기하급수적으로 증가하는 타임아웃은 매번 블록이 추가될 때 증가하는 정도가 줄어들어야 합니다. 초기 설정된 타임아웃 곡선에서 보면,  최악의 경우, 최종 확정된 블록 해시값들은 이전에 생성된 32개의 블록에 사용된 것들입니다. 블록타임이 800ms라고 하면, 이는 25.6초에 해당됩니다.
거래가 검증 노드로 전달되면, 검증 노드는 이 거래를 다음 리더 노드 중 하나에게 전달합니다. 클라이언트는 검증 노드의 트랜잭션 확정에 동의할 수 있습니다. 클라이언트는 블록 해시가 제한된 기간 내에 만료되거나 네트워크에서 트랜잭션이 확정된다는 것을 알고 있습니다. 이 때문에 클라이언트는 확실히 실행될 혹은 그렇지 않은 트랜잭션에 서명할 수 있습니다. 네트워크가 롤백 시점을 지나 트랜잭션이 참조하는 블록 해쉬값이 만료되면, 클라이언트는 그 트랜잭션이 유효하지 않으며 체인에서 절대 실행되지 않는다는 것을 보장받게 됩니다.
씨레벨(Sealevel) 솔라나의 고성능 네트워크를 적극 활용하기 위해, GPU 및 SSD에서 수평으로 확장하도록 설계된 하이퍼 병렬 트랜잭션 처리 엔진인 씨레벨(Sealevel)을 구축했습니다. 다른 블록체인은 모두 단일 스레드(single-threaded) 컴퓨터입니다. 솔라나는 단일 샤드에서 서명 확인뿐만 아니라 병렬 트랜잭션 실행을 지원하는 유일한 체인입니다
이 문제에 대한 해결책은 scatter-gather이라 불리우는 운영 체제 드라이버 기술에서 상당부분 착안되었습니다. 트랜잭션은 실행되는 동안 읽고 쓸 상태(state)를 미리 지정합니다. 런타임은 블록에서 발생하는 겹치지 않는 상태 전이 함수를  모두 찾아내어 병렬로 실행할 수 있으며, RAID 0 SSD 나열에서 읽기 및 쓰기가 예약되는 방식을 최적화합니다.
씨레벨 자체는 트랜잭션을 예약하는 가상머신이지만 실제로 가상머신에서 트랜잭션을 실행하지 않습니다. 대신, 씨레벨은 고성능 패킷 필터에 맞게 설계된 버클리 패킷 필터(BPF)라는 업계에서 인증받은 바이트코드를 사용하여 하드웨어에서 실행될 트랜잭션을 전달합니다. 이 바이트코드는 90 년대 초반에 최적화되었으며, 단일 스위치의 40 기가비트 네트워크에서 초당 6천만 개의 패킷을 처리하기 위해 전 세계 수백만 스위치 생산에 배포되었습니다.
엔비디아가 사용 가능한 SIMD 레인 수를 두배로 늘릴 때마다, 네트워크의 계산 용량이 두 배가 됩니다. 사실상, 단일 스레드 컴퓨터로 설계된 다른 모든 블록 체인은 이러한 방식으로 확장 할 수 없습니다.
와즘(WASM)을 대상으로하는 동일한 컴파일러인 LLVM을 사용하여, 솔라나는 개발자들이 C/C++와 러스트 언어로 고성능 스마트 컨트랙트를 개발하여 GPU에서 그 컨트랙트를 실행할 수 있게 하는 많은 툴을 제공하고 있습니다. 솔라나는 와즘을 사용하지 않지만, 개발자는 최소한의 변경만으로 솔라나 컴파일러에서 WASM 컴파일러용으로 작성된 C 및 Rust 코드를 다시 컴파일 할 수 있습니다. 따라서 개발자는 Dfinity, EOS, Polkadot 및 Ethereum 2.0과 같은 다른 주요 WASM 체인에서 응용 프로그램을 쉽게 마이그레이션 할 수 있습니다.
이더리움은 소프트웨어 아키텍처로 인한 버그 이력을 가지고 있습니다. 두 가지 예시 :
델리게이트 콜(Delegate Call)을 통한 다중 패러티 해킹 콜(call)’을 통한 DAO 재진입성 버그 메모리 보호없이 복잡한 소프트웨어를 C로 작성할 수있는 것처럼, 안전한 솔리디티 코드를 작성할 수 있습니다. 그러나 안전하지 않은 활동을 쉽게 추가할수 있지만 이를 감지하기 어렵기 때문에, 복잡한 소프트웨어의 동작을 확인하기란 기하학적으로 더 어렵습니다. 솔라나와 리브라팀은 이 문제를 처음부터 인식하고 각 모듈의 상태(state)를 엄격하게 구분하는 아키텍처를 개발했습니다.
무브 언어는 상위 개념으로 리소스(Resources)와 스크립트(Scripts)를 도입했습니다. 두 가지 모두 솔라나 씨레벨 런타임과 솔라나 기본 프로그램이 어떻게 설계되었는지와 잘 들어맞습니다. 솔라나의 목표는 무브를 제1 레벨 언어로 지원해 리소스가 솔라나 기본 프로그램처럼 작동하게 하는 것입니다. 또한 성능 혹은 보안성을 높은 수준으로 유지하면서 자체 Rust ABI나 Move로 개발할 수 있도록 지원하는 것입니다.
클라우드브레이크(Cloudbreak) — 수평으로 확장된 메모리 단순히 계산 성능을 높이는 것만으로는 충분하지 않습니다. 어카운트를 빠르게 추적하는데 사용되는 메모리는 크기와 액세스 속도 모두에서 병목 현상을 일으킵니다. 예를 들어, 많은 블록체인에 사용되고 있는 로컬 데이터베이스 엔진인 레벨DB는 약 5,000 TPS 이상은 지원할 수 없다는 것이 정설입니다.
단순한 해결책은 글로벌 스테이트을 RAM에서 유지하는 것입니다. 그러나 개인용 장비(개인용 컴퓨터)가 글로벌 스테이트를 저장하기에 충분한 RAM을 갖추고 있을 것으로 기대하는 것은 합리적이지 않습니다. 솔라나의 경우, 클라우드브레이크를 고안했고, 그것은 SSD의 RAID 0 환경설정에서 동시에 읽기 및 쓰기에 최적화된 아키텍처입니다. 각 추가된 디스크는 온체인 프로그램에 사용 가능한 스토리지 용량을 늘릴뿐만 아니라, 실행 시 동시 읽기 및 쓰기 프로그램 수를 증가시킵니다. 트랜잭션 디자인과 결합된 이 아키텍처는 AOT (Ahead Of Time) 트랜잭션 실행을 지원합니다. 검증 노드가 트랜잭션을 관찰하자마자, 씨레벨은 디스크에서 모든 계정을 가져와 실행을 위한 런타임 준비를 시작할 수 있습니다. 검증 노드와 및 블록 생산자는 트랜잭션을 블록에 인코딩하기도 전에 트랜잭션 실행할 수 있고, 이로 인해 블록 시간 및 확정 지연시간을 한층 더 최적화 할 수 있습니다.
복제자(Replicators) 1GBPS에서, 블록체인 네트워크는 원장에 저장되는 데이터로 매년 4 페타바이트의 데이터를 생성합니다. 데이터  저장은 쉽게 주요 중앙화 요소가 되어, 그 과정에서 블록체인 구현의 목적을 저해합니다.
솔라나에서 데이터 스토리지는 검증 노드에서 복제자라고 하는 일련의 노드로 옮깁니다. 복제자 노드는 합의에 참여하지 않습니다. 상태 데이터는 여러 조각으로 나뉘어 이레이져 코딩되고, 복제자 노드들은 상태 데이터의 작은 일부분을 저장합니다. 네트워크는 종종 복제자 노드에게 그들이 저장하기로 했던 데이터를 실제로 저장하고 있는지 증명해 보이도록 요청합니다. 솔라나는 대부분 파일코인(FileCoin)에서 영감을 얻은 복제증명(Proofs of Replication; PoRep) 방식을 활용합니다. 솔라나는 역사증명(합의 이전에 사용되는 시계) 방식을 활용하여 복제증명(PoRep)을 구현하는 방식을 최적화합니다. 합의에 참여하지 않는 복제자 노드는 역사증명(PoH) 방식을 사용하여 원장 데이터의 일부분을 복제하여 분할된 데이터를 증명할 수 있는 방식을 만듭니다. 그 다음, 검증 노드는 GPU를 통해 분산되어 있는 수많은 분할된 데이터를 검증합니다.
복제자 노드는 노트북과 같은 경량 노드일 수도 있습니다. 이레이져 코드(erasure code)와 중복성을 통해 복제자 네트워크는 AWS 또는 GCE가 제공할 수 있는 범위를 능가하는 데이터 가용성을 보장합니다.
요약 이러한 7 가지 주요 혁신의 결과로서 솔라나 네트워크는 지속가능한 초고속 분산 원장 기술입니다. 합의 때문에 속도가 느려지지 않습니다. 게다가, 솔라나 시스템은 데이터 전파를 최적화하고, 병렬 GPU를 집중적으로 활용하여 트랜잭션을 처리하며, 대량 저장된 체인 히스토리(데이터)로 검증 노드가 과부하되지 않도록 합니다. 솔라나의 소프트웨어는 하드웨어가 갖추고 있는 최고의 성능으로 작동할 수 있게 도와주도록 설계되었습니다. 따라서, 솔라나는 본질적으로 대역폭, SSD 및 GPU 코어에 따라 확장됩니다. 솔라나는 이러한 설계를 가진 유일한 블록 체인이며, 이는 전 세계 독립된 200개의 노드로 구성된 네트워크에서 50,000 TPS를 달성한 비결입니다.
솔라나 네트워크를 가능케하는 7 가지 혁신에 대한 자세한 설명은 아래 블로그 게시물을 참조하십시오: 역사증명 (POH)— 합의 이전의 시계; 타워 BFT – 역사증명으로 최적화된 버전의 프랙티컬 비잔틴 장애허용(PBFT); 터빈 – 블록 프로퍼게이션 프로토콜; 걸프스트림 – 멤풀이 없는 트랜젝션 전달 프로토콜 씨레빌 – 스마트 컨트렉트 병렬처리 실행시간; 클라우드브레이크 – 수평으로 확장된 계정 데이터베이스; 그리고 복제자(노드) – 분산 원장 저장소 네트워크 상태 현재 솔라나 테스트넷이 가동 중이고 이는 testnet.solana.com에서 확인할 수 있습니다. 비용 상의 이유로, 적은 수의 노드만 운영하고 있지만, 벤치마킹을 위해 AWS, GCE, Azure 클라우드 인프라에 구축된 데이터 센터 23곳에 흩어져 있는 200개가 넘는 각각의 독립된 노드(서로 하드웨어를 공유하지 않음)를 운영할 수 있도록 준비하고 있습니다.
현재 런타임이 작동 중이며, 개발자들은 이제 테스트나우(testnow)에 코드를 배포할 수 있습니다. 개발자들은 C 언어로 스마트 컨트랙트를 만들 수 있지만,  솔라나는 러스트 툴체인을 적극적으로 개발 중입니다. 러스트는 솔라나 스마트 컨트랙트 개발의 주력 언어가 될 것입니다. 러스트 툴체인은 솔라나 자바스크립트 SDK의 일부로 누구나 사용가능하며, SDK는 더 업그레이드될 겁니다.   솔라나는 곧 코스모스의 게임 오브 스테이크(Game of Stakes)와 유사한 투어 드 솔(Tour de SOL)에서 노드를 운영하는 밸리데이터/검증인에게 인센티브를 제공하는 공개 베타 테스트넷을 출시합니다. 투어 드 솔은 대중들이 솔라나 네트워크의 한계를 테스트하는데 도전하여 토큰도 확보하는 테스트넷 공개 참여 이벤트입니다.