티스토리 뷰

블록체인/Solana

1. 백서 분석.

김두나무 2022. 6. 24. 17:52

적을 알고 나를 알면 백전백승 아니겠습니까?

 

솔라나는 적은 아니고, 저를 두나무를 이끌어줄 아주 고마운 녀석입니다.

 

Dapp Portpolio가 있다면 많은 도움이 될 것입니다.

 

여기서 Dapp이란 ? 

 

https://site.ieee.org/bcsummitkorea-2018/files/2018/06/D2_DApp-Development-using-loopchain_DHLee.pdf

클릭하면 PDF 문서가 열립니다.

 

라는 정도로만 알고, 넘어 갑니다.

 

EVM에 대해서는 알아 봐야겠습니다.

 

https://www.coindeskkorea.com/news/articleView.html?idxno=28961

 

이더리움 가상 머신 입니다.

 

이더리움의 심장부에는 가상 컴퓨터가 있다. 바로 이더리움 가상머신, 즉 EVM(Ethereum Virtual Machine)이다. EVM은 플랫폼을 이루는 수만 개의 노드에 저장되어 있으며, 이더리움을 구성하는 수많은 토큰과 분산 애플리케이션 댑(dapp), 탈중앙화 자율조직 DAO, 크립토키티의 실행을 책임진다.

출처 : 코인데스크 코리아 (http://www.coindeskkorea.com/news/articleView.html?idxno=28961)

JVM과 비슷한 개념으로 보입니다.

 

Solana Dapp을 만들기에 앞서 이 놈의 개념은 알고 가야 할것 같아 백서를 정독 합니다.

 

official homepage 에서 white paper 영문문서를 보고 작성하고 싶었지만, 찾을수가 없었습니다.

 

그래서 구글링을 통해 친절하게 번역해주신 분의 글을 참조 하였습니다.

 

https://blog.quantro.kr/130

 

솔라나 백서 번역

원문: https://solana.com/solana-whitepaper.pdf 솔라나 : 고성능 블럭체인을 위한 새로운 아키텍처 초록 본 논문은 이벤트 사이의 주문과 시간의 경과를 검증하는 역사 증명(PoH)에 기반한 새로운 블럭체인

blog.quantro.kr

 

초록

본 논문은 이벤트 사이의 주문과 시간의 경과를 검증하는 역사 증명(PoH)에 기반한 새로운 블럭체인 아키텍처를 제안한다. PoH 는 신뢰할 수 없는 시간의 경과를 추가 전용 데이터 구조의 원장으로 인코딩하는 데 사용된다. 작업 증명(PoW)이나 지분 증명(PoS)와 같은 합의 알고리즘과 함께 사용되면 PoH 는 비잔틴 장애 허용 복제 상태 머신에서 메시징 부하를 감소시켜 수 초 내에 처리할 수 있다. 본 논문은 PoH 원장의 시간 유지 속성을 활용하는 두 가지 알고리즘, 즉 모든 크기의 파티션으로부터 복구할 수 있는 PoS 알고리즘과 효율적인 스트리밍 복제 증명(PoRep)을 제안한다. PoRep 와 PoH 의 조합은 시간 순서와 저장에 대한 원장의 위변조를 방지한다. 이 논문은 1Gbps 네트워크와 최신 하드웨어 하에서 초당 710K 트랜잭션까지 처리 가능함을 보인다.

PoS 방식과 PoW 방식은 아시는 분이 꽤 있으실 겁니다.

 

PoS와 PoW는 추 후 개념을 정리하여 포스팅 하겠습니다.

 

또, 생소한 단어인, '비잔틴 장애 허용' 이 보인다.

 

http://wiki.hash.kr/index.php/%EB%B9%84%EC%9E%94%ED%8B%B4_%EC%9E%A5%EC%95%A0_%ED%97%88%EC%9A%A9

 

비잔틴 장애 허용 - 해시넷

비잔틴 장애 허용(BFT; Byzantine Fault Tolerance)이란 장애가 있더라도 전체의 3분의 1을 넘지 않는다면, 시스템이 정상 작동하도록 허용하는 합의 알고리즘이다. 비잔티움 장애 허용이라고도 쓴다. 블

wiki.hash.kr

비잔틴 장애 허용(BFT; Byzantine Fault Tolerance)이란 장애가 있더라도 전체의 3분의 1을 넘지 않는다면, 시스템이 정상 작동하도록 허용하는 합의 알고리즘이다.

 

그리고 PoRep 라는 개념도 알아보자.

 

https://tigercoin.tistory.com/61

 

복제 증명(PoRep), 시공간 증명(PoSt) 그리고 Window PoSt와 Winning PoSt

복제증명 (PoRep) 복제증명은 마이너가 네트워크를 대신해 일부 데이터의 고유한 복사본을 생성했음을 파일코인 네트워크에 증명하는 절차다. PoRep은 파일코인 시스템에서 스토리지 광부가 클라

tigercoin.tistory.com

한글자료가 없어 확실한 개념은 이해가 안되지만, 파일코인의 그것을 차용한 것 같습니다.

 

이 논문은 1Gbps 네트워크와 최신 하드웨어 하에서 초당 710K 트랜잭션까지 처리 가능함을 보인다.

초당 710,000 개의 트랜잭션이면 어느정도의 처리속도 일까?

 

대장 '비트코인' 과 비교해보자.

 

http://koreascience.or.kr/article/CFKO201714956117364.pdf

트랜잭션의 처리 속도는 비트코인은 10MB 블 록의 크기 기준으로 약 7tps 정도이다. 이는 1초 에 7개의 트랜잭션이 수행이 가능하다는 의미이다.페이팔은 115tps이며, VISA는 약 45000tps가 가능하다

논문에 따르면 Solana의 우수성을 확인할수 있다. 

그림 1에서 볼 수 있듯이, 시스템 노드는 언제나 네트워크 전역 읽기 일관성과 검증 가능한 시간 경과를 제공하는 역사 증명 시퀀스를 생성하는 리더로 선출될 수 있다. 리더는 시스템의 다른 노드에서 효율적으로 처리할 수 있도록 사용자 메시지를 시퀀싱하고 순서를 지정하여 처리량을 극대화한다. 램에 저장된 현재 상태에 대해 트랜잭션을 수행하고, 트랜잭션과 최종 상태의 서명을 Verifiers 라 불리는 복제 노드에 발행한다. Verifiers 는 상태 복제본에 대해 동일한 트랜잭션을 실행하고, 검증을 위해 계산된 상태의 서명을 발행한다. 발행된 검증은 합의 알고리즘의 투표 역할을 한다.파티션이 없는 상태에서 네트워크에는 언제나 하나의 리더가 있다. 각 Verifier 노드는 리더와 동일한 하드웨어 성능을 갖추고 리더로 선출될 수 있으며, 이는 PoS 기반 선거를 통해 수행된다.

트랜잭션(거래내역)이 발생하면 리더노드는 검증자(verifiers)들 에게 현재의 원장(장부)을 복제함으로써 동기화 된다.

 

이로써 일관성을 유지하고 악성노드를 막을 수 있다.

 

이 검증자들은 합의 알고리즘에 의해 투표를 받아 리더로 선출 될 수 있다.

 

CAP 이론 관점에서 보면, 부분 결함(Partition)이 발생하면 대부분 일관성(Consistency) 이 가용성(Availability)에 우선한다. 

출처 : https://dongwooklee96.github.io/post/2021/03/26/cap-%EC%9D%B4%EB%A1%A0%EC%9D%B4%EB%9E%80/

 

CAP 이론이란? | 개발자 이동욱

CAP 정리 CAP 정리에 의하면 시스템은 일관성(Consistency), 가용성(Availablity), 분단 허용성(Partition torlerance) 세 가지 속성중에서, 두 가지만 가질 수 있다는 것이다. 위의 그림에서 볼 수 있듯이, Consiste

dongwooklee96.github.io

컴퓨터 클러스터
(영어: computer cluster)는 여러 대의 컴퓨터들이 연결되어 하나의 시스템처럼 동작하는 컴퓨터들의 집합을 말한다. 클러스터의 구성 요소들은 일반적으로 고속의 근거리 통신망으로 연결된다. 서버로 사용되는 노드에는 각각의 
운영 체제가 실행된다. 컴퓨터 클러스터는 저렴한 마이크로프로세서와 고속의 네트워크, 그리고 고성능 분산 컴퓨팅용 소프트웨어들의 조합 결과로 태어났다. 클러스터는 일반적으로 단일 컴퓨터보다 더 뛰어난 성능과 안정성을 제공하며, 비슷한 성능과 안정성을 제공하는 단일 컴퓨터보다 비용 면에서 훨씬 더 효율적이다.
따라서 열 개 안팎의 중소 규모의 클러스터부터 수천 개로 이루어진 대형 슈퍼컴퓨터에 이르기까지 널리 사용되고 있다.

원장의 일관성(노드들의 동기화) 가 가장 중요합니다. 

 

다음으로 Solana의 중요한 개념인 PoH(역사증명)을 보자면,

 

역사 증명은 두 이벤트 사이의 시간 경과를 암호화된 검증 방법을 제공하는 일련의 연산이다. 이는 입력으로부터 출력을 예측할 수 없도록 작성된 암호화된 보안 함수를 사용하며 출력을 생성하기 위해서 완벽하게 실행되어야 한다. 이 함수는 단일 코어에서 순차적으로 실행되는데, 이전의 출력이 현재의 입력이 되고, 주기적으로 현재의 출력과 호출 횟수를 기록한다. 출력은 별도의 코어에서 각 시퀀스 세그먼트를 병렬로 검사함으로써 외부 컴퓨터에 의해 재계산 및 검증이 가능하다. 
이러한 시퀀스에 데이터 또는 일부 데이터의 해시를 함수의 상태에 추가함으로써 데이터는 타임스탬프가 될 수 있다. 상태, 인덱스, 데이터를 시퀀스에 추가될 때 기록함으로써, 데이터가 시퀀스에서 다음 해시가 생성되기 전에 생성되었음을 보장하는 타임스탬프를 제공한다. 또한 이러한 설계는 다수의 생성자가 상태를 다른 시퀀스에 혼합함으로써 서로간에 동기화할 수 있기 때문에 수평 확장도 제공한다.

 

트랜잭션(거래내역) 자체의 생성,이동 등을 기록으로 남겨 악성노드의 거짓증명을 차단하는 방식으로 예상된다.

 

수직 확장
하드웨어를 기준으로 하드웨어의 사양을 늘린다.
램을 추가하고, HDD를 추가하고, CPU를 추가하는 등.
단순하긴 하지만 RAM 뱅크가 꽉 차면 램을 더 꽂을 수 없고, CPU소켓도 한정적이고, 확장에 한계가 있다는 단점과
경우에 따라서는 특정 제조사 전용 장비만 써야 하는 등의 단점이 있다.
어플리케이션을 수정할 필요는 없다는 장점이 있다.
어플리케이션의 수정, 업데이트가 쉽다. (수정 내역을 한곳에만 반영하면 되니까)

수평 확장
기존의 하드웨어는 그대로 두고 장비를 추가하여 소프트웨어적으로 하나처럼 묶는다.
클러스터링 하려는 소프트웨어만 구동할 수 있으면 되기 때문에 하드웨어 종속성이 덜하다.
이론상으로는 무한한 확장이 가능하고,쿠버네티스 같은 오케스트레이션을 이용해
중단 없는 자동 확장도 가능하다.

일반적으로 네트워크로 연결 되므로 네트워크 환경이 좋지 않으면 확장이 불가능하거나,
확장을 해도 원하는 성능을 못 얻는 경우가 있다.
어플리케이션의 수정이 필요한 경우가 많고,어플리케이션의 수정, 업데이트의 경우 
각 노드에 반영해야 하므로 작업량이 늘어난다.

이제 실제 데이터(원장)가 어떻게 암호화 되는지 보자.

sha256, ripemd 과 같이 함수를 실행하지 않으면 출력을 예측할 수 없는 암호화 해시 함수를 이용해서, 임의의 시작 값에서 함수를 실행하고 결과 값을 취해서 동일한 함수의 입력으로 다시 전달한다. 함수를 호출한 횟수와 각 호출의 출력을 기록한다.

'sha256' 은 블록체인의 핵심함수 이다.

 

SHA-256은 SHA(Secure Hash Algorithm) 알고리즘의 한 종류로서 256비트로 구성되며 64자리 문자열을 반환한다. 이름에 내포되어 있듯 2^256 만큼 경우의 수를 만들수 있다. SHA-256 해시 함수는 어떤 길이의 값을 입력하더라도 256비트의 고정된 결과값을 출력한다.일반적으로 입력값이 조금만 변동하여도 출력값이 완전히 달라지기 때문에 출력값을 토대로 입력값을 유추하는 것은 거의 불가능하다.아주 작은 확률로 입력값이 다름에도 불구하고 출력값이 같은 경우가 발생하는데 이것을 충돌이라고 한다. 이러한 충돌의 발생 확률이 낮을수록 좋은 함수라고 평가된다.출력 속도가 빠르다는 장점을 갖고 있다. 또한 단방향성의 성질을 띄고 있는 암호화방법으로 복호화가 불가능하다. -출처 : 해시넷

블록체인을 공부한다면 넘어갈수 없는 개념이다. '해시'를 생성해주는 함수이다.

 

해시(hash)란 다양한 길이를 가진 데이터를 고정된 길이를 가진 데이터로 매핑(mapping)한 값이다. 이를 이용해 특정한 배열의 인덱스나 위치나 위치를 입력하고자 하는 데이터의 값을 이용해 저장하거나 찾을 수 있다. 기존에 사용했던 자료 구조들은 탐색이나 삽입에 선형시간이 걸리기도 했던것에 비해, 해시를 이용하면 즉시 저장하거나 찾고자 하는 위치를 참조할 수 있으므로 더욱 빠른 속도로 처리할 수 있다. 해시값이라고도 한다. -출처 : 해시넷

 

https://www.convertstring.com/ko/Hash/SHA256

 

SHA256 해시 - 온라인 SHA256 해시 생성기

 

www.convertstring.com

위의 사이트에서 생성해 보자.

 

해시를 생성하면 아래의 문자열이 나온다.

 

49BF916CD39D26F5837C71769BF474ED40E71E0A56065672890298EA3DF4D789

 

이제 조금 바꿔서 '박두나무'로 생성해보자.

 

1C236D65942798B0419070D7C5B1A38CE80C1CA6982F18819A2BD2270085C678

 

위의 문자열과 전혀 다른 문자열이 도출된다. 이로서 다른 해시를 통해 유추가 불가하다.

 

ripemd 또한 sha256 과 기능은 동일하다.

 

https://bfotool.com/ko/ripemd-hash-generator

 

'박두나무' 로 하면 마찬가지로 전혀 유추불가능한 다른 해시가 생성된다.

 

해시 함수가 충돌 저항성이 확보만 된다면, 이러한 해시 집합은 단일 컴퓨터 스레드에서 순차적으로 계산할 수밖에 없다. 300번째 해시 값을 알아내는 방법은 시작 위치에서 실제로 300번 계산하는 방법 밖에는 없다는 사실은 이에 비롯한다. 따라서 이러한 데이터 구조에서 0번째 인덱스와 300번째 인덱스 사이의 시간이 지났음을 추론할 수 있다. 

다른 데이터를 입력했을때 같은 값이 나오는 경우는 '충돌' 이다. 이 충돌의 가능성이 매우 낮기 때문에 이 값의 계산은 성능좋은 컴퓨터로도 매우 어렵다. 거의 불가능에 가깝다. 이로서 PoH증명에 따라 시퀀스의 증가에 따른 시간의 흐름을 증명할수 있다.

 

사진 촬영 혹은 임의의 디지털 데이터 생성과 같은 외부 이벤트가 발생했다고 하자, Hash336 은 hash335 의 이진 데이터에 사진의 sha256 을 추가해서 계산된다. 사진의 인덱스와 sha256 은 시퀀스 출력의 일부로 기록된다. 따라서 이러한 시퀀스를 검증하는 사용자는 시퀀스에 이러한 변경을 다시 생성할 수 있다.데이터를 해시 시퀀스에 삽입하면 시퀀스의 모든 후속 값이 변경된다. 사용된 해시 함수가 충돌 저항성이 있을 때 데이터가 추가되면 어떤 데이터가 시퀀스에 통합될지에 대한 사전 지식을 기반으로 미래의 시퀀스를 계산하는 것은 불가능해야 한다.
시퀀스에 혼합되는 데이터는 원시 데이터 자체일 수도 있고, 메타데이터가 포함된 데이터의 해시일 수도 있다.
이 시퀀스를 관찰하는 모든 노드는 모든 이벤트가 삽입된 순서를 결정하고 삽입 간의 실제 시간을 추정할 수 있다.

메타데이터가 포함된 외부이벤트가 발생하면, 기존의 해쉬에 해당 데이터를 추가하는 방식으로 작동합니다.

 

이후 시퀀스의 데이터에도 변화가 생깁니다. 

 

4000개의 코어를 가진 현대의 GPU 처럼 일정 수의 코어가 주어지면, 검증자는 해시와 인덱스의 시퀀스를 4000개의 슬라이스로 분할한 뒤, 시작 해시부터 슬라이스의 마지막 해시까지 각각의 슬라이스가 정확한지 병렬로 검증할 수 있다. 만약 시퀀스를 생성하기 위한 예상 시간이 다음과 같다면:
전체 해시 개수1 코어에 대한 초당 해시 수
 
시퀀스가 정확한지 검증하는 예상시간은 다음과 같다:
전체 해시 개수(1 코어에 대한 초당 해시 수 * 검증에 사용할 수 있는 코어 수)

 

검증자의 컴퓨터는 많은코어수를 가져야 한다.

주어진 생성자 A와 B에서, A는 B(hash1b)로부터 데이터 패킷을 수신하고, 해당 패킷은 생성자 B 의 최종 상태를 포함하며, 최종 상태 생성자 B는 생성자 A 를 관찰한다. 생성자 A의 다음 해시는 생성자 B에 의존하므로 hash1b 는 hash3a 이전에 발생했음을 도출할 수 있다. 이 속성은 이행적(transitive)일 수 있으므로 만약 세 개의 생성자가 단일한 공통 발생기 A ↔ B ↔ C를 통해 동기화되면, A와 C가 직접 동기화되지 않았더라도 종속성을 추적할 수 있다.

어떤 개념인지 잘모르겠네요. 덧글 바랍니다 선생님.

 

두 생성자는 서로간의 출력 상태를 삽입하고 연산을 기록한다. 색상 변화는 피어 데이터에 의해 시퀀스가 수정되었음을 나타낸다. 각 스트림에 혼합되어 생성된 해시는 굵게 강조했다.
동기화는 이행적이다. A와 C 사이에는 B 를 통해 증명 가능한 이벤트의 순서가 존재한다. 
이러한 방식의 확장은 가용성을 희생한다. 가용성이 0.999인 1 gbps 의 10개 연결 시 가용성은 0.99910 = 0.99 이다.

죄송합니다. 모르겠네요..

 

 

 

댓글