Solana#2

jeongwon·2023년 3월 30일
0

solana

이더리움솔라나
pospos
싱글스레드병렬스레드
30 TPS300-500TPS

검증인

블록체인 상의 기록되는 거래 내역을 검증하는 참여자

  • 블록체인은 누구나 검증인 되어 네트워크 유지 및 관리에 참여할 수 있다.
  • 블록체인에서 노드를 돌린다 라는 표현 -> 검증자로 참여한다.
  • 정확한 데이터인지 검사하고 블록을 등록시키려고 하는 네트워크 참여자들
  • 유효성을 검증하고 블록을 생성한 대가로 보상(코인)을 지급
  1. 트랜잭션 검증 : validator는 블록체인에 기록되기 전에 사용자로부터 전송된 트랜잭션을 검증하고 처리한다.
  2. 블록 생성 및 제안 : validator는 새로운 블록을 생성하고, 블록에 포함된 트랜잭션의 순서를 결정하며, 이를 네트워크에 제안한다.
  3. 보상 수령 : 트랜잭션 수수료와 블록 보상을 통해 소득을 얻는다 -> 이는 네트워크를 유지하고 보안을 강화하는 데 도움이 된다.

😊 staking한 SOL에 비례하여 트랜잭션 유효성 검증, 블록 생성 및 제안

클러스터

솔라나 블록체인의 데이터의 무결성을 유지하기 위해 함께 작동하는 특정 검증인 집합
Testnet, Devnet, Mainnet

explorer

https://explorer.solana.com/

Epoch

솔라나 블록체인의 시간 구분 단위로, 네트워크의 작업을 일정한 구간으로 나누기 위해 사용 -> 약 2일동안 지속

  1. staking 보상 계산 및 지급 : epoch가 끝날 때마다 validator와 위임자들이 해당 epoch에서의 활동에 대한 staking 보상을 받는다. 이는 네트워크 참여자들에게 일정한 주기로 보상을 제공할 수 있다.
    -> 위임자 : 검증자로 참여함으로써 24동안 노드를 관리해야 한다. 최근에는 전문적으로 노드를 관리해 주는 회사 등장, 자신의 자산을 위임하고 staking할 수 있게 한다.
  2. validator 집합 업데이트 : epoch가 종료될 때, 새로운 validator가 선택되거나 기존 validator가 네트워크에서 제외될 수 있다. 이를 통해 네트워크 참여자들이 주기적으로 경쟁력 있는 validator로 변경되는 것을 보장한다.
  3. staking 및 위임 변경 : 사용자는 epoch가 끝나는 시점에서 staking된 토큰이나 위임된 토큰을 조정할 수 있다. 이를 통해 사용자들은 더 나은 수익률이나 다른 목적을 위해 투자 전략을 변경할 수 있다.

slot


예시 ) A가 5% 정도의 지분을 가지면 5% 정도의 블록 생성 권한을 가진다 1부터 n까지 slot을 가질 수 있다

  • 슬롯마다 리더를 설정, 이들은 고유한 타임스탬프를 만듦
  • 나머지 validator들이 만든 과정을 따라 해보며 검증
  • 유효성이 검증되면 최종적으로 블록을 생성함

결과적으로 슬롯마다 블록이 생성되는 것이 원칙이지만, 실제 상황에 따라 슬롯마다 블록이 생성되지 않거나 여러 개의 블록이 동시에 생성되는 포크 상황이 발생
포크상황 : 병렬적으로 블록이 생성 유효성 떨어짐

블록 생성자(리더) 선출

수 많은 validator 중 블록 생성자는 어떻게 생성될까?
-> POS 합의 알고리즘 + POH의 개념 = Tower BFT
1. 스테이킹 : validator와 그들의 지지자들은 솔라나 토큰(SOL)을 스테이킹하여 네트워크에 참여한다. 스테이킹된 토큰은 validator의 보증금 역할을 하며, 그들의 리더 선출 확률에 영향을 준다.
2. 무작위 리더 선출 : 각 슬롯마다 네트워크는 validator 중에서 무작위로 리더를 선출한다. 선출 확률은 validator의 스테이크 비율에 비례하며, 이 과정에서 난수 생성 알고리즘이 사용된다.
3. 블록 제안 : 선출된 리더는 새로운 블록을 생성하고, 네트워크의 다른 validator들에게 제안한다. 이때 POH를 사용하여 블록에 고유한 타임스탬프가 부여된다.
4. 블록 검증 : 네트워크의 다른 validator들은 리더가 제안한 블록을 검증합니다. 검증 과정에는 POH와 Tower BFT합의 알고리즘이 사용 되며, 과반수 이상의 validator가 블록을 승인하면 합의가 이루어 집니다.

cloudbreak

솔라나의 계정 데이터베이스, 계정과 공개키를 매핑한 수평적 데이터베이스

archiver

합의 프로세스에서 떨어져 있으며, 네트워크에서 일정한 간격으로 작은 세션의 상태를 아카이빙하여 필요한 데이터를 규칙적으로 저장하고 있는 지 확인

합의 알고리즘

분산 시스템에서 여러개의 컴퓨터 혹은 노드 간의 동일한 결정을 내리기 위한 알고리즘
예시 ) 랜덤 뽑기, 가장 빠르게 수학 문제를 푼 사람

POW (작업증명)

가장 많은 컴퓨팅 파워를 가진 노드가 블록을 생성할 확률이 높은 합의 알고리즘
(작업 가능량에 비례해서 블록 생성 권한을 부여)

  • 자신의 연산능력(컴퓨팅파워)를 가지고 겨루게 됨
  • 1번 열쇠부터 1,000,000번 열쇠 사이에서, 이 상자를 열 수 있는 열쇠 하나를 찾으세요
    -> GPU연산이 높을 수록
  • 마이너

POS (지분증명)

가지고 있는 암호화페의 지분에 비례하여 참여자가 블록을 생성하는 권한을 부여하는 방식의 합의 알고리즘

  • 자신의 지분을 가지고 겨루게 됨
  • 검증인
powpos
새로운 블록을 생성하기 위해 많은 에너지를 소모작업 증명에 비해 적은 전력을 소비
블록 생성 속도가 느려짐비교적 빠른 블록 생성 속도 유지
분산성과 안전성지분이 많은 소수의 참여자들에게 유리

POH (역사 증명)

두개의 이벤트 사이에 시간이 흘렀다는 것을 증명하여 시간과 순서를 기록함으로써, 빠른 블록 생성 속도를 가능하게 하는 알고리즘
-> 합의 알고리즘은 아니다.

분산화된 환경에서 시간을 맞추는 방법

  • 구글의 spanner
    -> 데이터 센터 간의 동기화된 원자 시계를 사용 (전 세계적으로 동일하게 유지 하기 위한 노력)
  • 서로의 시간으로 찍힌 다양한 데이터들을 서로 신뢰하기 어렵기 때문에 블록체인과 같은 시스템에서 시간에 대한 동기화를 맞추는 것은 매우 어렵다.
    -> 찍히는 시간 자체를 신뢰하기 보다는 특정 메시지가 특정 이벤트들의 이전 혹은 이후에 발생했음을 빠르게 증명 할 수 있게 한다.
    -> 이것이 바로 VDF (고빈도 검증 가능 지연 함수)

VDF

어떠한 사건이 특정 순간에 일어났음을 증명하는 내역을 기록

😊 내가 남산타워를 배경으로 사진을 찍었다는 것은 남산 타워가 나와 사진을 찍는 것 이전 부터 존재 했다는 것을 의미 한다.

해시함수

  • 임의의 길이를 갖는 데이터를 고정된 길이의 데이터로 변환시켜주는 함수
  • 역연산으로 절대 불가능하다.

순차적 전상 저항 해시
솔라나에서 구현한 VDF 함수로, 이전의 출력값이 계속적으로 다음의 입력값으로 들어가는 것

  • 데이터의 해시를 이전에 생성된 상태(state)에 덧붙이는 방법으로, 데이터를 순차적으로 입력하게 된다.
  • 상태, 입력데이터, 그리고 카운터는 모두 기록되며 입력값을 추가하게 되면 앞으로 발생할 모든 미래 출력값은 예측이 불가능하게 됨
  • 데이터 기록은 단일 CPU에 의해 생성되지만, 출력은 병렬처리를 통해 검증할 수 있으므로 매우 빠르게 유효성을 검증할 수 있다.

Tower BFT

솔라나의 궁극적인 합의 알고리즘
1. 시간 순서화 및 동기화 (PoH) | PoH는 해시 연쇄를 사용하여 시간 순서를 증명하며, 이를 통해 벨리데이터들이 트랜잭션 처리와 블록 생성에 대한 동기화를 달성할 수 있다. PoH는 Tower BFT의 핵심 기반이 되어, 높은 처리량과 짧은 지연 시간을 가능하게 한다.

  1. 리더 선출 (PoS) | 슬롯마다 새로운 리더가 무작위로 선출되어 블록을 생성하고 제안하는 역할을 담당한다. 리더 선출 확률은 해당 벨리데이터의 스테이크 비율에 비례한다. 이를 통해 PoS 합의 메커니즘을 활용하여 리더 선출이 이루어지고, 스테이크가 많은 벨리데이터일수록 리더로 선출될
    확률이 높아진다.

  2. 합의 달성 (Tower BFT) | 과반수 이상의 벨리데이터가 블록을 승인하면 합의가 이루어진다. 이 과정에서 Tower BFT 합의 알고리즘이 사용되며, 네트워크 안정성을 확보하고 비잔틴 행위를 방지한다.

tx1,tx2,tx3을 가지고 block을 생성
block을 만들기 위해 timestamp 생성 ( tx data, hash 등등) => block data set
-> timestamp는 leader가 만듦 (POH를 사용)
-> 검증인들이 leader가 과정 검증

block

구성

  1. 블록헤더 : 메타 데이터를 포함한다. 블록번호, 이전 블록의 해시, 타임스탬프 및 노드가 제출한 서명과 같은 정보
  2. 트랜잭션 : 블록에는 하나 이상의 트랜잭션이 포함됩니다. 각 트랜잭션은 블록체인 상태를 변경하는 작업을 수행합니다.
  3. 그 외 데이터들

Turbine

솔라나 블록 전파 프로토콜
예시 ) 네트워크에서 어떻게 대량의 데이터가 많은 피어에게 전파될 수 있을까?
네이버 후드 : 특정 검증인 set을 모아놓은 것

Account

트랜잭션 간의 상태를 저장해야 할 경우 저장하는 방식, 데이터를 저장하는 공간의 개념

  • 프로그램 상태(state)를 저장하고 유지하는 데 사용되는 기본 단위
  • 파일 시스템의 파일과 유사한 역할을 하며, 데이터를 저장하는 데 사용
  • 블록체인 네트워크에 저장되는 분산 형태의 데이터 저장소
  • 고유한 주소인 public key와 함께 생성
  • 개인 계정, program 등 상태를 저장해야 할 경우에는 무조건 account의 개념이 쓰임
    -> 블록체인 상의 rent 개념과 연결

Transaction

솔라나 상의 프로그램 실행, 송수금 등의 명령을 처리하는 단위
1. 하나 이상의 명령어 : 실행할 명령어를 나타냅니다. 하나의 트랜잭션에는 여러 개의 명령어를 포함할 수 있다.
2. 읽거나 쓸 계정의 배열 : 명령어에서 참조하는 계정 목록, 계정은 읽기 전용 또는 읽기/쓰기 권한이 부여될 수 있습니다.
3. 하나 이상의 서명 : 트랜잭션에 대한 서명 목록입니다. 각 서명은 특정 계정의 비밀키로 생성됩니다. 서명은 트랜잭션의 인증을 보장합니다.

서명

트랜잭션의 유효성을 나타내는 암호화된 출력
데이터의 무결성, 인증, 부인 방지를 위한 암호 기술

  • 개인키 -> 디지털 서명을 생성하는 비밀키, 개인키는 보안을 유지 하기 위해 안전한 곳에 보관되어야 합니다.
  • 공개키 -> 디지털 서명의 인증을 검증하는 공개키입니다. 공개키는 대게 개인키와 짝을 이룹니다.

✌ 디지털 서명은 암호화 기술과 수학적 해시 함수를 사용하여 생성됩니다.
데이터의 무결성을 보장하기 위해 디지털 서명은 데이터가 변경 되었는 지 여부를 확인하는 데 사용되며, 인증을 검증하기 위해 사용됩니다. 블록체인에서는 디지털 서명이 매우 중요한 역할을 수행하며 특히 트랜잭션 검증 및 블록 생성 과정에서 사용됩니다.

pipelining (Transaction Processing Unit)

트랜잭션 처리 속도를 효율적으로 하기 위해 CPU 디자인을 토대로 구성한 기능

맵풀(mempool)

네트워크에 제출되었으나 아직 처리되지 않은 트랜잭션 세트

Gulf Stream

네트워크 변방으로 트랜잭션 캐시를 밀어내는 방법

모든 validator들은 다음 리더들을 알고있기 때문에 클라이언트들과 validator들은 트랜잭션들을 예정된 리더에게 앞서 전달 할 수 있습니다. 이렇게 되면 validator들은 다가오는 트랜잭션들을 미리 처리하여 확정까지 걸리는 시간을 줄여주고, 리더의 변경도 더 빠르게 이뤄질 수 있으며, 확인되지 않은 트랜잭션 풀로 인한 메모리 압박에서 벗어날 수 있게 됩니다. 이러한 방법은 불확정적인 리더를 갖는 네트워크에서는 사용할 수 없습니다.

Program

블록체인의 각 트랜잭션 내에서 전송된 명령어를 해석하는 실행 가능한 코드

  • 일반적으로 Rust로 작성
  • 높은 트랜잭션을 위한 병렬 처리
  • 배포해서 Program id생성, 이를 이용해 다른 사용자 혹은 프로그램이 이 프로그램을 호환
  • 스마트 컨트랙트와 같은 기능

스마트 컨트랜트

Onchain Program

스마트 컨트랙트라고 불리는 개념으로, 누구나 상화 작용하고 실행할 수 있도록 블록체인에 직접 배포, 업데이트 할 수 있음

Native Program

다른 온체인 프로그램과 마찬가지로 다른 프로그램/사용자에 의해 호출될 수 있다.
그러나 핵심 블록체인 및 클러스터 업데이트의 일부로만 업그레이드 될 수 있다.
이러한 네이티비 프로그램 업그레이드는 다양한 클러스터에 대한 버전 릴리즈를 통해 제어된다

  • 시스템 프로그램 : 새로운 계정 생성, 토큰 전송
  • BPF 로더 프로그램 : 온체인에서 프로그램을 배포, 업그레이드 및 실행
  • 투표 프로그램 : 검증인의 투표 상태와 보장을 추적하는 계정을 생성하고 관리

PDAs(Program Derived Address)

프로그램간의 호출을 위한, 프로그램 Address(즉 데이터 저장 공간)

😊program id vs PDAs

  • Program id

    • 프로그램 ID는 프로그램의 공개 키로서, 프로그램의 소유자가 소유하고 있는 개인 키와 짝을 이룹니다.
    • 프로그램 ID를 사용하면 사용자와 다른 프로그램이 해당 프로그램과 상호 작용할 수 있습니다. 예를 들어, 트랜잭션에서 어떤 스마트 컨트랙트를 호출할 지 결정하는 데 사용됩니다.
    • 이 주소는 솔라나 블록체인에 배포된 특정 프로그램(스마트 컨트랙트)을 고유하게 식별하는 데 사용됩니다.
  • PDAs

    • PDA는 프로그램이 생성하는 고유 주소로써, 해당 프로그램이 관리할 데이터를 저장하는 데 사용됩니다.
    • PDA는 공개 키와 유사한 32바이트 문자열이지만, 이에 대응하는 개인 키가 존재하지 않습니다. 대신 PDA는 프로그램 ID와 시드를 사용하여 결정적으로 생성됩니다.
    • PDA를 사용하면 프로그램이 자체적으로 주소를 생성하고 해당 주소와 관련된 데이터를 관리할 수 있습니다.

Rent

솔라나 상 Account들이 블록체인에 데이터를 저장하기 위해 지불해야 하는 비용
메인넷에 SOL비용 발생

  • 시간 및 공간 기반의 비용은 솔라나 클러스터가 이 데이터를 적극 유지해야 하므로 계정과 그에 따른 데이터를 블록체인에 유지하기 위해 필요함
  • 모든 솔라나 Account들은 충분한 램포트(lamport)잔액을 유지하여야 렌트 면제가 되어 데이터를 계속 유지 할 수 있음. 만약 충분한 램포트가 없는 경우, 가비지 컬랙션을 통해 네트워크에서 제거됨
  • 2년치 렌트 지불 금액 보다 높은 최소 램포트 잔액을 유지하는 계정은 렌트 면제로 간주되며, 렌트 징수를 받지 않음
  • lamport = 0.000000001 SOL.

Runtime

블록체인에서 프로그램 코드의 실행과 관리를 담당하는 시스템

  • 프로그램 코드를 처리하고 Account를 관리하여 블록체인 상태를 유지
  • 트랜잭션 검증 및 처리, 블록 생성, 새로운 토큰 등의 작업을 수행

Sealevel

스마트 컨트랙트 및 트랜잭션 병렬 처리가 가능한 기능

참고자료
https://velog.io/@gil0127/%EC%8B%B1%EA%B8%80%EC%8A%A4%EB%A0%88%EB%93%9CSingle-thread-vs-%EB%A9%80%ED%8B%B0%EC%8A%A4%EB%A0%88%EB%93%9C-Multi-thread
https://velog.io/@gil0127/%EC%8B%B1%EA%B8%80%EC%8A%A4%EB%A0%88%EB%93%9CSingle-thread-vs-%EB%A9%80%ED%8B%B0%EC%8A%A4%EB%A0%88%EB%93%9C-Multi-thread-t5gv4udj
https://velog.io/@gil0127/JS-%EB%B9%84%EB%8F%99%EA%B8%B0-%ED%95%B5%EC%8B%AC-Event-Loop

profile
jeongwon

0개의 댓글