[Blockchain A-Z] 블록체인 만들기 : step 3-5

yebeen·2022년 8월 4일
0

Blockchain A-Z

목록 보기
14/43
post-thumbnail

블록체인 설계

libraries

import datetime
import hashlib
import json
from flask import Flask, jsonify
  • datetime : 블록이 생성되고 채굴된 정확한 날짜의 타임스탬프를 각 블록이 가질 때 사용
  • hashlib : 블록을 해시할 때 사용
  • json : 블록을 해시하기 전에 블록 인코딩을 위해 upmps 함수를 이용
  • Flask : 웹 애플리케이션이 되는 Flask 클래스의 객체를 생성
  • jsonify : Postman에서 블록체인과 상호 작용할 때 메시지를 보내기 위해 사용

블록체인 설계

클래스를 이용해서 복잡한 프로그램 등 원하는 모든 것을 구현할 수 있습니다. 그 이유는 클래스가 속성, 함수, 도구, 메서드 등을 포함할 수 있는 향상된 구조로 구성되어 있기 때문에 설계하려는 것과 상호 작용하기 때문입니다.

예를들어, 자율 주행 차를 위한 클래스를 ㅁ나든다면 자율 주행 차의 모든 속성을 클래스에서 정의하고 더불어 전진, 후진, 좌회전, 우회전, 브레이크 등의 메서드를 추가해야 합니다. 이 모든 작업을 클래스에 포함한 메서드에 넣을 수 있습니다. 이런 향상된 시스템을 블록체인을 설계할 때 사용할 것입니다.


클래스 정의

블록체인의 모든 컴포넌트와 모든 특징을 정의합니다.

class Blockchain:
	def __init__(self):
    	self.chain = []
        self.create_block(proof = 1, previous_hash = '0')
    def create_block(self, proof, previous_hash):
    	block = {'index' : len(self.chain) + 1,
    			'timestamp' : str(datetime.datetime.now()),
    			'proof' : proof,
        		'previous_hash' : previous_hash}
        self.chain.append(block)
        return block
	def get_previous_block(self):
    	return self.chain[-1]
  • init 함수에 들어갈 체인을 초기화 합니다.
  • create_block을 이용해 제네시스 블록을 생성합니다.
    • 이전 해시값이 없어 임의의 값을 제공해야 합니다.(일반적으로 0)
  • create_block으로 블록체인 필수 키 설정(self, 증명, 이전 해시 인수를 취하고 역할을 정의)합니다.
    • 새로운 블록 추가를 위해 블록 함수를 생성해 나중에 블록에 사용합니다.
    • index : 체인 길이 + 1로 합니다.
    • timestamp : now 함수를 사용해 함수를 호출한 정확한 시간을 반환합니다. json형식으로 작업을 처리할 수 있도록 str을 추가합니다.
    • proof : 지금은 인수만 지정했지만, 나중에 증명을 얻기 위한 작업 증명 함수를 만들어 볼 것입니다.
    • previous_hash : 이전 블록의 해시를 취합니다.
  • append함수를 이용해서 체인을 추가합니다.
  • Postman에 표시하기 위해 블록을 반환합니다.
  • 블록호출을 위해 get_preivous_block을 작성합니다.
    • get_preivous_block는 현재 체인의 마지막 블록을 얻기위해 self인자를 갖습니다.
    • return self.chain[-1] : 체인의 마지막 블록을 불러옵니다.

이후 블록체인을 유효하게 만들 몇 가지 도구를 추가하여 해킹하거나 깨트릴 수 없는 유효한 블록체인이 됩니다.

profile
🐣🐥

0개의 댓글