From 95732058fbbab279f7484202915a3ddfd95a4a11 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 3 Oct 2024 09:49:33 +0000 Subject: [PATCH] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- blockchain/PoWAlgorithm.py | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/blockchain/PoWAlgorithm.py b/blockchain/PoWAlgorithm.py index 99b74876d..c85ee1eba 100644 --- a/blockchain/PoWAlgorithm.py +++ b/blockchain/PoWAlgorithm.py @@ -22,6 +22,7 @@ The algorithm implements the Proof of Work (PoW) consensus mechanism used in blo import hashlib import time + class Block: def __init__(self, index, previous_hash, transactions, timestamp, difficulty): self.index = index @@ -35,7 +36,7 @@ class Block: def compute_hash(self): """ Generates the hash of the block content. - Combines index, previous hash, transactions, timestamp, and nonce into a string, + Combines index, previous hash, transactions, timestamp, and nonce into a string, which is then hashed using SHA-256. """ block_string = f"{self.index}{self.previous_hash}{self.transactions}{self.timestamp}{self.nonce}" @@ -46,13 +47,16 @@ class Block: Performs Proof of Work by adjusting the nonce until a valid hash is found. A valid hash has the required number of leading zeros based on the difficulty level. """ - target = '0' * self.difficulty # Target hash should start with 'difficulty' number of zeros - while self.hash[:self.difficulty] != target: + target = ( + "0" * self.difficulty + ) # Target hash should start with 'difficulty' number of zeros + while self.hash[: self.difficulty] != target: self.nonce += 1 self.hash = self.compute_hash() print(f"Block mined with nonce {self.nonce}, hash: {self.hash}") + class Blockchain: def __init__(self, difficulty): self.chain = [] @@ -72,13 +76,19 @@ class Blockchain: Adds a new block to the blockchain after performing Proof of Work. """ previous_block = self.chain[-1] - new_block = Block(len(self.chain), previous_block.hash, transactions, time.time(), self.difficulty) + new_block = Block( + len(self.chain), + previous_block.hash, + transactions, + time.time(), + self.difficulty, + ) new_block.mine_block() self.chain.append(new_block) def is_chain_valid(self): """ - Verifies the integrity of the blockchain by ensuring each block's previous hash matches + Verifies the integrity of the blockchain by ensuring each block's previous hash matches and that all blocks meet the Proof of Work requirement. """ for i in range(1, len(self.chain)): @@ -95,8 +105,10 @@ class Blockchain: return True + # Test cases + def test_blockchain(): """ Test cases for the Blockchain proof of work algorithm. @@ -112,11 +124,16 @@ def test_blockchain(): assert blockchain.is_chain_valid() == True, "Blockchain should be valid" # Tamper with the blockchain and check validation - blockchain.chain[1].transactions = "Transaction 1: Alice pays Bob 50 BTC" # Tampering the transaction - assert blockchain.is_chain_valid() == False, "Blockchain should be invalid due to tampering" + blockchain.chain[ + 1 + ].transactions = "Transaction 1: Alice pays Bob 50 BTC" # Tampering the transaction + assert ( + blockchain.is_chain_valid() == False + ), "Blockchain should be invalid due to tampering" print("All test cases passed.") + if __name__ == "__main__": test_blockchain()