From 374cbc2bf99406315c40e02f9dc3f7ecf6699f5e Mon Sep 17 00:00:00 2001 From: DIVYASREE S Date: Thu, 10 Oct 2024 21:50:01 +0530 Subject: [PATCH] Created proof_of_work.py --- blockchain/proof_of_work.py | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 blockchain/proof_of_work.py diff --git a/blockchain/proof_of_work.py b/blockchain/proof_of_work.py new file mode 100644 index 000000000000..3055eaf671f2 --- /dev/null +++ b/blockchain/proof_of_work.py @@ -0,0 +1,32 @@ +import hashlib +import time + +def proof_of_work(difficulty: int) -> int: + """ + Simulates a Proof of Work mining process. + + The miner must find a nonce such that the hash of the nonce starts + with a specific number of leading zeros (difficulty). + + Args: + difficulty (int): The number of leading zeros required in the hash. + + Returns: + int: The nonce value that solves the puzzle. + + Example: + >>> result = proof_of_work(2) # Difficulty of 2 should be fast + >>> isinstance(result, int) + True + """ + prefix = '0' * difficulty + nonce = 0 + start = time.time() + + while True: + hash_result = hashlib.sha256(f"{nonce}".encode()).hexdigest() + if hash_result.startswith(prefix): + end = time.time() + print(f"Nonce: {nonce}, Hash: {hash_result}, Time: {end - start:.2f}s") + return nonce + nonce += 1