블록체인 Finality

Younghwan Cha·2022년 11월 7일
0

blockchain

목록 보기
8/18

Finality 는 크게 두 종류로 분류된다.

  • 확률적 Fianlity
  • 절대적 Finality

확률적 Finality

확률적 finality 란, 블록을 되돌릴 수 없다는 것을 확률적으로만 보장한다.
비트코인의 나카모토 합의 알고리즘이 사용하는 방식으로, 블록이 추가로 생성될 수록 앞쪽에 있는 블록의 fianlity 가 확률적으로 증가하는 방식을 말한다. 이는 블록이 증가할 수록 이를 되돌리기 위한 컴퓨팅 파워가 증가하기 때문에 어느 정도 오래된 블록은 사실상 되돌리기가 불가능해진다. 즉, 블록의 확률적 finality 가 증가하게 되는 것이다.
거래소에 비트코인을 입금하면 6개의 블록 컨펌을 기다린 이후 거래가 가능한 이유도 거래소 입장에서 확률적 finality 를
체크하려는 목적에서이다.

절대적 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]

profile
개발 기록

0개의 댓글