비트코인 블록 해쉬 구하기 Create BItcoin Block Hash Value

in #kr6 years ago (edited)

앞선 포스팅에서 비트코인 블록체인 구조를 살펴보았다.
(참조 https://steemit.com/kr/@niipoong/block-chain-bitcoin-block-chain-structure )

블록은 Header와 Body로 나뉘며 , Header에는 이전 블록의 Hash값이 포함된다고 하였다.

또한 Header의 내용을 바탕으로 블록의  Hash가 산출되며

Header의 내용으로는

version, preBlockHash, merkleRoot, timestamp, nonce, bits 총 6가지 이다.

지금부터 간단히 파이썬 코드로 이 6가지 항목으로 Hash값을 구해보자.

현재 (2018-03-02 11:15:36 )가장 최신 블록인  # 511618 번 블록으로 정했다.
이 블록의 Hash를 구해보도록 하자.

먼저 https://blockchain.info 의 API 를 통해 511618블록의 정보를 가져와서, 필요한 헤더정보만을 추려보자.

아래와 같은 정보를 얻을 수 있다.


그 다음 할일은 현재 Hex값이 아닌 version, bits, nonce, time 네개를 Hex값으로 변환해준다.


Hex값으로의 변환이 잘됐으면 모든 값들을 Reverse Byte ordering 해준다. 


이후 version + preHash + merkleRoot + time + bits + nonce 순서로 byte를 하나로 이어준다.

마지막으로 이렇게 합쳐진 headerItems 를 

1. Hex 디코딩

2. SHA256 + digest() 를 더블 해쉬를 해준다.

3. Hex 인코딩

짠!

위와 같은 Hash값을 구했다. 511618번 블록의 해쉬값을 찾았다.
Blockchain.info를 통해 블록 해쉬를 확인해보자. 아래 빨간 화살표 부분을 보면 위에서 구한 Hash와 일치함을 확인 할 수 있다.


실제 Header내부의 정보들로 511618블록의 Hash를 산출해 보았다.

비트코인 P2P네트워크에 존재하는 모든 채굴노드들은 모두 위와같은 과정으로 블록의 Hash값을 찾고있다. 그리고 찾은 Hash값을 자신의 Block-chain 데이터베이스에 저장하며, peer노드에게 공유하는 것이다.

궁금한점이나 내용에 오류가 있다면 댓글바란다.