[Blockchain] Safety & Liveness / Tendermint (틴더민트)
Safety / Liveness / Liveness over Safety / Safety over Liveness
Safety
-
시스템에 나쁜 일이 발생하지 않는다는 의미
-
모든 정상적인 참여자는 같은 상태에 동의하여야 하고, 그 상태는 유효해야 한다
-
문제없는 노드 사이에서는 잘못된 합의가 이루어지지 않는다
Liveness
-
시스템은 항상 살아 있어야 한다는 의미
-
결국에는 어떤 상태에 동의하여야 하고, 모든 참여자는 동의된 상태에 도달해야한다
-
문제없는 노드들은 반드시 합의를 한다
Liveness over Safety
-
사토시 나카모토가 처음 제안하였기 때문에 ‘Nakamoto Consensus(나카모토 컨센서스; 나카모토 합의)’ 라고도 불린다
-
‘Nakamoto Consensus’ 는 언제나 더 어려운 문제를 푼 체인이 있으면, 그 체인을 유효한 체인으로 판단한다
-
지금 있는 체인보다 더 긴 체인을 만들 해시 파워만 있으면, 언제든지 현재 합의된 블록을 다른 블록으로 대체할 수 있다
이런 방식을 블록체인에서는 ‘Finality(완결성)’가 보장되지 않는다고 말하고,
‘FLP I4mpossibility’ 에서는 ‘Liveness’를 위해서 ‘Safety’를 포기했다고 말한다
👉 따라서 ‘Safety’는 보장되지 않는다
⭐ 잘못된 합의가 이루어질 수 있지만 어떻게든 합의는 한다
예시) 블록체인 PoW 👉 51% 발생 가능성 / Safety는 보장하지 않음
Safety over Liveness
-
Safety를 중시하는 합의 알고리즘, 분산 시스템에서 연구되던 PBFT에 기반한 ‘BFT 계열 합의 알고리즘’ 들이 이쪽에 속한다
-
‘Cosmos’ 에서 사용하는 ‘Tendermint’ 가 대표적인 Safety를 보장하는 ‘BFT 알고리즘’ 이다
Tendermint (틴더민트)
-
Tendermint는 하나의 라운드가 Propose / Prevote / Precommit 3개의 단계로 나누어진다
-
‘Prevote’ 와 ‘Precommit’ 스텝에서 각각 2/3+1개 이상 모아야 합의가 이루어진다
-
합의에 2/3+1개 이상의 동의가 필요하기 때문에 어떤 상황에서도 서로 다른 두 블록이 동시에 생성되는 일은 없다
-
하지만 전송한 메시지가 시간 안에 도달하는 것을 보장하지 못 하는 비동기 네트워크에서는 합의가 이루어지지 않아 블록이 생성되지 않을 수 있다
👉 따라서 ‘Liveness’는 보장되지 않는다
⭐ 잘못된 가능성이 있다면 블록을 만들지 않는다
예시) 코스모스 텐더민트 👉 메시지가 시간안에 도착하지 않으면 블록 생성 안함