알아두면 쓸모있는 신나는 블록체인

[알쓸신블] 제4장 POW (Proof Of Work)

RyuK-H 2019. 1. 2. 11:13
POW의 기본 개념은 1993년에 Cynthia Dwork 와 Moni Naor에 의해 처음 고안 되었고, 1999년에 Markus_Jakobsson 과 Ari Juels에 의해 Proof of Work 라는 이름이 붙게 되었다. 나카모토 사토시가 2008년에 발행한 비트코인 백서에 POW를 채택하면서 POW가 알려지게 되었다.

Consensus Algorithm

“자체 블록체인을 구축 하겠습니다!!!” 라고 하면 기계적으로 “합의알고리즘’은 무엇인가요?”라고 묻는 모습을 쉽게 볼 수 있다.

합의 알고리즘(consensus algorism)이란 다수의 참여자들이 통일된 의사결정을 하기 위해 사용하는 알고리즘을 말한다. 합의 모델합의 방식 또는 합의 프로토콜이라고도 한다.

쉽게 풀이하면 합의알고리즘이란 ‘누군가 생성한 블록을 누군가 믿기 위한 하나의 규칙’ 이라고 생각하면 좋을 것 같다.

예시를 통해 이해해보자.

‘공부를 하게 되면, 그것을 자료로 남기자.’ (합의 알고리즘)
(A) “난 Proof Of Work에 대하여 공부했어요.”
(B) “난 Proof Of Work에 대하여 공부 했어요. 여기 제가 쓴 글이 있어요”

단순히 ‘공부를 했다.’를 신뢰 하기는 힘들다. 그렇기 때문에 사전에 규칙을 정하고, 그 규칙을 통하여 ‘공부를 했다.’ ‘공부를 하지 않았다.’를 판단 한다.

이전 ‘제2장 비잔티움 장군의 딜레마’에서 장군들이 공격에 성공하기 위하여, 일정시간 동안 ‘깜지’를 쓴다는 예시를 들었다. 이것은 일정 시간 동안 ‘깜지’ (Work)를 통하여 메시지의 진위여부를 증명 한 것이다.

제2장에서 메시지를 합의하기 위하여, 일정시간 동안 최선을 다하여 메시지를 적는다.
Proof Of Work : ‘작업’을 통한 증명 (“난 이만큼 일했어!! 그러니까 믿어!”)
Proof Of Stake : ‘자산’을 통한 증명 (“난 이만큼 돈있어!! 그러니까 믿어!”)

Proof Of Work는 엄청난 수학문제를 푸는 것

비트코인은 다음 블록을 채굴(Mining)하기 위하여 작업증명방식을 거쳐야한다. 작년 봄 처음으로 POW에 대하여 찾아보았을 때. POW는 엄청난 수학문제를 푸는 것이라고 생각했다.

음.. 뭐 일반 유저들에게 설명하기엔 적절한 예시인 것 같기도 하고..
‘수학 난제를 푸는 것인가..? 수학자들 돈 엄청 벌겠네’

하지만, ‘POW는 어려운 수학 문제를 푼다.’라고 이해하기 보다는 스무고개를 통하여 해답을 찾아낸다고 생각하는 편이 옳다.

1. 이전 블록의 데이터로 TargetHash를 구한다.

자료 링크 : http://bit.ly/GH_Basic-1

Target Hash 값은 다음 블록을 열 수 있는 비밀 번호라고 생각하자. 64자리의 16진수로 이루어져있으며, 해당 값보다 작거나 같다면 자물쇠는 열린다.

Target Hash가 10 이라면, a ≤ 10 에 성립하는 a를 찾으면 된다.
(0 ~ 10의 값을 찾으면 자물쇠는 열린다.)

2. 다음 블록헤더에 이전 블록의 데이터를 기입하고 Nonce값을 증가 시키며 Hashing 한다.

[Nonce 0 대입] -> Hashing -> Value가 Taget Hash값보다 작거나 같은가?
[Nonce 1 대입] -> Hashing -> Value가 Taget Hash값보다 작거나 같은가?
[Nonce 2 대입] -> Hashing -> Value가 Taget Hash값보다 작거나 같은가?

위 작업에 대한 결과 값이 True 가 나올 때까지 Nonce를 변경하며 Hashing 한다.

[예제] 
TargetHash : ‘10000~~’ 이고, 
Nonce를 제외한 블록의 데이터가 ‘x기혁x표도x’ 라면

뒤에 붙는 숫자는 Nonce값이다.

Nonce 값은 Miner가 커스터마이징 할 수 있다. 어떤 Miner는 0부터 시작할 수도 있고, 어떤 Miner는 123942824 부터 시작할 수 있다.

즉, 10000000~~ 보다 작은 값을 찾아나는 것에 답은 여러가지 일 수 있다. 위 예제에서는 ‘x기혁x표도x1’과 ‘x기혁x표도x7’ 그 외에 수많은 Nonce값이 블록의 자물쇠를 여는 비밀번호가 될 수 있다.

결론

  • POW : ‘어려운 수학 문제를 푸는 것' (X)
  • POW : ‘정답을 맞출 때 까지 Nonce값을 증가 시키는 반복문' (O)
  • 정답일 될 Nonce는 무수히 많다.
  • 컴퓨터 한 대로 운이 좋다면, 채굴에 성공할 수 있다. (Nonce 값을 대입하는 규칙을 색다르게 만든다면.. 예를들어 짝수만 대입한다.)
  • 난이도 상승 : TargetHash 값의 범위가 점점 작아진다.
    (상승 전) : 1000000~~~
    (상승 후) : 0010000~~~
아마.. 사토시는 GPU 채굴까지 생각하지는 못 했을 것 같다. 한 책에서는 GPU채굴을 라슬로 한예크 (비트코인으로 피자 사신 분)가 처음 시작했다고 하고, 어떤 대학생이 Mining Pool 사업을 시작했다고 한다.
Mining Pool을 이용하는 것은 컴퓨터 한 대로 채굴할 수 있는 확률이 적으니, 다 같이 힘을 모아 채굴 확률을 높이고 보상을 1/N 하여 소득?을 보장 받기 위함이다.

참고 문헌