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




앞선 포스팅에서 비트코인 블록체인 구조를 살펴보았다.
(참조 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 인코딩

이 과정이 지나고 의 마지막 줄을 print 해주면 아래와 같은 Hash값이 나오게 되는데 Blockchain.info를 통해 블록 해쉬를 확인해보자.






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

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

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

댓글

이 블로그의 인기 게시물

비트코인 스크립트 scriptSig, scriptPubKey

비트코인 트랜잭션 ID 만들기 Create Bitcoin TXID

비트코인 지갑주소를 잘못입력하여 전달하면 어떻게될까?