블록체인에는 시차가 존재한다. 데이터가 블록에 기록되고 다수의 노드들에게 전송될 때까지, 동시에 모두 도착하는 것이 아니라는 의미이다. 어떠한 노드는 해당 데이터를 먼저 받고, 어떤 노드는 해당 데이터를 느리게 받을 수 있다. 그것이 단 몇 0.5초의 차이라고 할 지라도 말이다.
다시 말해 블록체인에는 기존 DB와 달리 데이터의 일관성이 없다고 할 수 있다. 이러한 일관성 문제를 해결하기 위해 블록체인에는 합의 알고리즘이 존재한다.
합의란 간단히 말해서, 블록체인이 노드간에 서로 다를 때, 누구의 체인이 옳은지 판단하기 위한 규칙이다. 퍼블릭 블록체인에서는 이중 지불 방지, 작업 증명(PoW), 지분 증명(PoS)과 같은 합의 알고리즘이 사용되고 이러한 블록체인의 합의를 작성한 헌법이 바로 블록체인 백서이다.
프라이빗 블록체인에서는 데이터 딜레이의 문제를 주로 BFT(Byzantine Fault Tolerance) 계열로 해결한다.
대통령 선거 이후에 출구 조사를 하는 상황을 가정으로 예를 들어보자. 출구조사에 참여하는 모든 사람들이 x번 후보를 뽑고, 출구 조사에서도 x번 후보를 뽑았다고 정직하게 말한다면 해당 출구조사 결과의 1/2만 넘어도 과반수가 옳다고 할 수 있다.
그러나 문제는, 사람들이 x번을 투표하고도 y에 투표했다고 대답하는 경우이다. 비잔틴 장애 허용은 위와 같이 참여자가 거짓말을 하는 현상(장애)이 있다고 해도 2/3의 결과가 참이면 과반수가 참이라고 판단하는 합의 알고리즘이다.
다시 말해, 거짓말이 섞여 있다고 할지라도 거짓말이 전체의 1/3을 넘지 않는다면 옳다고 합의를 보는 것이다.
앞서 BFT는 구라쟁이 스파이가 집단에 속해 있음을 전제하고 2/3를 과반수의 기준으로 둔다고 하였다.
예를 들어 99명에게 설문 조사를 할 때 66명이 YES를 외치면 그 안건은 YES가 되는 것이다.
이 때 BFT는 이미 2/3라는 과반수를 넘은 사람이 YES를 외쳤기 때문에 나머지 33명에 대한 의견은 묻지도 따지지도 않는다. 야구로 따지면, 이미 진 게임 9회 말까지 갈 필요도 없는 것과 같다. 😓
반면에 PBFT(Practical Byzantine Fault Tolerance)는 그럼에도 불구하고 나머지 33명에 대해서도 전수 조사를 해야 한다는 것이다.
이더리움에서의 비잔틴은 무엇일까? 이걸 이해하려면 먼저 역사를 조금 알아야 한다.
비잔틴은 역사적으로 동로마이다. 서로마는 이탈리아의 로마이고, 동로마는 지금의 이스탄불이다. 콘스탄티누스 대제가 로마 제국의 수도를 로마에서 지금의 이스탄불로 천도하면서 이름을 비잔틴으로 바꿨다.
로마 → 비잔틴 → 콘스탄티노플 → 이스탄불
위와 같은 순서로 수도가 바뀌었다. 이더리움 2.0의 구현체 이름이 여기에서 비롯되었다. 이더리움 이스탄불이 우리가 현재 보고 있는 이더리움 2.0의 마지막 버전이다.
더 궁금하다면 이더리움 하드포크, 이더리움 콘스탄티노플, 이더리움 이스탄불 같은 키워드로 검색해보세요.
정보 감사합니다.