비트코인의 블럭해시를 구하는 방법 (How to calculate the block hash in Bitcoin)

in #kr8 years ago (edited)

아래 그림은 비트코인에서 블럭의 블럭해시(Txid)를 구하는 방법을 개략적으로 보여줍니다.,


비트코인의 블럭해시를 구하는 방법은  블럭 해더부에 있는  ver,  prev_block,  mrkl_root,  time, bits, nonce를 합친다.


여기서 ver는 비트코인 버전이고,  prev_block는 바로 전 블럭의 블럭해시입니다. 

현재 블럭의 블럭 해시를 만들 때 이전 블럭 해시가 포함되기 때문에 블럭을 체인으로 묶은 것과 같다고 하여 블럭체인이라고 부릅니다.

그리고,  mrkl_root는 거래 데이터를  암호화하여 트리 형태로 만들어서 최상에 있는 머클트리의  root 값입니다. 

time은 unix에서 사용되는 timestamp, bits는 난이도를 표시하고, nonce는 원하는 블럭해시를 찾을 때까지 0부터 +1로 증가시켜서 블럭해시를 다시 계산하도록 합니다.


주의할 것은, 이때 이들은 모두 반대 순서로 바꾼 후에 하나로 합친다는 것입니다.

이때 이것을 digest로 메세지 암호화를 한 후 이후 sha256으로 다시 암호화를 하며 이를 두번 해주고,, 이를 뒤로 다시 뒤집어서 블럭의 해쉬값을 구합니다.


두번째 그림에서는 제가  실제로 python언어를 이용하여 블럭의 해쉬(TxID)를 구하는 방법을 실제로 보였습니다.



위 그림의 맨 아래의 부분이 계산한 블럭 해시가 되고, 박스 부분에 영(zero) 의 개수가 bits에서 정해지는 영의 개수보다 많으면 블럭을 찾게 되고 보상으로 당시는 50 비트의 보상이 주어졌습니다. 현재는 12.5비트의 보상이 주어집니다.

아래는 blockexplorer에서 찾은 실제 비트코인의 블럭의 내용을 보여 줍니다. 그림의 박스 부분이 실제 블럭해시입니다. (계산으로 구한 블럭해시(2번째 그림)와 실제 블럭해시(3번째 그림)가 똑같습니다. (https://blockexplorer.com/block/00000000000000001e8d6829a8a21adc5d38d0a473b144b6765798e61f98bd1d)


Sort:  

블럭체인은 블럭이 체인으로 서로 연결 되어 있습니다.
이 연결은 이전 블럭의 블럭해시를 현 블럭의 해시를 만들 때 사용하기 때문에 블럭들이 체인으로 연결되는 것입니다.

그리고, 블럭은 해더부와 몸체부로 구성되는 데.. 블럭해시는 위의 첫번째 그림에 보인 블럭에 해더부에 있는 요소(ver, nonce, prev_block 등)을 모두 합쳐서 구하는 것입니다..

그리고, 몸체부에는 거래(이체) 데이터가 있고요.. 이들을 binary tree 형태인 머클트리로 만들어서 그 root를 mrkl_root라는 항목으로 블럭 헤더에 포함이 되는 것입니다.

세번재 그림 맨 아래의 transactions 의 첫번째 거래가 나오는데요..
이 첫번째 거래는 블럭을 찾은 보상으로 마이너(miner)에게 주어지는 보상입니다. 해당하는 블럭은 보상으로 50 비트코인이 주어졌습니다.

'블럭체인이라고 부르는 이유'는 블럭의 헤더부의 prev_block이 포함되고 현재 블럭의 블럭 해시를 만들 때 이전 블럭의 블럭해시(prev_block)가 포함되어 계산하기 때문에 블럭체인이라고 부르는 것입니다.

Coin Marketplace

STEEM 0.29
TRX 0.12
JST 0.033
BTC 62963.68
ETH 3115.67
USDT 1.00
SBD 3.89