고스트 프로토콜(GHOST Protocol)은 비트코인의 성능 향상과 보안성 향상을 위해 나온 알고리즘입니다. 이더리움은 고스트 프로토콜을 수정하여 적용한 결과, 빠른 블록 생성 속도를 가지면서 보안성도 높이는 결과를 얻었습니다. 비트코인은 블록 생성 속도가 느리기 때문에 stale 블록의 생성확률이 낮고 보안성이 높습니다. 반면, 이더리움은 블록 생성 속도가 빠르기 때문에 stale 블록의 생성확률이 높고 보안성이 낮습니다. 이러한 문제를 보안하기 위해 이더리움은 고스트 프로토콜을 적용하여 stale 블록을 잘 처리하고 보안성도 높였습니다.

고스트 프로토콜은 stale 블록의 처리에 대한 알고리즘이라고 볼 수 있습니다. 고스트 프로토콜은 bitcoin을 위해 생성됬습니다. 비트코인은 블록생성시간이 약 10분으로 느리기 때문에 stale 블록의 생성확률이 매우 낮습니다. 만약, stale 블록이 발생하면 가장 긴 블록을 메인 블록체인(Canonical Blockchain)에 연결하고 나머지 stale 블록은 버립니다. 하지만 이를 위해 10분을 기다리므로 비트코인은 매우 느립니다. 이를 보완하기 위해 이더리움은 블록생성 시간을 약 12초 정도로 매우 빠르게 만들었습니다. 그러나 블록이 빠르게 생성되면 그만큼 stale 블록이 생성될 확률이 높아지므로 안정성이 떨어집니다. 이를 보완하기 위해 이더리움은 수정된 고스트 프로토콜을 적용한 이유입니다.

상관관계

블록 크기, 블록 생성 시간, 트랜잭션 처리 성능, fork 수, 보안성은 서로 상관관계를 갖고 있습니다. 

블록 사이즈와 블록생성속도가 커지면 트랜잭션 처리율이 올라가고 fork되는 블록의 수가 늘어납니다. 결과적으로 블록체인 네트워크의 보안성이 떨어집니다.

비트코인의 경우 블록생성속도는 약 10분으로 느립니다. 느린 블록생성속도 때문에 트랜잭션 처리 성능도 낮아지는 대신 fork되는 블록의 수는 줄어듭니다. fork의 수가 줄어들기 떄문에 stale 블록이 발생하는 빈도 또한 줄어서 자연스럽게 보안성이 늘어납니다. 하지만 블록생성속도가 매우 느리다는 치명적인 단점을 갖고 있습니다. 이더리움에서는 이것을 개선하여 블록생성속도를 약 12초 정도로 매우 빠르게 유지합니다. 하지만 블록생성속도를 올리면 상관관계에 의해 fork의 수가 늘어납니다. 즉 늘어난 fork의 수 때문에 네트워크의 보안성을 낮춥니다. 이를 해결하기 위해 이더리움은 수정된 고스트 프로토콜을 사용합니다. stale 블록에 대해 보상을 주고 가장 긴 것이 아닌 가장 무거운 것을 사용합니다. 수정된 고스트 프로토콜을 적용함으로써 네트워크의 보안성을 올리고 트랜잭션 처리율을 유지하면서 블록생성속도도 빠르게 할 수 있는 것입니다.

왜 빠른 블록생성이 좋지만은 않을까?

현재 블록체인의 빠른 승인 시간은 높은 stale 생성 비율로 인해 보안성이 낮아진다는 문제가 있습니다. 왜냐하면 블록이 네트워크를 통해 전파되기 위해서는 일정 시간이 필요하기 때문입니다. 예를 들어, 마이너 A가 블록을 채굴하고, 이 블록이 전파되기 전에 마이너 B가 블록을 채굴한 경우, 마이너 B의 블록은 버려지고(stale) 이는 네트워크의 안정성에 기여하지 못합니다. 또한 중앙화 이슈가 있는데, 만약 마이너 A가 마이닝 풀이며 30%의 해시 파워를 가지고 있고 마이너 B가 10%의 해시 파워를 가진다면, A는 전체 시간 중 70%의 시간에서 stale 블록을 생성할 가능성이 있지만 (30%로 자신이 생성한 블록은 즉시 전파될 것이므로) B는 90%의 시간동안 리스크를 가지게 됩니다.

그러므로 블록 인터벌이 높은 stale 생성 비율을 가지게 될 만큼 짧다면 A는 실질적으로 단순히 그 규모로 인해 훨씬 효율적이 될 수 있습니다. 이런 이유로 블록을 빠르게 생성하는 블록체인은 많은 해시 파워를 가진 한 마이닝 풀이 마이닝 프로세스에 있어서 실질적인 통제력을 가지게 될 수 있습니다.

고스트 프로토콜이란?

고스트 프로토콜은 Greedy Heaviest Object subTree의 약자로 '가장 큰 무게를 가진 subtree'를 선택하는 알고리즘입니다. 비트코인의 경우, fork가 발생했을 때 길이가 더 길게 연결된 블록을 메인 블록체인으로 하고 stale블록은 버립니다. 이더리움의 경우, fork가 발생했을 때 더 무거운 쪽을 선택하게 됩니다. 이더리움은 비트코인의 고스트 프로토콜을 살짝 수정하여 사용하고 있습니다.

이더리움의 고스트 프로토콜 알고리즘을 간단하게 설명하면 '제네시스 블록에서 출발하여 각 subtree들이 얼마나 블록을 포함하고 있고, 그 블록들의 개수가 많은 체인을 메인체인의 블록으로 선택하겠다' 입니다.

예시


이더리움 고스트 프로토콜을 위 그림으로 다시 예시를 들어보면 시작은 제네시스 블록인 0에서 시작합니다. 0를 부모로 가지는 노드는 1B와 1A입니다. 1B를 루트로 한 subtree의 노드 개수는 12개이고 1A는 6개입니다. 따라서 메인체인에 붙게 되는 것은 1B입니다. 다음으로 1B를 부모로 가지는 노드는 2D, 2C, 2B입니다. subtree의 노드개수는 각각 4개, 5개, 2개이므로 메인에 붙게 되는 노드는 2C입니다. 이러한 방식을 subtree에 전부 적용하면 선택되는 메인체인은 0-1B-2C-3D-4B 입니다. 비트코인의 경우, 위 그림에서 동그라미로 표시되어 있는 것을 메인체인으로 선택합니다.



수정된 GHOST Protocol의 내용은 다음과 같습니다.

  • 하나의 블록은 반드시 하나의 부모 블록을 지정하며, 0 또는 그 이상의 엉클 블록을 지정. 현재 2개까지 지원하고 있다.
  • 블록 A의 K번째 조상의 직접적인 자손이어야 한다.
  • 블록 A의 조상이어서는 안된다.
  • 엉클블록 마이너 보상은 블록 생성 시에 받는 보상의 93.75%를 보상으로 받고, 엉클 블록이 포함된 정상블록의 마이너는 엉클블록 1개당 3.125%의 추가 보상을 받게 됩니다.


요약

블록생성속도를 올리는 것은 블록체인 네트워크 전체의 처리율과 비례관계를 갖지만 보안성과는 반비례 관계를 갖습니다. 고스트 프로토콜을 이용하여 이를 보완할 수 있습니다. 따라서 이더리움의 고스트 프로토콜은 전체 성능과 보안에 아주 중요한 역할을 한다고 할 수 있습니다.



+ Random Posts