brunch

매거진 암호화폐

You can make anything
by writing

- C.S.Lewis -

by loum Nov 01. 2017

비트코인의 난이도를 구하는 방법

비트코인에서 타겟값과 난이도 구하는 방법

비트코인의 블록은 헤더부와 거래부로 구성되고, 헤더부에는 타겟값과 난이도를 구하기 위한 bits를 포함합니다.


아래 그림은 bits로부터 타겟(target)값과 난이도(difficulty)를 구하는 방법을 보여줍니다.


위 그림에서 제일 중요한 것은 target 값을 구하는 방법이고, 왜냐하면 비트코인의 합의 알고리즘인 작업증명은 타겟값보다 작은 블록해시 값을 가진 블록을 먼저 찾는 게임이고, 이 조건을 만족하는 블록해시를 찾을 때 까지 nonce를 증가시키면서 계속 블록을 찾는 게임이기 때문이다.


작업증명은 1) 다른 노드가 이 조건을 만족하는 블록을 찾은 블록을 전파받거나 또는 2) 자신이 이 조건을 만족하는 블록을 찾으면 다음 블록을 찾게 된다.


1. 일단 bits에서 target 값을 구합니다.

타켓값을 구하기 위해서, 먼저 1) 위 그림과 같이 bits를 16진수로 바꾸고, 2) 그림에서 2번에 보인 공식에 bits의 16진수에서 앞 두자리와 뒤의 6자리 수를 이 그림과 같이 대입하여 구합니다.


즉 그림의 빨간색, 파란색 부분에 해당하는 16진수 bits를 넣어주면 되며, 이때 계산된 값이 current_target 이 됩니다.


2. 난이도는 새로운 블럭을 발견하기 얼마나 어려운지를 보여주는 숫자를 말하며, 난이도는 3번 수식으로 구합니다.


그림의 3번 수식에서  maximum_target은 상수로서,  0x00000000FFFF0000000000000000000000000000000000000000000000000000 로 미리 정해져 있습니다.


이때, 난이도는 아래 수식으로 구합니다.


                  difficulty  = maximum_target / current_target


따라서, current_target이 작으면 비트코인의 난이도가 높아지며,  current_target이  maximun_target일 때 난이도가 1이 됩니다.


최대 난이도는 maximum_target / 1이며, 약 2^(224)입니다.


비트코인의 난이도는 https://bitcoinwisdom.com/bitcoin/difficulty 에서 볼 수 있습니다.

아래 그림에 난이도에 내용을 확인할 수 있습니다.



1) 비트코인의 작업증명(proof of work) 원리는 current_target 보다 작은 블럭해시를 누가 먼저 찾는지를 겨루는 해시 계산 게임입니다.


2) 여기서, current_target 이 매우 중요한 값인데요..
블럭의 헤더(header)에서 구한 블럭 해시가 current_target 보다 같거나(?) 작아야만 블럭을 찾은 것이 됩니다.. 즉 제일 먼저 current_target보다 작은 블럭해시를 찾은 마이너가 비트코인을 보상으로 받게 됩니다.


3) 비트코인의 블럭은 블럭헤더(header)과 블럭몸체(body)로 나뉘는데..
블럭헤더에 있는 요소를 더하여 블럭해시를 구하고 이것이 current_target 보다 크면 다시 nonce를 증가시켜서 새로운 블럭해시를 찾습니다.


블럭해시를 찾을 때까지 찾다가 다른 마이너가 찾았다고 찾은 블럭을 전파(broadcast)하게 되고,,

전파받는 마이너는 이를 검증하여 검증이 맞으면 다음 블럭을 다시 찾게 됩니다.

매거진의 이전글 스팀 코인에서 글로 돈벌기는 버블인가?

매거진 선택

키워드 선택 0 / 3 0
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari