본문 바로가기
블록체인/[파공블]파이썬으로 공부하는 블록체인

1. 파이썬으로 공부하는 블록체인 - 블록체인의 구성요소

by 일등박사 2022. 6. 23.
728x90

2022.05.29 - [일등박사의 생각/[파공블]파이썬으로 공부하는 블록체인] - [파공블]파이썬으로 공부하는 블록체인(목차)

 

[파공블]파이썬으로 공부하는 블록체인(목차)

2022.05.28 - [일등박사의 생각/파이썬으로 알아보는 블록체인] - [파공블]파이썬으로 공부하는 블록체인(Intro-1) 2022.05.29 - [일등박사의 생각/파이썬으로 알아보는 블록체인] - [파공블]파이썬으로 공

drfirst.tistory.com


 

 

지금까지 배운 내용을 간단히 정리해보자면!!

블록체인이란 블록들이 암호해시체인으로 연결된것!!

입니다!!!

 

블록체인을 공부하며 떠오르는 생명체가 있는데!!

바로 거미입니다

 

1. 거미(블록) 들이 거미줄(체인)을 통하여 연결되는 것이 비슷했고

2. 구성요소가 "머리" 와 "몸통" 두가지로 비슷했기때문입니다!

 

초등학교시절 곤충들에 대하여 배우길, 머리/가슴/배 3개의 부분으로 구성된다고 했는데요~!

거미는 이와 다른 절지동물로서 머리와 몸통 2개의 부분으로 구성된다고 하였습니다!!

 

우리가 배우고 있는 블록체인도 마찬가지 입니다!!

머리(header)와 몸통(Body)로 이루어지고 있는데요!!

블록(Block)의 구성요소: 머리와 몸통

Header(머리) 부분에는 크게 아래 4개 정보가 저장되어 있구요!!

1. 이전부분의해시 : 전블록이 변조되었는지를 확인할 수 있다

2. 블록 생성시간 : 해당 블록이 언제 생성되었는지를 알 수 있다

3. Body 해시 : Body( 몸통)의 내용이 해시되어 변조되었는지를 알 수 있다

4. Nonce : 채굴과 관련된 신기한부분!! 이후  더 알아볼 예정

 

Body(몸통) 부분에는 거래되었던 내역이 저장되있습니다.

 

파이썬으로 비교해보아요!!!

Python 코드로

머리와 몸통으로 구성된 첫 블록( Genesis block)을 만들어 보겠습니다!!

import hashlib
import datetime

## BODY :  Transaction의 모음
block_body =  { "transaction1": {
                            '판매자' : '파공블',
                            '구매자' : '김민수',
                            '개수' : '3개',
                            'timestamp' : 1652247422892844,
                               },
                    "transaction2": {
                            '판매자' : '파공블',
                            '구매자' : '이영호',
                            '개수' : '3개',
                             'timestamp' : 165224743233231
                               }
                   }
                   
## BODY의 모든 내역을 해시함수를 활용하여 해시로 만듬!!                   
body_hash = hashlib.sha256(str(block_body).encode()).hexdigest()


## HEAD : 블록의 머리부분! 4개의 구성요소값으로 구성
block_header =  {  'previous_hash' : "0",
                 "block_created_at" : datetime.datetime.now().timestamp(),
                 "body_hash" : body_hash,
                 "nonce" : "nonce??"
                }
                
## Header와 Body를 묶어 첫번째 블록(genesis_block)을 생성!!                
                
genesis_block =  {'header' : block_header,
                   'body' : block_body
                  }

잘 이해되지요!?

그럼 이제 이 첫블록에 이어지는 2번재 블록을 파이썬 코드로 보아요!!

 

import hashlib
import datetime

## BODY :  Transaction의 모음
block_body2 =  { "transaction1": {
                            '판매자' : '김민수',
                            '구매자' : '김민목',
                            '개수' : '3개',
                            'timestamp' : 1662247422892844,
                               },
                    "transaction2": {
                            '판매자' : '이영호',
                            '구매자' : '이일호',
                            '개수' : '3개',
                             'timestamp' : 165224743833231
                        
                               }
                   }
                   
## BODY의 모든 내역을 해시함수를 활용하여 해시로 만듬!!                   
body_hash2 = hashlib.sha256(str(block_body2).encode()).hexdigest()

## HEAD : 블록의 머리부분! 4개의 구성요소값으로 구성
block_header2 =  {  'previous_hash' : hashlib.sha256(str(genesis_block).encode()).hexdigest(),###가장 크게 바뀐 부분!! 전 블록(genesis_block) 을 해시하여 넣는다!
                 "block_created_at" : datetime.datetime.now().timestamp(),
                 "body_hash" : body_hash2,
                 "nonce" : "nonce??"
                }
                
## Header와 Body를 묶어 두번째 블록(block_2)을 생성!!                
                
block_2 =  {
                  'header' : block_header2,
                   'body' : block_body2
                  }

새로운 거래내역이 들어가고,

머리부분의 previous_hash에 전블록(genesis_block)의 해시값이 들어간다는 차이점이 있었습니다!!

 

지금까지 우리는

거미와 비슷(?)하게 블록체인을 머리와 몸통으론 나누어

그 구성요소를 학습해보았습니다!!

 

다음챕터에서는 비밀로 남겨두었던 nonce에 대하여 공부해보아요!

 

화이팅!!

 

728x90

댓글