Nakamoto consensus에서는 프로세스의 안전성을 위해 알려진 고정 상한선(비트코인의 10분, 이더리움의 15초)을 가진다. 그리고 상한선이 유지되지 않는 경우 합의 알고리즘이 깨지고 체인이 포크된다.
텐더민트는 1/3 이하의 프로세스가 결함이 있는 경우 절대 포크하지 않는다. 검증인 집합의 2/3 이상이 합의에 도달하기 전까지 포크가 일어나지 않고 일시적으로 중단된다.
리더 선출
검증인
투표권을 갖고 있는 노드들을 검증인이라고 부른다. 검증인들은 다음 블록에 동의하는 암호서명, 즉 투표를 전파함으로써 합의 프로토콜에 참여한다.
검증인은 staking한 토큰의 양의 의해 결정된다.
코스모스는 Atom이라고 부르는 Staking 토큰을 임의의 검증인에게 위임하여 일정한 블록 수수료와 Atom 보상을 얻을 수 있지만 위임 검증인이 해킹 당하거나 프로토콜을 위반하면 함께 처벌 받는다.
텐더민트는 100명의 고정된 검증인을 가지고 있다. 이들은 지분을 기반으로 투표하여 결정된다.
라운드 리더
검증인들은 한번에 하나의 블록에 대해 합의를 시도한다. 블록에 대한 합의는 라운드를 통해 진행되는데 각 라운드에는 블록을 제안하는 라운드 리더가 있다.
검증인들은 블록을 받아들일 것인지 또는 다음 라운드로 넘어갈 것인지에 대한 단계별 투표를 진행한다. 각 라운드의 리더는 검증인 리스트에서 가중 round-robin 방식으로 번갈아 가면서 선출된다. 투표권이 많을수록 더 많은 비중을 갖게 되고 이와 비례하여 리더가 될 가능성이 높아진다. 동일한 투표권을 가지고 있는 검증인들이 있으면 프로토콜에 의해 동일한 횟수만큼 리더로 선출된다(결정론적이다).
리더 선출 과정
검증인마다 가중치가 설정되어 있다.
검증인이 리더로 선출되고 새로운 블록을 제안한다.
가중치가 다시 계산되고 라운드가 완료된 후 약간의 양이 감소한다.
각 라운드가 진행됨에 따라 가중치는 투표권에 비례하여 증가한다.
검증인들 중 리더가 다시 선출된다.
리더는 결정론적으로 선택되기 때문에 검증인 집합과 각 검증인의 투표 권한을 알고 있으면 라운드 리더가 누구인지 정확하게 계산할 수 있다. 리더를 예측할 수 있는 경우 리더를 DDoS 공격하여 블록체인의 진행을 중단시킬 수 있는데 이런 공격에 대해 텐더민트는 Sentry Architecture를 구현하여 대응한다.
합의 과정
전체 합의 과정은 3단계(Propose, Prevote, Precommit)으로 구성된다.
리더가 블록을 Propose하면 검증자들은 블록을 검증한 후 Prevote 투표를 한다.
전체 검증자의 2/3 이상이 Prevote 투표를 했으면 다음 단계인 Precommit으로 넘어간다.
전체 검증자의 2/3 이상이 Precommit을 했으면 해당 블록을 Commit한다.
전체 합의 과정을 3단계로 나눠 2번의 2/3 이상 검증을 받아야 safety를 보장할 수 있다. 또 텐더민트 lock이라는 것을 적용해야 safety를 보장할 수 있다.
텐더민트 lock은 노드가 한 번 precommit을 하고 나면 이후 precommit한 블록과 같은 블록에 대해서만 prevote를 해야 하고 리더가 되었을 때도 precommit한 블록과 같은 블록을 제안해야 한다는 규칙이다.