반응형

블록체인(Blockchain)은 거래 기록이 담긴 블록이

체인처럼 서로 연결되어 있는 구조를  말합니다.

요즘 많은 사람들이 암호화폐에 대해서 관심 있어서

블록체인(Blockchain)은 더욱더 인기가 높아지고 있습니다.

 

오늘은 파이썬(python)을 사용해서 간단한 

블록체인(Blockchain)을 만들어보겠습니다.

먼저 블록체인(Blockchain) 특징을 알아보겠습니다.

블록체인은 3가지 특징이 있습니다.

첫 번째 특징 분산화

블록체인에 저장된 모든 정보가 전체
네트워크의 한 단위로 동작합니다.
중앙 집중식 권한이 없이 모든 노드 간의
정보 공유가 가능합니다.

두 번째 특징 불변성
블록체인의 모든 데이터는 추가 적용됩니다.
데이터를 삭제하지 않으며
과거에 무언가를 수정하려면
새로운 주석 데이터를 추가해야 합니다.

세 번째 특징 분산 원장
블록체인은 공개 또는 비공개가 가능합니다.
하지만 특정 누구에게 속하는 것이
아닌 그룹에만 속합니다.

블록체인(Blockchain)은 기본적으로 Hash를 사용해서

고유성을 유지합니다.

각 블록에는 Previous hash, Current hash를 사용해서

블록 간에 연결을 유지합니다.

파이썬(python)에서 hash를 사용하기 위해서는

hashlib를 import 해줘야 합니다.

hash를 사용할 경우 가장 중요한 내용이 있습니다.

일반적으로 hahs class를 사용해서 update를

할 경우 아래와 같은 error가 발생합니다.

"unicode-objects must be encoded before hashing"

상기 오류는 hash에 사용되는 text 정보를

encode 해줘야 합니다.

먼저 Block Class를 만들어 보겠습니다.

Block Class는 __init__ 함수를 사용해서 index, timestamp

data, previous_hash, hash를 설정합니다.

hash_block() 함수는 블록 정보를 한 번에 출력할 수 있습니다.

hash_block() 함수에서 sha.update를 사용할 경우

입력 text를 encode('utf-8') 함수를 사용해서

encode을 진행해야 오류가 발생하지 않습니다.

create_gensis_block() 함수를 생성합니다.

create_gensis_block() 함수는 초기화 함수로

최초 block을 생성합니다.

블록체인(Blockchain)을 연결하기 위한

next_block() 함수를 정의합니다.

신규 블록을 생성해서 hash 정보에

마지막 블록 hash 정보를 저장합니다.

블록체인(Blockchain)을 생성하기 위해서

최초 블록을 저장합니다.

저장된 블록은 총 20개로 순차적으로

블록을 생성해서 연결합니다.

컴파일 결과 20개의 블록이 순차적으로

연결되어 저장되었습니다.

Hash 정보를 확인하면 중복되지 않는 정보로

고유성을 유지하면서 블록체인(Blockchain)을 연결합니다.

전체 소스 내용

import datetime
import hashlib
from datetime import datetime


class Block:
    def __init__(self, index, timestamp, data, previous_hash):
        self.index = index
        self.timestamp = timestamp
        self.data = data
        self.previous_hash = previous_hash
        self.hash = self.hash_block()
    def hash_block(self):
        sha = hashlib.sha256()
        data = str(self.index) + str(self.timestamp) +  str(self.data) + str(self.previous_hash)
        sha.update(data)
       #sha.update( data.encode('utf-8'))
        return sha.hexdigest()

def create_genesis_block():
    return Block(0, datetime.now(), "Genesis Block", "0")


def next_block(last_block):
    this_index = last_block.index + 1
    this_timestamp = datetime.now()
    this_data = "Block Data :  " + str(this_index)
    this_hash = last_block.hash
    return Block(this_index, this_timestamp, this_data, this_hash)
    
if __name__ == '__main__':
	blockchain = [create_genesis_block()]
    previous_block = blockchain[0]

    num_of_blocks_to_add = 20

    for i in range(0, num_of_blocks_to_add):
        block_to_add = next_block(previous_block)
        blockchain.append(block_to_add)
        previous_block = block_to_add
        print("Block #{} added blockchain".format(block_to_add.index))
        print("Block Data: {}n".format(block_to_add.data))
        print("Block Hash: {}n".format(block_to_add.hash))

 

블록체인(Blockchain)은 매우 복잡한 구조로 동작합니다.

오늘은 간단하게 hash를 사용해서 블록체인(Blockchain) 

개념을 확인했습니다.

파이썬(python)으로 간단하게 구현이 가능하기 때문에

한번 정도 코딩하시면서 공부하는 것을 추천합니다.

감사합니다.

반응형

+ Recent posts