앞선 포스팅에서 비트코인 블록체인 구조를 살펴보았다.
(참조 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노드에게 공유하는 것이다.
궁금한점이나 내용에 오류가 있다면 댓글바란다.