이번에는 이더리움의 엉클블록과 고스트 프로토콜에 대해서 알아보겠습니다.
엉클블록
블록 생성에 성공하고 검증에 문제가 없어 이더리움 네트워크를 통해 다른 노드들에게 브로드캐스팅은 되었으나 다른 채굴자가 생성한 다른 블록에 비해 난이도가 낮아 블록체인에 등록되지 못한 블록을 엉클 블록(Uncle Block)이라고 합니다. 비트코인은 고아 블록이라고도 말하는데요.
이러한 엉클 블록이 많아질 경우 여러가지 문제가 발생하게 되는데,
첫번째, 트랜잭션을 지연시킨다.
가령, 두 명의 채굴자가 거의 동시에 블록을 채굴 할 때 생성된 블록에는 서로 다른 트랜잭션들이 포함되게 됩니다. 따라서 정상 블록에 포함된 트랜잭션은 처리가 되지만 엉클 블록 내에 트랜잭션들은 즉시 처리되지 않습니다.
두번째, 컴퓨팅의 파워 낭비
두 개의 블록이 거의 같은 시간에 생성 될 경우 블록체인은 두 개의 체인으로 분리되고 이 중에서 길이가 더 긴 체인을 정상으로 등록하게 됩니다. (비트코인의 분기와 같음)
길이가 짧은 다른 체인은 엉클 블록을 포함한 체인이 되고, 이후 엉클 블록체인 뒤에 연결된 블록들은 모두 엉클 블록이 됩니다. 결국, 엉클 블록의 짧은 체인의 생성 과정은 불필요한 해시 계산을 위한 컴퓨팅 파워를 쓴 셈이 되는 거죠.
세번째, 보안
엉클 블록 생성 후 다음 블록을 생성하면 평균 블록 생성 시간이 더 길어지기 때문에 블록 생성 후 난이도가 줄어들게 됩니다. 난이도가 줄면 블록 타임이 줄어들고 컴퓨팅 파워가 큰 채굴자의 영향력이 커지는 문제가 밸생합니다. 또한, 엉클 블록 비율이 너무 높을 경우 블록체인의 폭이 넓어지고, 자칫 컴퓨팅 파워가 강한 채굴자에 의해 블록체인이 악의적으로 변경되는 등의 문제가 발생 할 수 있습니다.
고스트 프로토콜
위에 엉클 블록에 의해 발생되는 문제점들을 이야기 해보았는데 그렇다면 이러한 엉클 블록에 대해서 어떻게 해결할 수 있을까요? 이더리움은 엉클 블록의 문제를 고스트(Ghost, Greedy Heaviest Observed Subtree) 알고리즘을 사용하여 해결하였습니다. 고스트 알고리즘은 블록 생성 시 정상 블록에 최대 2개의 엉클 블록까지 추가하고 보상하여 엉클 블록의 문제점을 해결하게 됩니다.
다음은 이더리움에서 사용하는 고스트 알고리즘에 대한 설명입니다.
- 하나의 블록은 반드시 하나의 부모 블록을 지정하며, 0 또는 그 이상의 엉클 블록을 지정한다. 현재는 최대 엉클 블록은 2개까지 지원한다.
- 블록 A에 포함된 엉클 블록은 다음과 같은 속성을 갖는다.
- 블록 A의 k번째 조상의 직접적인 자손이어야 한다. 여기서 2 <= k <= 7, 실제 한 블록이 생성 된 후 블록체인에 등록되고 최종적으로 반영된 사실이 확인될 때까지 최대 생성 시점 이후 6개의 블록이 블록체인에 연결 될 때까지 기다린다. 이를 '6번 확인'이라고 한다. 엉클 블록 역시 6개의 블록 중 하나에 포함되어야 한다.
- 블록 A의 조상이어서는 안된다.
- 엉클 블록은 반드시 유효한 블록헤더를 가지고 있어야하지만 미리 검증되거나 유효한 블록일 필요는 없다.
엉클 블록의 채굴자는 일반 블록 생성 시에 받는 보상의 93.75%를 보상으로 받고, 엉클 블록이 포함된 정상 블록의 채굴자에게는 3.125%의 추가 보상을 지급합니다. 참고로, 엉클 블록 내에 포함된 트랜잭션은 처리되지 않기 때문에 수수료 는 엉클 블록 채굴자에게 지급되지 않으나, 비잔티움 버전의 경우 엉클 블록의 채굴자는 해당 엉클 블록을 포함한 정상 블록과 블록 번호 차이에 따른 상대적인 엉클 블록 보상을 받게 됩니다.
이 부분은 위에서 설명한 부분과 다른 부분입니다.
블록 채굴자의 보상
블록 보상(3이더) + 트랙잭션 수수료 + 엉클 블록 1개당 블록 보상의 3.125%(최대 2개)
엉클 블록 채굴자의 보상
(8 - (정상 블록 번호 - 엉클 블록 번호)) / 8 * 블록 보상
'BlockChain > Ethereum' 카테고리의 다른 글
[Ethereum] 튜링이란? (0) | 2019.04.30 |
---|---|
[Ethereum] What is Ethereum? (0) | 2019.04.30 |
[Ethereum] 계좌와 트랜잭션 (0) | 2019.04.23 |
[Ethereum] 이더리움 플랫폼의 작동 원리 (0) | 2019.04.23 |
댓글