Finality 는 크게 두 종류로 분류된다.
확률적 finality 란, 블록을 되돌릴 수 없다는 것을 확률적으로만 보장한다.
비트코인의 나카모토 합의 알고리즘이 사용하는 방식으로, 블록이 추가로 생성될 수록 앞쪽에 있는 블록의 fianlity 가 확률적으로 증가하는 방식을 말한다. 이는 블록이 증가할 수록 이를 되돌리기 위한 컴퓨팅 파워가 증가하기 때문에 어느 정도 오래된 블록은 사실상 되돌리기가 불가능해진다. 즉, 블록의 확률적 finality 가 증가하게 되는 것이다.
거래소에 비트코인을 입금하면 6개의 블록 컨펌을 기다린 이후 거래가 가능한 이유도 거래소 입장에서 확률적 finality 를
체크하려는 목적에서이다.
절대적 finality 란, 한 번 블록이 블록체인에 포함되면 어떤 경우에도 해당 블록을 되돌릴 수 없음을 보장하는 방식이다.
BFT 계열의 합의 알고리즘이 절대적 finality 를 보장하는데, 텐더민트의 경우 블록이 전체 노드 voting power 의 2/3 prevote 와 2/3 의 precommit 을 받으면 해당 블록은 즉시 finalize 된다.
확률적 finality와 절대적 finality의 속성을 비교하면 당연히 절대적 finality가 좋다. finality만 봤을 때는 모든 체인이 BFT 계열의 합의 알고리즘을 사용해야 한다고 생각할 수 있다. 하지만 모든 엔지니어링은 트레이드오프가 있고, 절대적 finality 역시 공짜로 얻어지는 것은 아니다.
이 문제를 이해하기 위해서는 Eric Brewer’s CAP 정리를 살펴볼 필요가 있다. CAP 정리에 따르면 모든 분산 컴퓨팅 시스템은 Consistency, Availability, Partition Tolerance 중 2가지만 달성 가능하다. 참여 노드가 전세계에 분산된 블록체인의 경우 네트워크 파티션을 피할 수 없으므로, 모든 체인은 Consistency와 Availability 둘 중 하나를 선택해야 한다는 뜻이기도 하다.
확률적 finality를 선택한 체인은 네트워크 파티션 상황에서 Availability를 보장한다. 비트코인의 경우 네트워크 파티션이 발생하면 각 파티션에 포크가 생기게 되고, 네트워크 파티션이 사라지면 longest-chain 규칙에 따라 다시 하나의 체인으로 합쳐지게 된다. 포크가 난 상황에서도 계속 합의를 진행할 수 있지만, finality는 보장하지 못한다.
반대로 절대적 finality를 선택한 체인은 네트워크 파티션 상황에서도 Consistency를 보장한다. 텐더민트의 경우 네트워크가 반으로 파티션되면 어느 한 쪽도 2/3의 투표를 받지 못하기 때문에 블록에 대한 합의를 진행하지 못한다. 이후 네트워크 파티션이 사라지면 다시 합의를 진행하게 된다. 파티션 상황에서 Availability를 보장하지 못하는 대신 절대적 finality를 보장할 수 있다.
[ref]