[pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci
This commit is contained in:
pre-commit-ci[bot] 2024-10-03 09:55:24 +00:00
parent 91a43251d8
commit 66cd40e387

View File

@ -2,15 +2,16 @@
# Title: Proof of Work Algorithm for Blockchain
## Algorithm Statement:
The algorithm implements the Proof of Work (PoW) consensus mechanism used in
blockchain to validate blocks. PoW ensures participants (miners) perform a
computational task to create a valid block and add it to the blockchain. The
The algorithm implements the Proof of Work (PoW) consensus mechanism used in
blockchain to validate blocks. PoW ensures participants (miners) perform a
computational task to create a valid block and add it to the blockchain. The
difficulty is defined by the number of leading zeros required in the block hash.
"""
import hashlib
import time
class Block:
def __init__(self, index, previous_hash, transactions, timestamp, difficulty):
self.index = index
@ -36,16 +37,19 @@ class Block:
def mine_block(self):
"""
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
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' zeros
while self.hash[:self.difficulty] != target:
target = (
"0" * self.difficulty
) # Target hash should start with 'difficulty' 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 = []
@ -65,14 +69,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
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)):
@ -89,8 +98,10 @@ class Blockchain:
return True
# Test cases
def test_blockchain():
"""
Test cases for the Blockchain proof of work algorithm.
@ -106,11 +117,16 @@ def test_blockchain():
assert blockchain.is_chain_valid(), "Blockchain should be valid"
# Tamper with the blockchain and check validation
blockchain.chain[1].transactions = "Transaction 1: Alice pays Bob 50 BTC" # Tampering
assert not blockchain.is_chain_valid(), "Blockchain should be invalid due to tampering"
blockchain.chain[
1
].transactions = "Transaction 1: Alice pays Bob 50 BTC" # Tampering
assert (
not blockchain.is_chain_valid()
), "Blockchain should be invalid due to tampering"
print("All test cases passed.")
if __name__ == "__main__":
test_blockchain()