
2017년 시작해 2020년 3월 메인넷이 출시되었다.
Rust로 개발되었고, 토큰명은 SOL(Solana는 블록체인을 지칭),
약 1400 Validator가 활동중이다.
블록체인이 탈중앙화 정도를 나타내는 지표인 Nakamoto Coeffient 19에 들어가는 블록체인이다.
솔라나의 정의는
Decentralized Globally Synchronized State Machine
이더리움과 비슷하다.
각 노드가 소프트웨어를 실행하되, 하나의 상태가 바뀌면 모든 노드의 상태가 동기화되어 같은 상태를 유지하는 것이다.
솔라나 트랜잭션에는 두 종류가 있다고 한다.
투표를 하냐 안하냐에 따라 두 종류로 나뉘고, 투표를 안 하는 트랜잭션을 True Tx라고 한다.
(지금은 이 정도로만 구분을 하라고 한다.)
Devnet은 개발자들이 테스트를 하기 위한,
Testnet은 메인넷에 반영될 수 있는 코어 기능을 테스트하는 네트워크다.
노드도 두 종류가 있는데,
RPC노드는 전체 네트워크에 데이터(Tx,block)을 전파하는,
이더리움으로 치면 "실행"을 담당하고,
Validator는 실제 블록과 트랜잭션을 검증,생성하는 "합의"와 "실행"을 합친 놈이라고 생각하면 되겠다.
분산시스템에서 시간 동기화를 해결하기 위한 프로토콜이다.
대부분 분산시스템은 각자 시스템(컴퓨터)가 서로 다른 시간을 가지는 것을 감안하고 동작하는데,
솔라나는 이 프로토콜로 모두의 타임스탬프를 통일한다.
특정한 노드가 리더를 맡아서, 일정 시간동안 해시함수를 돌리며 시간을 기록한다.
H0 = SHA256(0) -> H1
H1 = SHA256(H0) -> H2
H2 = SHA256(H1) -> H3
H3 = SHA256(H2) -> H4
...
이전 시간을 바탕으로 새로운 시간을 계산한다.
이걸 뿌리고, 다른 노드들은 검증만 하면 된다.
'아 ~ 그냥 모든 노드들의 시간을 통일하는 매커니즘이구나, 자세한 건 몰루'
PBFT를 솔라나에 맞게 최적화한 알고리즘이다.
a. PoH 활용
위의 PoH를 활용해 모든 노드가 동일한 시간을 공유하기에, 합의 과정에서 지연 시간, 메시지 교환을 최소화할 수 있다.
b. LockTIme
또한 블록에 투표할 때 잠금 기간을 설정해, 투표를 하면 다음 블록 투표까지 2배의 시간을 기다려야 한다. 이를 통해 블록의 잦은 분기를 방지한다.
'아~ 그냥 PBFT에 PoH랑 LockTime 더한거구나!'
블록을 빠르게 전파하기 위한 프로토콜
블록을 작은 데이터인 샤드로 분할하고 계층적 구조를 통해 전파.
어려울 거 없다.

'아~ 솔라나는 네트워크가 계층 구조로 이루어져 있고, 전체 블록이 아니라 일부인 Shard를 전송하는구나~'
Mempool 대체 프로토콜
이더리움의 멤풀은 트랜잭션들이 실행되기 전에, 메모리의 멤풀에 저장된다.
그리고 블록을 생성할 때 멤풀에서 트랜잭션들을 추출해 집어넣는다.
대신 솔라나는 멤풀이 없고,
블록 생성 노드인 리더 노드들이 미리미리 결정되어있다.
앞으로 누가 블록을 생성할 지 알 수 있다.
이를 통해 리더에게 트랜잭션을 전달할 수 있다.
'아~ 트랜잭션을 멤풀이 아니라 블록 생성자에게 바로 전달하고, 실행시켜버리는구나~'
스마트 컨트랙트를 병렬로 처리할 수 있는 런타임
이더리움의 EVM은 단일 스레드다.
한 트랜잭션 마다 새로운 EVM 인스턴스를 생성해 실행하고,
완료까지 다른 트랜잭션들은 대기한다.
1번에 1개.
Solana는 여러 트랜잭션들을 병렬로 한방에 처리가 가능하단다.
'아~ 컨트랙트 실행을 여러개를 한방에 동시에 처리할 수 있구나~'
트랜잭션 처리 과정을 여러 단계로 나누어 각 단계가 동시에 작업 수행.

트랜잭션을 불러와서, 실행하고, 저장하는 방식을,
GPU,CPU 등 여러 HW 자원을 활용해서 분산하는 방식이다.
'아~ 트랜잭션 처리를, 여러 HW를 활용해서 빨리 처리 되는구나~'
상태 관리를 위한 DB 시스템
이더리움의 LevelDB는 병렬 읽기, 쓰기가 안되는 임베디드 너무 간단한 시스템이다.
반면 cloudbreak는
'아~ 빠른 처리가 되는 DB를 쓰는구나~'
모든 데이터를 저장하면 비효율적이니,
일부 데이터를 저장하고 필요할 때 받을 수 있는 방식이란다.
다운로드 : https://solana.com/ko/docs/intro/installation
이더리움은 공식 CLI가 없다.
터미널 명령어로 트랜잭션 일으키고, 주소 생성하고 이런게 없다.
노드인 블록체인 클라이언트를 다운받아서, 이 노드를 통해 CLI를 실행한다.
솔라나는 공식 CLI가 있다.
명령어 한줄로 솔라나 블록체인에 트랜잭션 조회, 실행, 계정 생성 등이 가능하다.
개발자 친화력 ㅈ된다.
강의 해주신 선생님이 명령어는 참 많지만, 이것만 잘 익혀도 대부분 기능 마스터 한거란다.
solana config get

실제 블록체인 노드에 접근해야 블록 조회, 트랜잭션 생성이 될 거 아닌가.
이더리움은 공식 RPC 엔드포인트 같은거 없다.
인프라, 알케미 등 사설 프로바이더 하루에 무료 몇 번 쓰는게 전부인데,
여기는 아예 제공을 해준다 ㄷㄷ.
거기에 계정 키스토어 주소도 적혀있다.
solana config set -u d
solana config set -u m
디폴트 계정 주소,
RPC 엔드포인트를 메인넷, 테스트넷 등으로 바꿀 수 있다.
solana-keygen new
solana-keygen new -o newAddress1.json
new 뒤에 인자 없으면 기본 주소가 생성된다.
만약 이미 기본 주소가 있다면, new 뒤에 파일 이름을 붙여서 구별한다.

solana-keygen pubkey newAddress1.json
기본 계정이 아닌 다른 계정의 address를 반환.

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

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

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

solana block
최신 블록에 관한 정보를 반환.
solana block > 파일명.txt
파일에 담을 수도 있다.

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

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