Proof of Work

비트코인은 탈중앙시스템, 분산 장부, 화폐 서비스라는 3가지 특징을 지닌다. 이러한 개념을 실제로 구현하기 위해서는 아래와 같은 고민들이 필요하다.

  • 어떻게 합의에 도달할 것인가?
  • 탈중앙화 환경에서 합의 후 위변조 차단 방법은?
  • 화폐 발행은 어떻게 할 것인가?
  • 탈중앙화 환경에서 스스로 작동시킬 수 있는 원동력은?

핵심 사상:

  • 화폐(금본위제)
    • 화폐 발행 규모 > 2100만개 제한
    • 화폐 발행 방식 > 화폐 발행 어렵게
  • 시스템(탈중앙화)
    • 인센티브 기반 자발적 참여 > 어렵게 작업 수행 시 인센티브 보상
    • 위변조 차단 > 수정, 삭제가 어렵게
  • 장부(분산장부)
    • 합의 위한 대표자 선정 > 어려운 작업 수행시 대표자 선정
    • 이중지불 방지 > UTXO 기반 통제

이러한 핵심가치와 세부 구현 요소를 구현하기 위한 아이디어가 PoW(Proof of Work, 작업 증명) 이다. 우리가 금을 캐기위해서 많은 노력이 필요한 것 처럼 디지털 세계에서도 화폐를 채굴하기 위해서 많은 노력이 필요하다. 즉, 블록을 생성하기 위해서 '일정 시간 이상 계산 자원을 소비' 해야 하는데 이걸 작업 증명이라하며 이를 위해서는 대용량 하드웨어, 인력, 전기 등 많은 에너지(energy) 가 필요하다.

사토시 나카모토의 입장에서는 화폐가 어렵게 발행되게 설계하고 싶었다. 탈중앙 방식이다 보니 가장 어려운 작업을 수행한 노드를 신뢰할 수 있으며, 그것을 대표자로 선정하여 합의에 도달하고 싶었다. 어려운 작업을 강제화하여 위변조 의욕을 꺾어버리고 싶었다. 또한 인센티브를 통해서 어려운 작업에 자발적인 참여를 유도하고 싶었다.

비트코인에 구현된 작업 증명 방식은 Hash Puzzle 로서, 특정 패턴의 해시 값을 찾을 때까지 무차별 대입으로 무한 반복 계산하는 극단적인 방식이다. 찾아야 하는 해시 값은 Nonce 이다. Block Header 에서 이전해시, 타임, 버전, 머클 루트, 난이도는 이미 값이 정해져 있기 때문에 모두가 구할 수 있고, 현재 정해지지 않은 임의의 값을 Nonce 라고 하며, 목푯값이 주어지면 이 목푯값(Target, 블록 목푯값)보다 작은 Block Hash 값이 나오도록 Nonce 를 찾는 과정이 채굴(작업) 이다.

Nonce 값을 찾았다는 것은 블록이 생성되는 것이며 즉, 장부가 생성된다는 의미다. Nonce 값이 결정되면 대표 블록이 선정되어 네트워크에 산재한 장부가 합의된다. Nonce 값이 결정되면 화폐가 발행된다. (블록 생성의 대가로 화폐를 지급) Nonce 값이 결정되면 임의로 수정, 삭제가 어렵다. 즉, Nonce 를 구했다고 반드시 블록체인에 기록할 수 있는게 아니라, 이 과정을 가장 먼저 통과한 단 한명에게만 기록할 수 있는 권리가 주어지는 것이다.

Flow:

1. Nonce 를 0으로 설정한다.
2. Target 변수에 목푯값을 대입한다.
3. 블록 헤더에 Double SHA256 을 사용하여 해시값을 구한다.
4. Block Hash 값이 Target 보다 작거나 같으면 6번 절차로 분기한다.
5. Block Hash 값이 Target 보다 크면, Nonce 를 1증가 시키고 3번 절차로 분기한다.
6. Nonce 를 찾았으므로 프로그램을 종료한다.

2009년 첫 비트코인 채굴에 필요한 해시함수 계산 요구량은 2^32 였다. 2^32 를 1이라 가정하고 이에 관한 상대적 계산 요구량을 환산한 값을 '난이도' 라고 한다. 예를 들어 난이도가 4라는 것은 2^32 보다 4배 더 계산이 필요하다는 것이다. 2020년 4월말 기준으로도 이 난이도가 17조에 육박한다. 즉, 2^76 정도이다. 보통 GPU 가 장착된 최신형 가정 컴퓨터를 사용하더라도 초당 2천만번 해시를 계산할 수 있고 2^76 을 계산하기 위해서는 1억 2천만년 동안 24시간 가동해야 한다. 즉, 전기 에너지가 엄청 소모된다.

사토시는 블록이 항상 평균 10분정도에 하나만 만들어지도록 하고 싶었다. 즉, 정답을 찾는데 늘 10분 소요되길 원했으며, 전문 채굴업자들은 개인용 컴퓨터보다 수조 배나 더 빨리 계산할 수 있게 하기 위해서 병렬 처리를 한다.

References

  • 비트코인의 탄생부터 블록체인의 미래까지 명쾌하게 이해하는 비트코인·블록체인 바이블 / 장세형 저
  • 비트코인과 블록체인 가상자산의 실체 2/e / 이병욱 저