작업 증명은 채굴자들이 새로운 블록을 채굴하기 위해 찾아내야 하는 데이터 또는 숫자를 뜻합니다. 따라서 채굴자들이 해결해야 하는 문제를 정의할 것입니다.
작업 증명은 어려워야 합니다. 만약, 채굴자들이 찾아내기 쉬운 숫자일 경우 엄청난 양의 암호화폐를 얻게 되는 것입니다. 채굴이 쉬우니 그 가치도 떨어지는 것이죠. 따라서 습득을 어렵게 만들어 그 값어치를 보존해야 합니다.
반면에 검증은 쉬워야 하는데, 문제를 해결하고 작업 증명을 발견한 채굴자가 진정으로 그 문제를 해결한 첫 번째 채굴자인지 확인할 수 있어야 하기 때문입니다.
...
코드 생략
...
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
도출해낸 신규 증명은 블록이 채굴되는 즉시 이용할 블록 생성 함수에 대한 증명이 됩니다.