먼저, A가 블록을 추가하고 타이머가 시작된다. 새로운 블록을 받은 B, C도 각각 타이머를 시작한다.
1. Add frist block and start timer
C의 타이머가 가장 먼저 완료되고, C는 블록을 추가하고 네트워크에 퍼트린다.
2. 'C' got opportunity to add block
다시 Timer가 설정되고 이 과정이 반복된다.
3. Timer reset
Achieve
랜덤한 타이머를 설정하기 때문에 짧은 시간안에 두 참여자가 새로운 블록을 네트워크에 추가할 확률이 낮다. 우연히 동시에 블록이 추가될 경우도 있지만 낮을 확률로 일어나기 때문에 다음 블록을 통해 유효한 체인을 합의할 수 있다.
문제점
비트코인은 네트워크 활성화를 위해서 블록을 추가한 참여자에게 보상을 제공하는 시스템을 가지고 있다. 누구나 참여할 수 있는 공공 네트워크인 비트코인에서 랜덤한 Timer를 준수하지 않는 악의적인 참여자는 무조건 있을 수밖에 없다. 이 알고리즘을 이용하기 위해서는 참여자간의 신뢰가 있어야하는데 비트코인 네트워크는 그렇지 않다.
#3 Cheat Resistant Timer
#2 방법은 타이머를 준수하지 않는 악의적인 참여자가 문제가 된다. 그렇다면 사기 칠 수 없는 타이머를 도입한다면 위의 문제를 해결할 수 있다. 어려운 문제를 출제하고 문제를 풀어야만 타이머가 완료된다.
Rule
새로운 블록이 추가되면 해당 블록과 연관된 문제가 출제된다.
문제의 답을 찾으면 새로운 블록과 답을 네트워크에 퍼트린다.
블록을 전달받으면 답이 맞는지 확인하고 체인에 블록을 추가한다.
A가 첫 블록을 추가하고 이 블록과 관련된 문제가 출제된다.
1. problem
A가 문제를 가장 먼저 풀고 네트워크에 블록을 추가한다. 이때, 발견한 답을 포함해서 전파한다.
2. 'A' wins prize
나머지 참여자들은 A가 보낸 정답을 대입해봄으로써 검증한다. 이후 다시 문제가 출제되면서 블록체인이 형성된다.
3. Verification
Achieve
타이머를 문제 푸는 것으로 대체하여 의도적으로 타이머를 조작할 수 없어졌다.
문제점
위의 알고리즘이 제대로 동작하기 위해서는 출제하는 문제를 잘 설정하여야 한다. 참여자가 많아지면 문제를 푸는 시간이 점점 단축된다는 것도 문제이다.
#4 Proof-of-Work
드디어 비트코인에서 사용하는 컨센서스 알고리즘인 proof-of-work(PoW)를 소개한다. 기본적으로 #3과 같고 암호화 해시 함수를 통해 문제를 출제한다.
이전 블록의 해시값을 Prev Hash, 사용하는 암호화 해시 함수를 SHA256이라고 할때, SHA256(Prev Hash + Nonce)의 최상위 difficulty개의 비트가 0이되는 Nonce를 구하여라.
Achieve
Cryptography를 사용한 문제를 사용하면 문제를 푸는 방법은 무작위 Nonce를 대입해보는 방식 밖에 없다. 따라서 연산 능력에 비례해서 새로운 블록을 추가할 수 있는 확률을 얻게된다. 또, 위의 difficulty(난이도)를 조절함으로써 더 많은 노드가 네트워크에 참여하더라도 문제를 푸는 시간을 유지할 수 있다.
PoW의 단점
PoW는 합의를 도출하는 목적을 달성했음은 분명하지만, 다른 측면에서 살펴보면 단점도 있다.
비효율성
어려운 문제를 풀기 위해서 사용되는 어마어마한 자원이 소요된다. 블록을 생성하는 것에 많은 에너지가 소요된다.
느린 처리속도
거래가 발생하고 해당 거래가 네트워크에 적히려면 새로운 블록이 만들어져야 한다. 블록은 약 10분의 한 개씩 생성되는데 이는 즉각 거래가 완료되는 기존 방식과 비교하면 매우 느리다.