타워 비잔틴 장애허용 (Tower BFT) : 솔라나, 프랙티컬 비잔틴 장애허용(PBFT) 고성능 구현

“솔라나를 가장 성능이 뛰어난 블록체인으로 만드는 7 가지 혁신 중 한가지에 대해 이해하기

“솔라나는 세계에서 가장 성능이 뛰어나 무허가형 블록체인입니다. 현재 구동되고 있는 솔라나 테스트넷은 독립적인 200 개의 노드로 구성된 네트워크로, GPU로 실행할 때 50만TPS 이상의 트랜잭션 속도를 지원합니다. 이를 위해서는 여러가지 최적화와 새로운 기술의 구현이 필요하며, 결과적으로 블록체인 개발에서 새로운 차원의 네트워크 역량(보안성, 성능/확장성, 탈중앙화, 호환성, 상호운용성 등)을 보여주는 획기적인 변화를 이끌어낼 것입니다.

솔라나 네트워크를 가능하게하는 7 가지 주요 혁신은 다음과 같습니다:
역사증명(POH)— 합의 이전의 시계;
타워 비잔틴 장애허용(Tower BFT) – 역사증명으로 최적화된 버전의 프랙티컬 비잔틴 장애허용(PBFT);
터빈(Turbine) – 블록 확산 프로토콜;
걸프스트림(Gulf Stream) – 멤풀이 없는 트랜젝션 전달 프로토콜
씨레빌(Sealevel) – 평행 스마트 컨트렉트 런타임;
클라우드브레이크(Cloudbreak) – 수평으로 확장된 계정 데이터베이스; 그리고
복제자(Replicators) – 분산 원장 저장소
“이번 블로그에서는 솔라나 네트워크에 맞춘 프랙티컬 비잔틴 장애허용(PBFT)을 구현하는 타워 비잔틴 장애허용(Tower BFT)에 대해 자세히 알아 보겠습니다. 타워 BFT는 솔라나의 역사증명(PoH)을 합의 이전 단계에서 구현되는 블록체인에 내장된 시계처럼 활용하여 메시징 오버 헤드 및 대기 시간을 줄입니다.

““활발한 네트워크를 구축하기 위해, 복제본은 요청을 실행할 수 없는 경우 새로운 창으로 이동해야합니다. 그러나 최소 2f + 1의 결함이 없는 복제본이 동일한 창에 있다면, 기간을 최대화하고 몇몇 요청된 작업이 실행될 때까지 이러한 기간이 기하 급수적으로 증가하도록하는 것이 중요합니다.”(프랙티컬 비잔틴 장애허용, 미겔 카스트로와 바바라 리스코브).

“솔라나가 구현하는 타워BFT는 PBFT와 비슷하지만 하나의 근본적인 차이점이 있습니다. 역사증명(PoH) 알고리즘은 합의 이전에 글로벌 시간 소스를 제공합니다. 솔라나 네트워크가 PBFT를 구현할 때 PoH를 네트워크에 내장된 시계처럼 사용하고, 복제본이 PBFT에서 사용하는 기하 급수적으로 증가하는 타임아웃을 PoH 알고리즘을 통해 계산하고 적용할 수 있습니다.

PoH는 순차 해시 함수로 구현된 검증가능지연함수(VDF)입니다. 검증에는 (계산 시간/코어 수) 값이 필요하므로, 솔라나 네트워크는 완전한 의미의 VDF를 활용하는 것은 아닙니다. PoH 작동 기본 원리는 다음과 같습니다.
1. Sha256 함수가 최대한 빨리 돌아가면서 각각의 출력값은 다음 입력값이 됩니다.
“2. SHA256 함수의 순환 루프는 샘플링되고, 순환 횟수와 상태값/상태 데이터가 기록됩니다.

“기록된 샘플은 검증 가능한 데이터 구조로서 인코딩된 시간의 경과를 나타냅니다. 또한 이 루프를 사용하여 이벤트 발생 시간을 기록할 수 있습니다.

“1. 샘플을 참조하는 메시지는 샘플 이후에 생성되었음이 보증됩니다.

“2. 메시지는 루프에 들어가고 상태값과 함께 해싱됩니다. 이로써 다음 입력값 이전에 메시지 하나가 생성되었다는 것을 확신할 수 있습니다.

“이러한 데이터 구조는 내부에 포함된 이벤트의 시간과 순서를 모두 보증하며, 이런 핵심 아이디어는 솔라나 네트워크에서 모든 주요한 기술적인 최적화의 근간이 됩니다.

다른 방식으로 말하자면, 당신이 섬에 있고 usb가 담긴 병이 떠다니고 있다고 상상해 보십시요. usb 안에는 S솔라나 원장이 저장되어 있습니다. 원장 자체만으로도, 네트워크에 있는 모든 노드의 상태값을 계산할 수 있습니다. 예를 들어, 원장에 대한 투표가 마지막 X 해시에 기록되지 않은 경우 그 노드는 실패한 것으로 간주됩니다. 마지막 X번의 해싱이 일어나는 동안, 검증 메시지에 서명한 네트워크 노드의 과반수를 해싱하는 경우에는 원장이 유효한 것으로 간주할 수 있습니다.
“1.이 데이터 구조를 검사하는 모든 노드는 p2p 방식의 커뮤니케이션 없이도 정확히 동일한 결과를 계산합니다.

“2. PoH 해시는 독특하게 원장의 포크를 식별합니다; 그리고

“3. 검증 투표 메시지는 투표한 PoH 해시가 원장에 있는 경우에만 유효합니다.

“이는 우리에게 투표와 PBFT를 제공합니다. 원장 자체는 네트워크에 탑재된 믿을만한 시계처럼 작동하므로, 원장 자체에서 PBFT 타임아웃을 인코딩할 수 있습니다.

“1. 투표는 N 해시의 타임아웃로 시작됩니다.

“PoH 해시에 대한 투표가 일단 제출되면, 그 검증 노드는 적어도 N 해시값에 대해 해당 투표의 하위노드가 아닌 어떤 PoH 해시에도 투표하지 않을 것이라는 것을 보증합니다.

“2. 모든 이전의 투표에 대한 타임아웃이 2배가 됩니다.

“보다 효율적으로 운영하기 위해 투표는 특정 해싱 기간에 한정되어 있는데, 이 기간을 슬롯이라고합니다. 슬롯(특정 해싱 기간)의 목표치는 약 400 밀리초를 나타내는 해시값의 수입니다. 400 밀리초 마다 잠재적인 네트워크 롤백 지점이 있지만, 이후의 모든 투표는 해당 투표가 재개되기 전에 네트워크가 정지해야하는 시간을 두배로 늘립니다.

“지난 12초 동안 각 검증 노드가 32번씩 투표했다고 가정합니다. 12초 전의 투표는 이제 2³² 슬롯 또는 약 54 년의 타임아웃을 갖습니다. 사실상, 이 투표는 네트워크에 의해 롤백되지 않을 것입니다. 반면, 가장 최근의 투표는 2 슬롯 또는 약 800ms의 타임아웃을 갖습니다. 새로운 블록이 원장에 추가됨에 따라, 이전 투표들을 진행하는데 주어졌던 슬롯의 수가 매 슬롯 혹은 매 400 밀리초 마다 두 배로 증가하기 때문에 이전 블록들이 점차 더 많이 확정될 겁니다.

“이것은 작업증명의 확률적인 최종성처럼 들릴지 모르지만 그렇지 않습니다. 검증 노드의 2/3가 일부 PoH 해시에 대해 투표하면, 해당 PoH 해시는 정규화되며 롤백할 수 없습니다. 이것이 정규화 개념이 없는 작업증명과 확연하게 다른 점입니다.

“네트워크의 나머지 부분에서 제외당하지 않도록, 각 검증 노드는 동일한 원장에서 네트워크 투표의 과반수 이상이 투표할 때만 투표하도록합니다. 각 검증 노드는 초기 투표의 타임아웃이 5분에서 10분정도의 미리 정해진 임계점을 초과하여 증가할 때 모니터링하고, 네트워크의 과반수가 훨씬 넘는 해당 투표가 포함된 포크에 투표했는지 확인합니다. 실제로 검증 노드는 다음과 같은 일을 합니다:

“1. 10 분의 제한 시간동안 특정 슬롯에 과반수 이상이 투표하였는지 확인하십시오.

“2. 그렇지 않다면 투표하지 마세요.

“그렇다면 실제로 파티션과 타임아웃이 종료되기 시작할 때 네트워크에 어떤 일이 발생합니까?

“1. 만료 된 투표는 지워집니다

“2. 하위 노드의 타임아웃이 초기 투표의 타임아웃과 동일할 때, 초기 투표의 타임아웃은 두​​배가 됩니다.

“예를 들어, 다음과 같은 타임아웃 시나리오를 생각해 보세요.

64, 32, 16, 8, 4, 2
“검증 노드가 17개 슬롯에 대한 투표를 중단하고 다시 투표한 경우 검증 노드의 타임 아웃 결과는 다음과 같습니다.

64, 32, 2
“초기투표의 타임아웃이 두 배가 되기 전에 4번의 연속 투표가 더 필요합니다.

64, 32, 4, 2
64, 32, 8, 4, 2
64, 32, 16, 4, 2
“마지막으로, 4번째 투표가 모든 타임아웃을 두 배로 만듭니다.

128, 64, 32, 16, 8, 4, 2
“이러한 접근 방식으로 인해 과반수 이상이 동일한 원장을 관찰할 때까지 네트워크가 원장을 정지하지 않고도 블록을 지속적으로 스트리밍할 수 있습니다. 또 다른 주목할 점은 네트워크의 모든 참가자가 P2P 커뮤니케이션 없이 다른 모든 참가자의 타임아웃을 계산할 수 있다는 것입니다. 이는 타워 BFT를 비동기적으로 만듭니다.

“우리는 빨리 폐기되는 상당수의 마이크로 포크가있을 것이라 예상합니다. 검증 노드가 여러 개의 포크를 감지하면, 정직한 검증 노드는 모든 포크의 효과적인 스테이크 가중된 타임 아웃을 계산하고 가장 무거운 포크를 선택합니다. 이에 따른 보상은 2³² 타임아웃에 도달한 투표에 대해서만 생성됩니다. 스테이크 가중된 타임 아웃이 가장 많은 포크가 네트워크에 대해 가장 많은 보상을 생성하므로, 검증 노드가 가장 무거운 포크 위에 투표하는 것은 인센티브와 호환됩니다.

“Solana Validators and community : Tour de SOL에 참여하여 토큰을 획득하세요!

“솔라나는 타워 BFT, 복제증명(Proof of Replication), 걸프스트림(Gulf Stream)과 같은 혁신기술과 더불어 역사증명 알고리즘을 구현하여 세계에서 가장 성능이 뛰어난 블록체인을 구축합니다. 솔라나 테스트넷은 현재 가동 중입니다. http://explorer.solana.com/에서 확인할 수 있습니다. 비용 상의 이유로, 적은 수의 노드만 운영하고 있지만, 벤치마킹을 위해 AWS, GCE, Azure 클라우드 인프라에 구축된 데이터 센터 23곳에 흩어져 있는 200개가 넘는 각각의 독립된 노드(서로 하드웨어를 공유하지 않음)를 운영할 수 있도록 준비하고 있습니다.


현재 런타임이 작동 중이며, 개발자들은 이제 테스트나우(testnow)에 코드를 배포할 수 있습니다. 개발자들은 C 언어로 스마트 컨트랙트를 만들 수 있지만, 솔라나팀은 러스트 툴체인을 적극적으로 개발 중입니다. R러스트는 솔라나 스마트 컨트랙트 개발에 있어 가장 중요한 핵심 언어가 될 것입니다. 러스트 툴체인은 솔라나 자바스크립트 SDK의 일부로 모든 개발자들이 사용할 수 있고, SDK는 더 업그레이드될 겁입니다.
솔라나는 투어 드 솔(Tour de SOL)에서 노드를 운영할 검증노드들에게 보상을 주는 공개 베타 테스트넷을 곧 출시할 겁니다. 이는 코스모스의 게임 오브 스테이크(Game of Stakes)와 유사한 이벤트로 대중들이 솔라나 네트워크의 한계를 테스트하는데 도전하여 토큰도 확보하는 테스트넷 공개 참여 이벤트입니다.