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

yebeen·2022년 8월 4일
0

Blockchain A-Z

목록 보기
15/43
post-thumbnail

작업증명

작업 증명은 채굴자들이 새로운 블록을 채굴하기 위해 찾아내야 하는 데이터 또는 숫자를 뜻합니다. 따라서 채굴자들이 해결해야 하는 문제를 정의할 것입니다.

작업 증명은 어려워야 합니다. 만약, 채굴자들이 찾아내기 쉬운 숫자일 경우 엄청난 양의 암호화폐를 얻게 되는 것입니다. 채굴이 쉬우니 그 가치도 떨어지는 것이죠. 따라서 습득을 어렵게 만들어 그 값어치를 보존해야 합니다.

반면에 검증은 쉬워야 하는데, 문제를 해결하고 작업 증명을 발견한 채굴자가 진정으로 그 문제를 해결한 첫 번째 채굴자인지 확인할 수 있어야 하기 때문입니다.

...
코드 생략
...
class Blockchain:
    ...
    코드 생략
    ...
    def proof_of_work(self, previous_proof):
    	new_proof = 1
        check_proof = False
        while check_proof is False:
        	hash_operation = hashlib.sha256(str(new_proof**2 + previous_proof**2).encode()).hexdigest()
            if hash_operation[:4] == '0000':
            	check_proof = True
            else:
            	new_proof += 1
  • 작업 증명 함수 proof_of_work를 추가합니다.
    • self : 클래스로부터 생성될 인스턴스 객체에 작업 증명 메서드를 적용해야 하므로 인수로 사용합니다.
    • previous_proof : 채굴자들이 해결할 문제를 생성하기 위해 이전 증명을 고려합니다.
  • 새로운 증명 변수 new_proof를 도입하고 올바른 증명을 얻을 때까지 접근해 문제를 해결해 나갑니다.
  • 신규 증명이 올바른 증명인지 확인하기 위한 변수 check_proof를 도입하고 해답이 아니므로 False로 설정해둡니다.
  • sha256 암호화 함수와 hexdigest 함수를 결합하여 64자 문자열을 도출해 냅니다.
  • new_proof**2 + previous_proof**2를 통해 증명 간 위치가 바뀌어도 동일하기 ㄸ매누에 신규 증명을 증가시키다 보면 어느 시점에 신규 증명이 곧 과거의 이전 증명이 됩니다.
    • 연산이 비대칭이기 때문에 블록을 채굴할 때 두 블록마다 동일한 증명이 나옵니다.
  • while 조건에 따라 루프를 멈추고 신규 증명을 노출해 냅니다.

도출해낸 신규 증명은 블록이 채굴되는 즉시 이용할 블록 생성 함수에 대한 증명이 됩니다.

profile
🐣🐥

0개의 댓글