[Solana] Sonala 블록체인 이해와 CLI 사용하기

드림보이즈·2025년 3월 31일

2025 솔라나 해커톤

목록 보기
1/7

목표 : 솔라나 블록체인에 대한 '러프한' 이해와 CLI 사용

이유 : 새로운 블록체인 학습,경험,해커톤 준비!

키워드 : Solana Blockchain, Solana CLI


참고 강의 : https://www.youtube.com/watch?v=cpCPkqtzFAQ&list=PLzUrW5H8-hDdpuzjvjBhZjjnxbAMGnQ0C&t=322s

1. Introduction to Solana

2017년 시작해 2020년 3월 메인넷이 출시되었다.
Rust로 개발되었고, 토큰명은 SOL(Solana는 블록체인을 지칭),
약 1400 Validator가 활동중이다.
블록체인이 탈중앙화 정도를 나타내는 지표인 Nakamoto Coeffient 19에 들어가는 블록체인이다.

솔라나의 정의는
Decentralized Globally Synchronized State Machine

이더리움과 비슷하다.
각 노드가 소프트웨어를 실행하되, 하나의 상태가 바뀌면 모든 노드의 상태가 동기화되어 같은 상태를 유지하는 것이다.

Basic Concept

  • POS
  • 800 True TPS
  • Block-time 0.4sec
  • Time-to-Finality ~ 12sec
  • Mainnet/Devnet/Testnet
  • Nodes : Validators, RPC Nodes

솔라나 트랜잭션에는 두 종류가 있다고 한다.

  • 투표를 하는 Vote TX (True 아님)
  • 투표를 안 하는 Non-Vote TX (== True TX)

투표를 하냐 안하냐에 따라 두 종류로 나뉘고, 투표를 안 하는 트랜잭션을 True Tx라고 한다.
(지금은 이 정도로만 구분을 하라고 한다.)

Devnet은 개발자들이 테스트를 하기 위한,
Testnet은 메인넷에 반영될 수 있는 코어 기능을 테스트하는 네트워크다.

노드도 두 종류가 있는데,

  • Validator : 합의 실행 (블록 생성, 검증)
  • RPC Nodes : Data Broadcasting, Data sync

RPC노드는 전체 네트워크에 데이터(Tx,block)을 전파하는,
이더리움으로 치면 "실행"을 담당하고,
Validator는 실제 블록과 트랜잭션을 검증,생성하는 "합의"와 "실행"을 합친 놈이라고 생각하면 되겠다.

8 Core concepts (러프한 설명)

1. Proof of History

분산시스템에서 시간 동기화를 해결하기 위한 프로토콜이다.
대부분 분산시스템은 각자 시스템(컴퓨터)가 서로 다른 시간을 가지는 것을 감안하고 동작하는데,
솔라나는 이 프로토콜로 모두의 타임스탬프를 통일한다.
특정한 노드가 리더를 맡아서, 일정 시간동안 해시함수를 돌리며 시간을 기록한다.

H0 = SHA256(0)       -> H1
H1 = SHA256(H0)      -> H2
H2 = SHA256(H1)      -> H3
H3 = SHA256(H2)      -> H4
...

이전 시간을 바탕으로 새로운 시간을 계산한다.
이걸 뿌리고, 다른 노드들은 검증만 하면 된다.

  • 트랜잭션 등의 순서를 결정할 수 있다.
  • SHA-256 해시함수를 계산하면서 시간을 기록하고, 모든 노드가 확인할 수 있게 한다.
  • 생성은 오래 걸려도 검증은 빠르다.

'아 ~ 그냥 모든 노드들의 시간을 통일하는 매커니즘이구나, 자세한 건 몰루'

2. Tower BFT

PBFT를 솔라나에 맞게 최적화한 알고리즘이다.

a. PoH 활용
위의 PoH를 활용해 모든 노드가 동일한 시간을 공유하기에, 합의 과정에서 지연 시간, 메시지 교환을 최소화할 수 있다.

b. LockTIme
또한 블록에 투표할 때 잠금 기간을 설정해, 투표를 하면 다음 블록 투표까지 2배의 시간을 기다려야 한다. 이를 통해 블록의 잦은 분기를 방지한다.

'아~ 그냥 PBFT에 PoH랑 LockTime 더한거구나!'

3. Turbine

블록을 빠르게 전파하기 위한 프로토콜
블록을 작은 데이터인 샤드로 분할하고 계층적 구조를 통해 전파.

  • 계층적 데이터 전파
  • Shard 데이터 분할
  • 전체 블록 복구용 샤드 : Reed-Solomon Erasure coding

어려울 거 없다.

'아~ 솔라나는 네트워크가 계층 구조로 이루어져 있고, 전체 블록이 아니라 일부인 Shard를 전송하는구나~'

4. GulfStream

Mempool 대체 프로토콜

이더리움의 멤풀은 트랜잭션들이 실행되기 전에, 메모리의 멤풀에 저장된다.
그리고 블록을 생성할 때 멤풀에서 트랜잭션들을 추출해 집어넣는다.

대신 솔라나는 멤풀이 없고,
블록 생성 노드인 리더 노드들이 미리미리 결정되어있다.
앞으로 누가 블록을 생성할 지 알 수 있다.
이를 통해 리더에게 트랜잭션을 전달할 수 있다.

'아~ 트랜잭션을 멤풀이 아니라 블록 생성자에게 바로 전달하고, 실행시켜버리는구나~'

5. SeaLevel

스마트 컨트랙트를 병렬로 처리할 수 있는 런타임

이더리움의 EVM은 단일 스레드다.
한 트랜잭션 마다 새로운 EVM 인스턴스를 생성해 실행하고,
완료까지 다른 트랜잭션들은 대기한다.
1번에 1개.

Solana는 여러 트랜잭션들을 병렬로 한방에 처리가 가능하단다.

'아~ 컨트랙트 실행을 여러개를 한방에 동시에 처리할 수 있구나~'

6. Pipelining

트랜잭션 처리 과정을 여러 단계로 나누어 각 단계가 동시에 작업 수행.

  1. Data Fetch : NIC 통해 커널에서 들어오는 데이터 수집
  2. Sig Verification : GPU 활용해 트랜잭션 서명 검증
  3. Banking : CPU 사용해 상태 업데이트
  4. Write : 디스크에 기록 후 네트워크 전파

트랜잭션을 불러와서, 실행하고, 저장하는 방식을,
GPU,CPU 등 여러 HW 자원을 활용해서 분산하는 방식이다.

'아~ 트랜잭션 처리를, 여러 HW를 활용해서 빨리 처리 되는구나~'

7. Cloudbreak

상태 관리를 위한 DB 시스템

이더리움의 LevelDB는 병렬 읽기, 쓰기가 안되는 임베디드 너무 간단한 시스템이다.

반면 cloudbreak는

  • memory-mapped-files : 각 파일에 독립적으로 접근 가능 (OS 호출 없이 I/O가
    능)
  • 병렬 읽기 쓰기 지원
  • 확장성 : 디스크 추가함으로써 쉽게 확장 가능

'아~ 빠른 처리가 되는 DB를 쓰는구나~'

8. Archivers (예정)

모든 데이터를 저장하면 비효율적이니,
일부 데이터를 저장하고 필요할 때 받을 수 있는 방식이란다.


2. Solana CLI

다운로드 : https://solana.com/ko/docs/intro/installation

이더리움은 공식 CLI가 없다.
터미널 명령어로 트랜잭션 일으키고, 주소 생성하고 이런게 없다.
노드인 블록체인 클라이언트를 다운받아서, 이 노드를 통해 CLI를 실행한다.

솔라나는 공식 CLI가 있다.
명령어 한줄로 솔라나 블록체인에 트랜잭션 조회, 실행, 계정 생성 등이 가능하다.
개발자 친화력 ㅈ된다.

주요 명령어

강의 해주신 선생님이 명령어는 참 많지만, 이것만 잘 익혀도 대부분 기능 마스터 한거란다.

solana config get

solana config get 

실제 블록체인 노드에 접근해야 블록 조회, 트랜잭션 생성이 될 거 아닌가.
이더리움은 공식 RPC 엔드포인트 같은거 없다.
인프라, 알케미 등 사설 프로바이더 하루에 무료 몇 번 쓰는게 전부인데,
여기는 아예 제공을 해준다 ㄷㄷ.

거기에 계정 키스토어 주소도 적혀있다.

solana config set ~

solana config set -u d
solana config set -u m

디폴트 계정 주소,
RPC 엔드포인트를 메인넷, 테스트넷 등으로 바꿀 수 있다.

solana-keygen new

solana-keygen new
solana-keygen new -o newAddress1.json

new 뒤에 인자 없으면 기본 주소가 생성된다.
만약 이미 기본 주소가 있다면, new 뒤에 파일 이름을 붙여서 구별한다.

solana-keygen pubkey 파일명

solana-keygen pubkey newAddress1.json

기본 계정이 아닌 다른 계정의 address를 반환.

solana address

solana address

기본 주소의 키스토어를 참조해 주소를 반환한다.

solana balance

solana balance

기본 주소의 SOL 보유량 반환.

solana airdrop ~

테스트넷, 데브넷인 경우 꽁으로 SOL을 받을 수 있다 ㄷㄷ.
이더리움은 시발 별 쌩쇼를 다 해야되는데, 사용성 미쳤다.

solana airdrop 100

solana block

solana block

최신 블록에 관한 정보를 반환.

solana block > 파일명.txt

파일에 담을 수도 있다.

밈코인 생성 : spl-token --program-id 토큰종류주소 create-token --enable-metadata

솔라나에서 토큰 생성은, 각각 컨트랙트를 배포하는게 아니라,
이미 솔라나에서 토큰을 위해 2 종류의 주소에 인터페이스를 만들어 놨다.
이를 참고해 토큰을 아주아주 쉽게 생성이 가능하다.
대놓고 밈코인 만들라고 판을 깔아줬구만.

  • token-2022 : TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb

이러면 밈코인을 위한 주소만 생성이 된다.
메타데이터는 따로 집어넣어야 한다.

밈코인 메타데이터 생성 : spl-token initialize-metadata 주소 토큰이름 토큰심볼 이미지 --update-authority 토큰배포자주소

profile
시리즈 클릭하셔서 카테고리 별로 편하게 보세용

0개의 댓글