비잔틴 문제 즉, 장군이 어떤 명령을 들어야 하는지 공격해야 하는지, 후퇴해야 하는지 이해하는 문제를 해결하기 위해 블록체인은 합의 프로토콜을 생각했습니다.
합의 프로토콜은 분산 네트워크 참가자 간의 합의를 달성하는데 사용되는 프로세스로 이러한 블록체인을 위한 합의 프로토콜은 2가지 문제를 해결해야 합니다.
공격자가 체인의 중간 어딘가를 공격하는 것이 아니라 체인의 끝에 블록을 놓고 고의적으로 새로운 블록을 추가하려고 할 때의 네트워크 보호문제를 해결해야 합니다.
네트워크는 악의적인 블록이 추가되기 전에 각 단일 노드에서 일련의 확인을 매우 엄격하게 확인합니다.
이전 블록이 메인 블록의 이전 해시 필드와 일치하는지 확인하고 타임 스탬프를 확인하고 트랜잭션이 비어있지 않은지 등을 확인합니다. 그 외에도 많은 내용이 있으며 모두 통과하지 않으면 블록을 기각합니다.
결국에는 악의적인 블록이 체인에 추가되지 않도록 합니다. 그래서 규칙에 따랐을 때 금전적인 보상을 하는 것입니다.
블록체인의 경쟁 체인 문제를 해결해야 합니다. 대형 블록체인의 경우 전 세계적으로 분산되어 있어서 특히 서로 멀리 떨어진 노드 사이에 지연이 발생할 수 있습니다. 또한 멀리 떨어진 두 노드가 동시에 채굴에 성공할 수도 있습니다.
공격자가 있거나 고의적인 것이 아니었더라도 블록을 채굴하면 정보가 도달하기까지 시간이 걸리기 때문입니다. 계속 증가하는 방법에 관한 합의가 필요하기 때문에 문제가 되는 것 입니다.
위 그림과 같이 노란색과 보라색 블록 중 어떤 블록을 계속 증가시켜야 하는지 합의가 필요합니다. 이러한 블록은 내부에 다른 트랜잭션이 있을 수 있기 때문에 두 블록을 수용하고 두 노드 사이에서 필드를 분할할 수 없습니다.
합의에 도달하지 않고 합의 프로토콜이 없으면 두 체인이 서로 충돌해 2개로 분할됩니다. 결국에는 완전히 분할된 수 많은 블록체인이 생기게 되는 문제가 발생합니다.
이는 각각 채굴한 블록을 다른 노드들에게 전파하는 과정에서 합의 프로토콜로 다른 블록이 추가될 때까지 기다리면 됩니다. 블록이 추가되면 어떤 체인이 더 긴지 알수 있고 가장 높은 해싱 파워를 가진 네트워크에서 가장 긴 체인을 생성합니다.
해싱 파워가 높으면 높을 수록 암호화 퍼즐을 풀 확률이 높아지고 통계와 확률적으로 블록을 찾게 되고 그 블록이 네트워크 전반으로 전파되게 됩니다. 이러한 원리로 인해 충돌은 해결되고 주류 블록체인에 있지 않은 블록은 고아 블록(Orphaned Block)으로 명명됩니다.
고아 블록은 채굴자들이 채굴했지만, 주류 블록체인에 포함되어 있지 않아 블록의 트랜잭션과 보상이 더이상 유효하지 않게 됩니다.
블록체인에서 합의 프로토콜의 의미는 51%의 해싱 파워를 가졌거나 50% 이상의 해싱 파워를 가진 체인이 이긴다는 것입니다. 블록체인에서는 우리가 다뤘던 비잔틴 장군 문제와는 달리 30% 이상의 악의적인 참여자나 배신자가 있으면 합의에 도달하지 못합니다.
블록체인에서는 확률과 해싱 파워로 한쪽에 50% 이상의 해싱 파워를 가지고 50% 이상의 해싱 파워가 동의해 합의에 도달하는 한 블록체인도 합의에 도달합니다. 그래서 합의 프로토콜과 프로토콜은 비잔틴 장군 문제에서의 합의 프로토콜보다 강력합니다.
즉, 비잔틴 장군 문제는 70% 이상이 필요하지만 블록체인에서는 합의에 도달하려면 50% 이상이 필요합니다. 이는 아주 중요한 특징으로 블록체인에서 매우 중요하고 강력합니다.