diff --git a/blockchain.py b/blockchain.py index 7a51b9d..f77b7ba 100644 --- a/blockchain.py +++ b/blockchain.py @@ -1,14 +1,14 @@ -import datetime +from datetime import datetime import hashlib class Block: - blockNo = 0 + block_no = 0 data = None next = None hash = None nonce = 0 previous_hash = 0x0 - timestamp = datetime.datetime.now() + timestamp = datetime.now() def __init__(self, data): self.data = data @@ -16,48 +16,65 @@ def __init__(self, data): def hash(self): h = hashlib.sha256() h.update( - str(self.nonce).encode('utf-8') + - str(self.data).encode('utf-8') + - str(self.previous_hash).encode('utf-8') + - str(self.timestamp).encode('utf-8') + - str(self.blockNo).encode('utf-8') + str(self.nonce).encode('utf-8') + + str(self.data).encode('utf-8') + + str(self.previous_hash).encode('utf-8') + + str(self.timestamp).encode('utf-8') + + str(self.block_no).encode('utf-8') ) return h.hexdigest() - def __str__(self): - return "Block Hash: " + str(self.hash()) + "\nBlockNo: " + str(self.blockNo) + "\nBlock Data: " + str(self.data) + "\nHashes: " + str(self.nonce) + "\n--------------" + def __repr__(self): + return ( + f'Block Hash: {str(self.hash())}\n' + f'Block #: {self.block_no}\n' + f'Block Data: {self.data}\n' + f'Hashes: {self.nonce}\n' + ) -class Blockchain: - diff = 20 - maxNonce = 2**32 - target = 2 ** (256-diff) +class Blockchain: + difficulty = 10 + max_nonce = 2**32 + target = 2 ** (256-difficulty) block = Block("Genesis") dummy = head = block def add(self, block): - block.previous_hash = self.block.hash() - block.blockNo = self.block.blockNo + 1 - + block.block_no = self.block.block_no + 1 self.block.next = block self.block = self.block.next def mine(self, block): - for n in range(self.maxNonce): + for _ in range(self.max_nonce): if int(block.hash(), 16) <= self.target: self.add(block) - print(block) break else: block.nonce += 1 -blockchain = Blockchain() + def show(self): + if not self.head: + self.head = self.block + while self.head: + print(self.head) + self.head = self.head.next + + +def _main(): + blockchain = Blockchain() + # miningg + for n in range(10): + blockchain.mine(Block(f"Block {n+1}")) + blockchain.show() + #adding + blockchain.add(Block('added block')) + blockchain.show() + blockchain.add(Block('added block2')) + blockchain.show() -for n in range(10): - blockchain.mine(Block("Block " + str(n+1))) -while blockchain.head != None: - print(blockchain.head) - blockchain.head = blockchain.head.next +if __name__ == "__main__": + _main()