[Blockchain A-Z] 블록체인 만들기 : step 7 - 8

yebeen·2022년 8월 12일
0

Blockchain A-Z

목록 보기
16/43
post-thumbnail

블록체인의 유효성 확인

1. 블록체인 해시 함수

- 전체 블록이 유효한지 확인

import datetime
import hashlib
import json
from flask import Flask, jsonify

class Blockchain:
    ...
    코드 생략
    ...
    def hash(self, block):
    	encoded_block = json.dumps(block, sort_keys = True).emcode()
        return hashlib.sha256(encoded_block).hexdigest()
  • 블록을 입력값으로 갖고 해당 블록에 대한 SHA256 암호화 해시를 그 결과로 반환합니다.
  • Json 라이브러리의 dumps 함수를 이용해 블록의 딕셔너리를 문자열로 변경 합니다.

2. chain valid()

- 이전 블록의 해시와 동일한지 확인

def is_chain_valid(self, chain):
	previous_block = chain[0]
    block_index = 1
    while block_index < len(chain):
        block = chain[block_index]
        if block['previous_hash'] != self.hash(previous_block):
            return False
  • 이전 블록의 해시가 동일한지를 파악하는 것이기 때문에 이전 블록 변수 또는 초기화해야 합니다.
  • 최종 인덱스len(chain)에 도달하기 전까지 반복하여 확인합니다.
  • previous_hash 키로 현재 블록과 비교해 체인이 유효한지 확인합니다.

- 작업 증명 문제에 따라 각 블록이 증명이 유효한지 확인

previous_proof = previous_block['proof']
            proof = block['proof']
            hash_operation = hashlib.sha256(str(proof**2 + previous_proof**2).encode()).hexdigest()
            if hash_operation[:4] != '0000':
            	return False
  • 증명 키 proof를 호출해 블록의 증명을 볼 수 있습니다.
  • 현재 블록에 대한 증명과 이전 블록에 대한 증명 간 해시 연산을 수행해 값을 확인합니다.

코드

import datetime
import hashlib
import json
from flask import Flask, jsonify

class Blockchain:
    ...
    코드 생략
    ...
    def is_chain_valid(self, chain):
    	previous_block = chain[0]
        block_index = 1
        while block_index < len(chain):
        	block = chain[block_index]
            if block['previous_hash'] != self.hash(previous_block):
            	return False
            previous_proof = previous_block['proof']
            proof = block['proof']
            hash_operation = hashlib.sha256(str(proof**2 + previous_proof**2).encode()).hexdigest()
            if hash_operation[:4] != '0000':
            	return False
            privouse_block = block
            block_index += 1
        return True
profile
🐣🐥

0개의 댓글