본문 바로가기

블록체인

[블록체인] Klaytn 클레이튼 블록체인 어플리케이션 만들기 - 이론과 실습

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

https://ide.klaytn.foundation/#optimize=false&runs=200&evmVersion=london&version=soljson-v0.8.7+commit.e28d00a7.js

프론트 개발

  • Node.js
  • NPM
  • 트러플 프레임워크
  • 비쥬얼 스튜디오 코드

abi = 블록체인과 컨틀랙 간의 상호작용을 도와줌