#!/usr/bin/env python # -*- coding: utf-8 -*- import hashlib import time import json block = { 'block_id': 1, 'difficulty': '00000' } def proof_of_work(block): start_time = time.time() sha_block = hashlib.sha256(block).digest() json_block = json.loads(block) diffu = json_block['difficulty'] proof = 0 while True: work = hashlib.sha256(sha_block + str(proof)).hexdigest() if work.startswith(diffu): finished_time = time.time() done_time = finished_time - start_time print '-------------------' print 'Difficulty:', diffu print 'Proof Number:', proof print 'Time:', done_time print '-------------------' break else: proof += 1 return (block, proof) def verify_work(data): block, proof = data sha_block = hashlib.sha256(block).digest() json_block = json.loads(block) work = hashlib.sha256(sha_block + str(proof)).hexdigest() if work.startswith(str(json_block['difficulty'])): return True # Accepted else: return False # Rejected working = proof_of_work(json.dumps(block)) verified = verify_work(working) if verified: print 'Block has been accepted!' else: print 'Block has been rejected!'