제3자의 개입 없이 모든 사람이 연결될 수 있고, 분산화된 형태로 데이터를 관리할 수 있게 됩니다. 중개자가 없으므로, 각 참여자들은 하나의 합의에 이르러야 이해관계 조정이 가능해지고, 전체의 이익을 대변할 수 있게 됩니다. 이 때 필요한 개념이 거버넌스(Governance)입니다.
클레이튼 블록체인을 구성하고 있는 세부적인 네트워크들과 그 네트워크를 구성하고 있는 각 노드을 먼저 알아야 합니다. 각 노드들이 어떻게 합의에 이르러 블록을 생성하고 보상을 받게 되는지 알 수 있습니다.
클레이튼(Klaytn)
클레이튼(Klaytn)은 2019년 카카오에서 출시한 BFT 기반 public 블록체인 플랫폼입니다. 2019년 6월 27일 메인넷 Cypress를 출시하였습니다. 클레이튼의 간략한 특징을 살펴보면 다음과 같습니다.
- 블록은 매 1초당 생성됩니다.
- 4000 TPS 성능을 가집니다.
- 이더리움 1/10 수준의 가스비가 소요됩니다.
- EVM을 실행하고 Solidity 계약 실행을 지원합니다.
클레이튼(Klaytn) 작동방식
Klaytn은 목적에 따라 Core Cell Network(CCN), Endpoint Node Network(ENN), Service Chain Network(SCN) 3가지 논리적 하위 네트워크로 구분됩니다.
- Core Cell Network : CCN은 엔드포인트 노드(EN)을 통해 제출된 트랜잭션을 확인하고 실행하는 Core Cell(CC)로 구성됩니다. CCN에서는 네트워크 전체에 블록을 생성하고 전파하는 역할을 담당하고 있습니다.
- Endpoint Node Network : 트랜잭션을 생성하고, RPC API 요청을 처리합니다. SCN의 데이터 요청을 처리하는 엔드포인트 노드(EN)으로 구성됩니다.
- Service Chain Network : dApp에 의해 독립적으로 운영되는 보저 블록체인이자, Klatn 서브 네트워크 입니다. Service Chain은 EN을 통해 메인체인에 연결됩니다.
CCN과 ENN은 Klaytn 메인넷을 구성하고 있습니다. 블록체인 앱들은 Cypress(Klaytn 메인넷)에서 실행되거나 Service Chains으로 불리는 자체 블록체인에서 작동합니다. Service Chain에서 블록체인 앱을 실행하는 경우 높은 TPS 성능을 보장받을 수 있습니다.
클레이튼(Klaytn) 구성요소
클레이튼(Klaytn)에는 4가지 노드가 존재합니다.
- Core Cell(CC) : 1개의 합의 노드(Censensus Node, CN)와 2개의 프록시 노드(Proxy Node, PN)로 구성됩니다. 합의 노드(CN)는 블록 생성에 참여하고 프록시 노드는 네트워크에 대한 인터페이스를 제공합니다. PN은 합의 노드에게 트랜잭션 요청을 전송함과 동시에 블록을 엔드포인트 노드(EN)로 전파합니다.
- Enpoint Node(EN) : EN은 RPC API 요청과 Service Chain에서 송수된되는 데이터를 처리합니다. Klaytn 네트워크의 끝에 위치하게 됩니다.
- Bootnode : 새로 가입한 노드가 네트워크 내 연결가능한 다른 노드를 찾아줍니다. CN Bootnode는 CNN내에 위치하며 비공개로 관리됩니다. PN Bootnode와 EN Bootnode는 public한 성질을 가집니다. PN Bootnode는 허용된 PN만 등록하도록 허용하며, 적격한 PN이 EN과 연결되도록 합니다. EN Bootnode는 연결할 PN 정보를 EN에 제공합니다.
클레이튼의 각 노드들은 각각 논리 네트워크를 구성하고 있습니다. 합의 노드(CN)은 합의 노드 네트워크를, 프록시 노드(PN)은 프록시 노드 네트워크(PNN), 엔드포인트 노드(EN)은 엔드포인트 노드 네트워크(ENN)를 구성합니다. Core Cell Network(CCN)은 CNN과 PNN으로 세분화되어 Klaytn의 메인넷을 구성하게 됩니다.
합의 노드 네트워크(Consensus Node Network)
합의노드(CN)은 풀 메시 네트워크인 CNN을 형성합니다. CNN은 WAN(Wide Area Network)를 통해 BFT를 적용하고 각각의 CN이 충분한 성능 수준에서 BFT 합의를 수행하도록 엄격한 하드웨어와 네트워크 리소스 사항을 요구합니다.
프록시 노드 네트워크(Proxy Node Network)
PN은 PNN을 구성합니다. 인접한 코어 셀(CC)의 PN과 하나의 연결을 유지합니다.
엔드포인트 노드 네트워크(Endpoint Node Network)
Klaytn 네트워크의 가장 끝 점에 위치하며 ENN은 서로 연결된 EN 혹은 다수의 PN으로만 구성됩니다.
클레이튼(Klaytn) 블록생성 과정
클레이튼에서의 라운드는 블록 생성 주기를 의미합니다. 각 라운드마다 새로운 블록을 생성하고, 라운드가 종료되는 즉시 다음 라운드가 시작됩니다. 네트워크 트래픽 및 노드 작동 조건마다 상이하지만 각 라운드 별로 1초를 목표로 하고 있습니다.
Kaytn은 즉각적인 최종성을 보장하는 Instanbul BFT 합의 메커니즘을 사용합니다. PBFT의 유효성 검사기 집합은 정적이지만, IBFT는 동적 유효기 검사기 집합으로 기존 PBFT 합의 메커니즘에 비해 빠르게 트랜잭션을 확인하게 됩니다.
① 제안자 + 위원회 선정
각 라운드 별로 Klaytn은 CN(합의 노드) 무작위, 결정론적인 방법을 사용해 생성할 블록의 제안자로 선택합니다. 이후 선택된 CN 그룹을 해당 라운드의 위원회(committee)로 선택하게 됩니다. 선택되는 위원회 규모는 Byzantine 문제를 해결할 만큼의 수가 선택됩니다. 만약 CNN의 수가 작은 경우 모든 CN이 위원회의 위원으로 선출됩니다. 선택되는 CN들은 가장 최근의 블록 헤더에서 파생된 난수를 사용해 랜덤하게 선택됩니다.
② 블록 제안+검증
선택된 제안자 CN은 제안자의 공개키를 사용한 암호증명으로 라운드에 대한 선택 증명을 하고, 모든 CN에 브로드캐스팅합니다. 위원회의 위원 CN들은 자신의 선택증명으로 응답하고 제안할 새 블록을 누구에게 브로드캐스팅할 지를 제안자에게 알립니다. 이제 제안자는 트랜잭션 풀에서 트랜잭션 세트를 선택하고 정렬해서 블록을 생성합니다. 최종적으로 제안자는 위원회와 새로 생성된 블록에 대해 합의를 진행하고 확정하게 됩니다.
③ 라운드 종료
제안된 블록이 성공적으로 종료되면 위원회 구성원의 2/3 이상의 서명을 받습니다. 위원회가 최종적으로 합의에 도달하면 새로운 블록이 모든 CN에 전파되면서 해당 라운드가 종료됩니다. 새로운 블록이 모든 CN에게 전파되면 PNN(프록시 노드 네트워크)를 통해 블록헤더 + 본문 데이터를 ENN(엔드포인트 노드 네트워크)에 전달하게 되고, 새로 생성된 블록의 정보를 모든 클레이튼 네트워크 참여자들이 확인할 수 있게 됩니다.
④ 공개 검증
Klaytn 서비스 제공자와 최종 사용자 모두 블록 생성 결과를 자유롭게 검증할 수 있습니다. 즉, 위원회로 선출된 CN들이 적법하게 블록을 생성했는지를 확인할 수 있는데, 이 때 블록 헤더에 위원회 서명의 2/3이상의 서명이 들어갔는지를 확인하게 됩니다. 따라서 모든 CN은 공개키를 공개적으로 접근 가능한 공간(예를들어 블록 헤더 등)에 게시 해야 합니다.
다중 채널 사용
트랜잭션의 수가 증가함에 따라 메인네트워크의 TPS 성능은 떨어지게 됩니다. 지연시간이 늘어나면 dApp 사용자들의 편의성은 떨어지게 되고, 이 문제를 해결하기 위해 클레이튼에서는 다중 채널 접근 방식을 사용하고 있습니다. 즉 트랜잭션과 블록에 대해 별도 전파 채널을 생성합니다.
만약 트랜잭션이 몰리는 상황에서 트랜잭션과 블록에 별도의 채널을 할당하면서 적시에 새롭게 생성된 블록을 전파할 수 있게 됩니다. 간헐적인 네트워크 트래픽 급증에 따른 최종 사용자에게 응답 지연이 발생하지 않도록 해줍니다.
클레이튼 보상 체계
클레이튼에서 각 라운드 별로 9.6 Klay가 새로 생성됩니다. 블록생성에 네트워크 참여자는 새로 생성된 9.6 Klay와블록을 처리하기 위해 지불된 수수료의 합을 미리 설정된 분배율에 따라 지급받습니다. 블록 생성의 제안자로 선택된 CN은 100%를 받지만 위원회로 선정된 노드들은 아무것도 지급받지 않습니다.
클레이튼에서 제안자로 선정될 확률은 스테이킹한 Klay량에 비례합니다. 즉, 더 많은 Klay를 스테이킹 할 수록 확률적으로 더 많은 보상을 받게 됩니다.
Reference
'Blockchain' 카테고리의 다른 글
[Blockchain] 이더리움 Geth 사용 방법 (0) | 2022.07.05 |
---|---|
[Blockchain] 이더리움 Geth 설치 방법(Ubuntu Docker) (0) | 2022.07.05 |
[Blockchain] 작업증명(PoW) vs 지분증명(PoS) vs 위임지분증명(DPoS) 차이점 (1) | 2022.07.04 |
[Blockchain] 채굴(Mining)이란? (0) | 2022.07.04 |
[Blockchain] 프루닝(Pruning)이란? (0) | 2022.06.29 |
댓글