비트코인의 난이도 구하는 방법 (How to calculate the difficulty of bitcoin)

in #kr8 years ago (edited)

 (bitcoin 테그로 올렸던 글을 kr 테그로 다시 올립니다.) 


아래 그림은 비트코인의 블럭 헤더부에 포함된 bits로부터 난이도(difficulty)를 구하는 방법을 보여줍니다.

여기서 난이도는 새로운 블럭을 발견하기 얼마나 어려운지를 보여주는 숫자를 말합니다.

일단 bits에서 target을 구합니다. 먼저, bits를 16진수로 바꾸고, 앞의 두개의 수와 뒤의 6개의 수를 분리하여 target 공식에 넣고 계산을 하면 됩니다.

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

그리고 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)하게 되고,,

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

비트코인의 블럭해시를 구하는 방법은 아래를 참조하세요.

(https://steemit.com/kr/@loum/how-to-calculate-the-block-hash-in-bitcoin)

Coin Marketplace

STEEM 0.29
TRX 0.12
JST 0.034
BTC 63521.22
ETH 3319.09
USDT 1.00
SBD 3.91