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

1. 파이썬으로 공부하는 블록체인 - Smart Contract (Feat. Solidity)

by 일등박사 2022. 8. 15.
728x90

2022.07.05 - [일등박사의 생각/[파공블]파이썬으로 공부하는 블록체인] - 1. 파이썬으로 공부하는 블록체인 - 코인과 토큰

 

1. 파이썬으로 공부하는 블록체인 - 코인과 토큰

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

drfirst.tistory.com


Smart Contract 라는 단어가 계속 나옵니다!!

사실 최근의 블록체인기술에서 Smart Contract는 

모든것이라고 볼 수 있습니다

NFT, Defi, DAO 등등 모든 새로운 기술은 모두 이 Smart Contract에서 시작됩니다!

 

이번 포스팅에서는 이 Smart Contract에 대하여 알아보곘습니다!!

 


우선 다시 과거에 소개했던

블록체인의 구성요소를 다시 복습해보겠습니다!

2022.06.23 - [일등박사의 생각/[파공블]파이썬으로 공부하는 블록체인] - 1. 파이썬으로 공부하는 블록체인 - 블록체인의 구성요소

 

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

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

drfirst.tistory.com

과거 포스팅에서 블록체인은

머리(Header)와 몸통(Body)으로 구성되며

머리에는 블록의 생성과 관련된 정보가,

몸통에는 거래내역 데이터가 저장된다고 소개했었지요~!

 

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
                  }

그런데!! Smart Contract는 이 거래내역에 추가됩니다!!

아래와 같이요!!

 

import hashlib
import datetime

## BODY :  Transaction의 모음
block_body =  { "transaction1": {
                            '판매자' : '파공블',
                            '구매자' : '김민수',
                            '개수' : '3개',
                            'timestamp' : 1652247422892844,
                            #####
                            "SMART_CONTRACT" : ""
                            #####
                               },
                    "transaction2": {
                            '판매자' : '파공블',
                            '구매자' : '이영호',
                            '개수' : '3개',
                             'timestamp' : 165224743233231,
                             #####
                             "SMART_CONTRACT" : ""
                             #####
                               }
                   }
                   
## 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
                  }

 이것이 바로 비트코인과 이더리움의 차이입니다!!

 

비트코인에는 Smart Contract가 없고

이더리움에는 Smart Contract가 있다!!

 

그렇다면 이 Smart Contract가 무슨 의미가 있을까요!?

바로 간단히 NFT를 만들어볼게요!!

 

import hashlib

genesis_block =   {'INDEX':0,
                    "previous_hash" : hash_data,
                    '판매자' : '파공블',
                    '구매자' : '김민수',
                    '개수' : '3개',
                    '시간' : '2022년 5월 11일 16시 25분 16초',
                    'SMART CONTRACT' : { '파일명':    'first_transaction.jpg',
                                   '파일소개':  '첫 거래내역',
                                   '파일데이터' : 'ASDFN8190u9w38fdd98982fdd (이미지정보)'} ,
                    'previous_block' : None
                  }
hash_data = hashlib.sha256(str(genesis_block).encode()).hexdigest()
print(hash_data)

 

어때요?? 

Smart Contract 부분에 저장하고 싶은 파일의 이름, 파일소개내역, 그리고 파일 데이터를 저장하였습니다!!

 

이렇게 된다면 이 파일의 내역이 블록에 저장되는것이며 

즉!! 이후 블록의 내역이 수정될수 없기에 이 데이터는 영원히 이 블록에 남겨지는!

NFT 가 되는것입니다!!

 

어떄요? 이해가 잘 되시나요? 

다음 코드를 보시죠!!

 

## DAO
block_4 = {'INDEX':4,
            '판매자' : '김영수',
            '구매자' : '파공블DAO',
            '개수' : '3000개',
            '시간' : '2022년 5월 18일 16시 25분 16초',
            'SMART CONTRACT' : { '조직명':    '파공블',
                           '조직운영룰':  {'1': '회장은 홍길동으로 한다', '2':'본사는 서울시 종로구이다'},
                           '조직의결권' : 'DAO코인을 가진사람은 DAO코인 개수에 따라 의결권을 갖는다'
                     
                         } ,
             "previous_hash" : hash_data
              }

hash_data = hashlib.sha256(str(block_3).encode()).hexdigest()
print(hash_data)

이번 SMART CONTRACT에 숨겨진 내용은 무엇을 의미하는것 일까요!?

맞습니다! 이러한 방식으로 DAO가 생성됩니다!!

 

마지막!!

## DEFI
block_4 = {'INDEX':4,
            '판매자' : '김영수',
            '구매자' : '파공블 Defi',
            '개수' : '3000개',
            '시간' : '2022년 5월 18일 16시 25분 16초',
            'SMART CONTRACT' : 'code 내용을 여기에 심어서 작동되도록 설정 - int a int b a+b for i in range(a+n)' ,
             "previous_hash" : hash_data              }

hash_data = hashlib.sha256(str(block_3).encode()).hexdigest()
print(hash_data)

 

Smart Contract에 꼭 단순한 데이터만 들어가란 법은 없습니다

일부는 이 Smart Contract부분에 코드를 숨겨 놓았고 이후 이 위변조 불가능한

블록에  smart contract 부부을 호출하면 나만의 함수를 호출할 수 있게되어

 

이 데이터를 기반으로 Defi, Dex 등 다양한 DApp을 만들 수 있게 됩니다!!

(이더리움의 경우 이 Smart Contract에 함수를  Solidity라는 언어로 작성하게됩니다!)

 

감사합니다!^^

728x90

댓글