diff --git a/goodchain/src/helpers/MenuHelper.py b/goodchain/src/helpers/MenuHelper.py index 016574a..2fc9118 100644 --- a/goodchain/src/helpers/MenuHelper.py +++ b/goodchain/src/helpers/MenuHelper.py @@ -37,11 +37,12 @@ class MenuHelper: self.user_blockchain_menu[0] = "Back" self.user_blockchain_menu[1] = "Explore the Blockchain" - self.user_blockchain_menu[2] = "Transfer coins" - self.user_blockchain_menu[3] = "Cancel transaction" - self.user_blockchain_menu[4] = "Check balance" - self.user_blockchain_menu[5] = "Check the pool" - self.user_blockchain_menu[6] = "Mine a block" + self.user_blockchain_menu[2] = "View personal transactions" + self.user_blockchain_menu[3] = "Transfer coins" + self.user_blockchain_menu[4] = "Cancel transaction" + self.user_blockchain_menu[5] = "Check balance" + self.user_blockchain_menu[6] = "Check the pool" + self.user_blockchain_menu[7] = "Mine a block" self.user_settings_menu[0] = "Back" self.user_settings_menu[1] = "View account info" @@ -141,6 +142,9 @@ class MenuHelper: case "Explore the Blockchain": taskHelper.exploreBlocks(self) + case "View personal transactions": + taskHelper.getPersonalTransactions(self) + case "Transfer coins": new_tx = taskHelper.transaction(self) if new_tx != False and new_tx.is_valid(): @@ -207,6 +211,11 @@ class MenuHelper: utilityHelper.clearScreen() print("Wrong input, try again") return None + + if choice > len(menu): + utilityHelper.clearScreen() + print("Wrong input, try again") + return None utilityHelper.clearScreen() return choice \ No newline at end of file diff --git a/goodchain/src/helpers/TaskHelper.py b/goodchain/src/helpers/TaskHelper.py index f4cccd7..88dcfe2 100644 --- a/goodchain/src/helpers/TaskHelper.py +++ b/goodchain/src/helpers/TaskHelper.py @@ -132,10 +132,12 @@ def createBlock(self): def exploreBlocks(self): blocks = utilityHelper.loadFile("../data/ledger.dat") x = 0 + total_transactions = 0 for block in blocks: + x += 1 + total_transactions += len(block.data) print(f"---------------------------------------{x}-------------------------------------------") print(f"Block created: {block.date}") - x += 1 print("---------------------------------------END-------------------------------------------") print("Select a number to view the block, keep empty to return.") user_input = input(">>: ") @@ -143,30 +145,31 @@ def exploreBlocks(self): return try: - user_input = int(user_input) + user_input = int(user_input) -1 except: utilityHelper.clearScreen() print("Wrong input, try again") return - if user_input > len(blocks): + if user_input > len(blocks) - 1 or user_input < 0: utilityHelper.clearScreen() print("Wrong input, try again") return # print all info of the block utilityHelper.clearScreen() - print(f"---------------------------------------{user_input}-------------------------------------------") + print(f"---------------------------------------{user_input +1}-------------------------------------------") print(f"Block created: {blocks[user_input].date}") print(f"Block hash: {blocks[user_input].blockHash}") print(f"Block nonce: {blocks[user_input].nonce}") print(f"Block mined time: {blocks[user_input].time}") - # print(f"Block transactions: {blocks[user_input].transactions}") + print(f"Block transactions: {len(blocks[user_input].data)}") print(f"Block previous hash: {blocks[user_input].previousHash}") print("---------------------------------------------------------------------------------------") - print("0 -- go back") - print("1 -- View transactions of current block") - print("2 -- View another block") + print("0 -- Go back") + print("1 -- Validate block") + print("2 -- View transactions of current block") + print("3 -- View another block") choice = input(">>: ") match choice: @@ -174,18 +177,20 @@ def exploreBlocks(self): utilityHelper.clearScreen() return case "1": + print("Validating block... TODO") + case "2": utilityHelper.clearScreen() x = 0 for transaction in blocks[user_input].data: + x += 1 print(f"---------------------------------------{x}-------------------------------------------") print(f"Transaction input: {transaction.inputs[0][1]}") print(f"Transaction output: {transaction.outputs[0][1]}") print(f"Transaction fees: {transaction.inputs[0][1] - transaction.outputs[0][1]}") print(f"Transaction sender: \n{transaction.inputs[0][0]}") print(f"Transaction recipient: \n{transaction.outputs[0][0]}") - x += 1 print("-----------------------------------------------------------------------------------") - case "2": + case "3": utilityHelper.clearScreen() exploreBlocks(self) case _: @@ -202,4 +207,32 @@ def getBalance(self): balance += transaction.outputs[0][1] elif transaction.inputs[0][0] == self.user.public_ser: balance -= transaction.inputs[0][1] - return balance \ No newline at end of file + return balance + +def getPersonalTransactions(self): + blocks = utilityHelper.loadFile("../data/ledger.dat") + total = 0 + total_input = 0 + total_output = 0 + for block in blocks: + for transaction in block.data: + if transaction.outputs[0][0] == self.user.public_ser or transaction.inputs[0][0] == self.user.public_ser: + total += 1 + print(f"---------------------------------------{total}-------------------------------------------") + print(f"Transaction input: {transaction.inputs[0][1]}") + print(f"Transaction output: {transaction.outputs[0][1]}") + print(f"Transaction fees: {transaction.inputs[0][1] - transaction.outputs[0][1]}") + print(f"Transaction sender: \n{transaction.inputs[0][0]}") + print(f"Transaction recipient: \n{transaction.outputs[0][0]}") + + if transaction.outputs[0][0] == self.user.public_ser: + total_output += transaction.outputs[0][1] + elif transaction.inputs[0][0] == self.user.public_ser: + total_input += transaction.inputs[0][1] + print("-----------------------------------------------------------------------------------") + print(f"Total transactions: {total}") + print(f"Total spent: {total_input}") + print(f"Total received: {total_output}") + print(f"Total balance: {total_output - total_input}") + print("-----------------------------------------------------------------------------------") + \ No newline at end of file