- PoS는 토큰을 많이 소지하고 있으면 중앙화의 위험이 있다.
이같은 이유 떄문에 보통의 코인들은 PoW로 시작하여
토큰이 고르게 분배되면 PoS로 전환하는 방법을 채택한다.
- 하지만 클레이튼은 BFT를 채택했다.
이유는 간단히 말하면 "빨라서" 이다.
하지만 BFT는 확장성의 문제가 있다.
클레이튼은 이 문제를 해결했다.
- 클레이튼은 N개의 노트 가운데 S개의 부분 노드 집합을 확률적으로 선택한다.
Committe(부분집합) 선택은 VRF(verifiable random function)으로 구해진 무작위 값에 기반한다.
매 블록마다 새 Committe를 뽑아 BFT를 실행하여 확장성을 개선했다.
- 블록체인 상태
- 블록체인은 트랜잭션으로 변화하는 State Machine이다.
(컴파일러 개론의 FSA를 생각하면 이해하기 쉽다)
아래 예시를 보자.
- 예를 들어 Account를 생성하는 것도 새로운 트랜잭션으로 인한 값이
state에 반영된 결과라고 볼 수 있다.
- 트랜잭션
- 보통 프로그램은 코드와 데이터로 구분한다.
코드는 함수 또는 기능, 데이터는 코드로 인해 변경되거나 누적되는 값들을 말한다.
스마트 컨트랙트는 특정 주소에 존재하는 프로그램이기 떄문에 상태를 가진다.
- 트랜잭션의 목적은 블록체인의 상태를 변경하는 것이다.
트랜잭션을 처리하기 위해서는 비용이 필요하는데 이를 가스라고 한다.
- 이더리움을 메타마스크 또는 다른 지갑으로 전송해본 사람은 가스비의 무서움을 알 것이다.
이더리움은 sender가 가스비를 적어서 트랜잭션을 요청하기 때문에 높은 가스비를
부른 사람의 트랜잭션을 먼저 처리해 준다. 이는 곧 높은 가스비와 직결될 수 밖에 없다.
물론 이더리움은 TPS가 좋지 않기 때문에 이와같은 구조를 채택할 수 밖에 없었을 것이다.
하지만 클레이튼은 TPS가 월등히 좋기 떄문에 이더리움같은 가스비 정책을 가질 이유가 없다.
그래서 클레이튼은 이더리움과 다르게 가스비를 설정할 수 없도록 하였다.
- 플랫폼은 sender가 TX를 처리하기 위해 필요한 충분한 가스비를 가지고 있는지 확인한다.
balance가 없으면 바로 트랜잭션를 거절하고, 충분하다면 pending 했다가
노드가 판단하기에 블록에 넣을 수 있을 때가 되면 트랜잭션을 체결하고
그때 가스비를 차감한다.
- 트랜잭션은 sender의 서명이 필요한데 서명의 증명은 코인마다 상이하다.
이더리움은 서명에 sender의 주소를 넣지 않는다.
대신 sender는 서명에서 공개키를 도출할 수 있는 함수를 실행한다.
즉 서명에서 공개키를 뽑아내고 공개키에서 주소를 뽑아낸다.
뽑아낸 주소가 실제로 존재하면 올바르다고 생각한다.
다만 위와같은 과정은 서명에서 공개키를 도출하는 과정에서의 연산량이 늘어난다.
때문에 이더리움의 성능이 느려질 수 밖에 없는 것이다.
- 클레이튼은 서명에서 공개키를 도출하는 과정을 없애고
비트코인과 동일하게 서명에 어카운트 주소를 같이 포함하여 성능을 높였다.
- 트랜잭션 구조
- 아래 TX의 예를 보면 nonce라는 것이 있다.
이는 어카운트 기반 블록체인에서 보이는 특징이다.
nonce는 동일한 트랜잭션을 중복하여 보내는 일을 방지하기 위해
순서를 표시하는 것이라고 생각하면 된다.
만약 누군가 비트코인은 병렬화가 가능한데 이더리움은 불가능하다라고 말한다면,
nonce 때문이라고 생각하면 된다.
- 이더리움의 트랜잭션은 조금 다른 모습을 띈다.
우선 위의 예시와 다르게 from (sender)주소가 없어서 160bit를 아낄 수 있다.
gas는 gas를 몇 개까지 쓰겠다 즉, instruction을 몇 개까지 실행하겠다 라는 것을 말한다.
gasPrice는 각 한 개의 가스마다 얼마만큼을 지불하겠다 라는 것을 말한다.
즉, gas * gasPrice가 최종 가스비가 된다.
- to의 주소에 따라 트랜잭션 종류를 3가지로 구분할 수 있다.
만약 to 주소가 계정 주소라면 토큰을 보내는 TX이고
to 주소가 컨트랙트 주소라면 컨트랙트를 실행하는 TX이다.
그리고 to 주소가 비어있다면 컨트랙트를 배포하는 TX이다.
- (v, r, s) 는 전자서명이라고 보면 된다.
(엄밀히 말하면 r, s 만 전자서명이긴 하다.)
- 클레이튼 트랜잭션의 예시이다.
이더리움과는 다르게 from이 들어가고 type 값이 있다.
type은 위에서 말했던 TX의 종류 3가지를 명확하게 구분해주는 역할을 한다.
- 트랜잭션 이동경로
- 트랜잭션의 이동경로는 다음과 같다.
A가 TX를 생성, 서명하여 노드에게 전달하고 노드는 TX를 블록에 넣기 위해 노력을 한다.
만약 TX가 블록에 들어갔다면 위 과정을 증명하는 영수증(Receipt)를 A에게 제공한다.
- 이때 A와 Node가 같은 프로토콜로 통신하는 것이 중요하다.
'Block Chain ETC' 카테고리의 다른 글
블록체인 개념 정리#3 (0) | 2022.07.01 |
---|---|
블록체인 개념 정리#2 (0) | 2022.06.30 |
블록체인 개념 정리#1 (1) | 2022.06.30 |
Solidity 문법 정리 (0) | 2022.06.29 |
BlockChain Trilemma (0) | 2022.05.30 |