From 82165d4c57773f2568c606d557728b972dc75b64 Mon Sep 17 00:00:00 2001 From: Daniel De Castro Date: Thu, 5 Nov 2020 22:12:59 +0800 Subject: [PATCH 1/2] feat: add display method, refactor --- blockchain.py | 67 ++++++++++++++++++++++++++++++++------------------- 1 file changed, 42 insertions(+), 25 deletions(-) diff --git a/blockchain.py b/blockchain.py index 7a51b9d..90a13fa 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 + + def show(self): + if not self.head: + self.head = self.block + while self.head: + print(self.head) + self.head = self.head.next + -blockchain = Blockchain() +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() From c0ddb0640a979d983af6335ceb65b41244e03a2d Mon Sep 17 00:00:00 2001 From: Daniel De Castro Date: Thu, 5 Nov 2020 22:13:52 +0800 Subject: [PATCH 2/2] style: remove whitespace --- blockchain.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/blockchain.py b/blockchain.py index 90a13fa..f77b7ba 100644 --- a/blockchain.py +++ b/blockchain.py @@ -54,14 +54,14 @@ def mine(self, block): break else: block.nonce += 1 - + 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()