└── Blockchain.py /Blockchain.py: -------------------------------------------------------------------------------- 1 | import hashlib 2 | import time 3 | 4 | class Blockchain: 5 | def __init__(self): 6 | self.chain = [] 7 | self.create_block(previous_hash='1', proof=100) 8 | 9 | def create_block(self, proof, previous_hash): 10 | block = { 11 | 'index': len(self.chain) + 1, 12 | 'timestamp': time.time(), 13 | 'proof': proof, 14 | 'previous_hash': previous_hash, 15 | } 16 | self.chain.append(block) 17 | return block 18 | 19 | def get_previous_block(self): 20 | return self.chain[-1] 21 | 22 | def proof_of_work(self, previous_proof): 23 | proof = 1 24 | while not self.valid_proof(proof, previous_proof): 25 | proof += 1 26 | return proof 27 | 28 | def valid_proof(self, proof, previous_proof): 29 | guess = f'{previous_proof}{proof}'.encode() 30 | guess_hash = hashlib.sha256(guess).hexdigest() 31 | return guess_hash[:4] == '0000' 32 | 33 | # Example usage 34 | blockchain = Blockchain() 35 | previous_block = blockchain.get_previous_block() 36 | previous_proof = previous_block['proof'] 37 | proof = blockchain.proof_of_work(previous_proof) 38 | blockchain.create_block(proof, previous_block['previous_hash']) 39 | --------------------------------------------------------------------------------