Scalability 확장성
얼마나 많은 일을 신속히 처리할 수 있는지
비트코인, 이더리움은 확장성 개선중
TPS + Block Interval
Transaction Per Second: 초당 몇 개의 거래 처리
Block Interval: 블록 생성 간격
TPS
Visa: TPS 1700
비트코인: TPS 7
이더리움: TPS 15 ~ 20
Block Interval
비트코인: 10분
이더리움: 15초 ~ 20초
트랜젝션 계산
20 tps + 15초 block interval
20 * 15 = 300 transactions
한 블록에 들어가는 트랜잭션
기존의 블록체인 왜 느린가?
참여하는 노드가 많다고 빨라지지는 않는다.
웹, 모바일은 최대한 빨리 응답하기 위해서 서버 증가 및 분산 처리
블록체인을 구성하는 노드라는 서버는 일을 분산하지 않고 모든 노드들이 똑같은 일을 반복
전체 노드 중 가장 느린 노드로 하향평준화
비트코인&이더리움
- 많은 양의 트랜잭션 처리하기 부족
- 네트워크 자체 속도 느림
Finality
블록이 Final하다는 것은 블록에 담긴 TX(거래)가 바뀔 수 없다는 걸 보증
비트코인&이더리움
트랜잭션은 거래의 완벽한 보증을 제공하지 못함
결국엔 처리가 될 것이라는 확률론적 최종성만 제공 (결제는 했지만, 결제가 안됐을 수 있음)
TX가 변경 불가라는 합리적인 보장받기까지 기다려야되는 시간
빨리 처리된 FInality는 중요한 business 자산
Fork
블록들의 연결이 두 개 이상의 분기로 발생
모든 참여자들이 독립적으로 채굴할 수 있기 때문
비트코인&이더리움 작업증명(PoW) 방식
- 블록체인에 블록 추가하기 위해 문제를 품(Hash 값 찾기)
- 두 개 노드에서 비슷한 시기에 풀면 두개의 블록이 올라가게 됨 → 분기 발생
- 친구에게 송금 → TX POOL → TX을 블록에 담음 → 노드들이 각자 만든 블록을 추가하기 위해 문제를 품 → 두 노드가(A, B) 모두 문제를 풀면 나른 노드들에 전파
- 어떤 노드는 A 노드의 블록을 받고, 어떤 노드는 B노드의 블록을 받음
- Main Chain을 이어받지 못한 노드는 가지고 있던 블록을 버리고 Main Chain부터 다시 시작
Longet Chain Rule
분기되고 자연스럽게 합쳐지는 과정
악의적으로 사용 가능 → 전체 컴퓨팅 파워에 51%를 가지고 있다면 빨리 채굴 가능 → 분기과정에서 내 라인에 계속 이어나가는 것이 가능 → 내 코인을 팔아서 현금화 시켰다는 내용을 블록에 안넣을 수 있음 → 네트워크를 망가뜨릴 가능성
분기를 합칠 때마다 긴 라인 검증 단계 → 시간 소요
합의(Consensus)
클레이튼 블록체인의 합의 알고리즘
- Public 블록체인: PoW, PoS 등
- Private 블록체인: pBFT, Raft 등 → Public 보다 더 효율적
BFT(비잔티움 결함 허용)
- 참여 노드수 제한 / 성능 높임
- 합의 노드수 제한 → 분산화 약화 / 투명성 저하
- 블록체인 혜택을 의미있게 사용하지 못함
클레이튼 합의 알고리즘 IBFT
(이스탐불 비잔티움 결함 허용. Public의 장점과 결합할 수 있다는 믿음으로)
공개를 통한 개인적인 합의 신뢰 모델 채택
- 합의 달성 소수 private 노드
- 외부에서 블록 생성 결과 접근 및 검증 노드
IBFT
propose → pre-prepare → prepare → commit 단계
round robin 방식채택
propose: 매 round 마다 proposer 뽑음. 나머지는 validator(검증자)
pre-prepare: 블록을 만들어서 다른 노드들에 제안
prepare: 검증자 노드들이 자신을 제외한 노드들에게 잘 받았다는 메시지 보냄
commit: propose에서 받은 블록을 수락할 것인지 결정하는 단계. 2/3 이상이 합의되면 블록 승인
장점: 합의 노드들끼리 통신을 통해 합의를 이루내고 즉시 완결성을 가짐
단점: 합의 노드가 많아질수록 통신량이 늘어남. → 합의 노드의 일부만 BFT 형태를 유지하게 설정되어 있음
블록 생성 및 전파
블록 생성 사이클 (cycle)
블록 생성 주기 = 라운드 (round)
*매 라운드는 끝나는 즉시 새로운 라운드가 시작된다.
블록 생성 간격 = 약 1초
제안자와 위원회 선택 (Proposer and Committe Selection)
- 제안자를 무작위 (randomly) & 결정적으로 Governance Council 노드들 중 뽑음
*Governance Council: 코어 셀들의 집합. 합의 노드들
- 각각의 합의 노드가 가장 최근의 블록 헤더에서 파생된 난수를 사용하여 자기가 라운드에 선택됐는지 증명
블록 제안과 검증
- 제안자로 뽑혔다는 증거를 다른 합의 노드들에게 알림
- 이 때 제안자의 공개키를 통해 입증 가능한 암호증명 씀
- 누가 제안자고 위원회인지 파악이 되면 제안자가 블록 만들고 합의
블록 전파
- 블록은 위원회의 2/3 이상의 서명을 받음
- 합의를 이루면 모든 합의 노드들에게 전달이 되고 끝
- 프록시 노드 통해 엔트포인트 노드들에게 전달 됨
네트워크 구조
코어 셀(Core cell)
합의를 담당
사용자가 많아져서 확장이 필요할 때
- 일반적: 서버 늘리고 Request 분할 처리
- 블록체인: 노드를 늘린만큼 모든 노드에게 전달해야 되기 때문에 노드 자체의 성능을 늘림(ram, cpu)
CN(합의 노드) 참여 조건
- Physical core 40 개 이상
- 256GB RAM
- 1년치의 데이터 약 14TB 저장
- 10G 네트워크
- 하나의 노드만 성능이 좋다고 해서 빨리지는 것 아님. 전체가 같은 성능으로 맞춰야 함
서비스 체인
메인넷과 연결된 독립적으로 연결된 블록체인
언제 쓰이나?
- 특별한 노드 환경에서 설정
- 보안 수준 맞춤형으로 설정 (private 블록체인 운영)
- 맣은 처리량 요구/ 메인넷 배포시 경제성 낮음
특정 조건에서만 메인넷과 소통
독립된 서비스 공간을 구축해서 필요할 때 메인넷 신뢰를 고정
Gas 비용 안받게 설정 가능
이더리움과 클리이튼의 차이
이더리움
- 단일 네트워크. 네트워크 구성원 간의 구분이 없다.
- 누구나 블록 생성 가능
- 가장 먼저 블록을 만들고 많이 전파해야 함
- Proof-of-Work (작업증명) 방식
- 마이닝 노드: 블록을 쓰고 네트워크에 전파한 노드
- 마이닝 노드가 누가 될지 모르기 때문에 최대한 많은 노드들에 붙어야 함
클레이튼
- Two Layer Architecture Trust Model
- 매 라운드마다 함의노드들 중 하나가 뽑혀서 블록을 씀
- 최신 정보를 받기 위해선 코어 셀과 붙어야 함
덧셈게임 개발
- 클레이튼 caver.js
- 이더리움 web3.js
- 솔리디티
- 트러플 프레임워크
- IDE
- Wallet
- Scope
계정 생성(테스트)
https://baobab.wallet.klaytn.foundation/
keystore file
다른 사람이 사용하지 못하도록 금고에 넣어 관리
비밀키가 해커로부터 보호가 됨
비밀키
- 트랜잭션에 서명하기 위한 필수적인 존재
- 절대로 외부에 노출되어선 안됨
- 보호를 위해 keyStrore 파일이 존재
- keyStore 파일 + 비밀번호
ide
프론트 개발
- Node.js
- NPM
- 트러플 프레임워크
- 비쥬얼 스튜디오 코드
abi = 블록체인과 컨틀랙 간의 상호작용을 도와줌
'블록체인' 카테고리의 다른 글
[블록체인] 블록체인 이더리움 Dapp 개발에 하드햇과 오픈제펠린 활용하기 (0) | 2022.09.02 |
---|---|
[블록체인] 이더리움 & 솔리디티 기반의 투표 dApp 구현하기 (0) | 2022.09.01 |
[블록체인] 솔리디티(Solidity) 문법 총정리 (0) | 2022.08.30 |
[블록체인] 이더리움 입문 바이블 (0) | 2022.08.29 |
[블록체인] 블록체인과 클레이튼 (0) | 2022.08.28 |