From 77126c64642c443a56d982fb564eaa51483b022a Mon Sep 17 00:00:00 2001 From: Spekulaas <“ryan@aterve.nl”> Date: Fri, 5 Jan 2024 11:18:01 +0100 Subject: [PATCH] added test connections before changing files --- goodchain/src/classes/User.py | 6 +++++- goodchain/src/helpers/BlockHelper.py | 26 ++++++++++++++++++-------- goodchain/src/helpers/SocketHelper.py | 3 +++ goodchain/src/helpers/TaskHelper.py | 3 ++- goodchain/src/helpers/UtilityHelper.py | 3 +++ 5 files changed, 31 insertions(+), 10 deletions(-) diff --git a/goodchain/src/classes/User.py b/goodchain/src/classes/User.py index 518c0f3..b6fd028 100644 --- a/goodchain/src/classes/User.py +++ b/goodchain/src/classes/User.py @@ -63,6 +63,8 @@ class User: private_key, public_key = Signature.generateKeys() private_ser, public_ser = Signature.keysToBytes(private_key, public_key) # register user + + UtilityHelper.testConnection(self.peer_ip_addr, self.peer_port) if self.db.createUser( private_ser, public_ser, input_username, hashed_password): # NEW SEND USER socketHelper.sendObj(self.peer_ip_addr, ["USER CREATE",private_ser, public_ser, input_username, hashed_password], self.peer_port) @@ -96,6 +98,7 @@ class User: hashed_new_password = UtilityHelper.computeHash(new_password) hashed_old_password = UtilityHelper.computeHash(old_password) + UtilityHelper.testConnection(self.peer_ip_addr, self.peer_port) if self.db.changePassword(self.private_ser, hashed_old_password, hashed_new_password) == True: # NEW SEND USER socketHelper.sendObj(self.peer_ip_addr, ["USER CHANGE PASSWORD",self.private_ser, hashed_old_password, hashed_new_password], self.peer_port) @@ -115,6 +118,7 @@ class User: print(f"{UtilityHelper.errorMessage('Username already taken')}") return False + UtilityHelper.testConnection(self.peer_ip_addr, self.peer_port) if self.db.changeUsername(self.private_ser, new_username) == True: self.username = new_username # NEW SEND USER @@ -138,7 +142,7 @@ class User: else: print(f"{UtilityHelper.warningMessage('Invalid input')}") - + UtilityHelper.testConnection(self.peer_ip_addr, self.peer_port) if self.db.deleteUser(self.private_ser) == True: # NEW SEND USER socketHelper.sendObj(self.peer_ip_addr, ["USER DELETE",self.private_ser], self.peer_port) diff --git a/goodchain/src/helpers/BlockHelper.py b/goodchain/src/helpers/BlockHelper.py index 648e091..053dfe8 100644 --- a/goodchain/src/helpers/BlockHelper.py +++ b/goodchain/src/helpers/BlockHelper.py @@ -306,21 +306,21 @@ def validateMinedBlock(self): new_reward.createRewardTransaction(new_block.metadata['miner'], self.user.private_ser, "MINE", fees) taskHelper.createLog(self, new_block.metadata['miner'], time.time(), f"Block id {new_block.id}, is validated! You received a reward of {fees + 25} coins!") - utilityHelper.addFile("../data/transaction_pool.dat", new_reward) # NEW SEND TRANSACTION socketHelper.sendObj(self.peer_ip_addr, new_reward, self.peer_port) + utilityHelper.addFile("../data/transaction_pool.dat", new_reward) try: del blocks[-1] except: return False - - utilityHelper.resetFile("../data/ledger.dat") - blocks.append(new_block) # NEW SEND BLOCK socketHelper.sendObj(self.peer_ip_addr, new_block, self.peer_port) + + utilityHelper.resetFile("../data/ledger.dat") + blocks.append(new_block) for block in blocks: utilityHelper.addFile("../data/ledger.dat", block) @@ -334,17 +334,18 @@ def validateMinedBlock(self): taskHelper.createLog(self, new_block.metadata['miner'], time.time(), f"Block id {new_block.id}, was flagged invalid. Mine unsuccesful...") # setsaveFil transactions in block back to the pool for transaction in new_block.data: + socketHelper.sendObj(self.peer_ip_addr, transaction, self.peer_port) utilityHelper.addFile("../data/transaction_pool.dat", transaction) try: del blocks[-1] except: print(f"{utilityHelper.errorMessage('Something went wrong')}") return False - - utilityHelper.resetFile("../data/ledger.dat") # NEW SEND BLOCK socketHelper.sendObj(self.peer_ip_addr, new_block, self.peer_port) + + utilityHelper.resetFile("../data/ledger.dat") for block in blocks: utilityHelper.addFile("../data/ledger.dat", block) @@ -439,12 +440,21 @@ def updateBlockValidation(block): utilityHelper.resetFile("../data/ledger.dat") blocks.append(block) + if block.metadata['false_validations'] >= 3: + # Create log for miner + # setsaveFil transactions in block back to the pool + for transaction in block.data: + utilityHelper.addFile("../data/transaction_pool.dat", transaction) + try: + del blocks[-1] + except: + print(f"{utilityHelper.errorMessage('Something went wrong')}") + return False, True + for b in blocks: utilityHelper.addFile("../data/ledger.dat", b) return True, False - - diff --git a/goodchain/src/helpers/SocketHelper.py b/goodchain/src/helpers/SocketHelper.py index ae1736a..a4c4bd5 100644 --- a/goodchain/src/helpers/SocketHelper.py +++ b/goodchain/src/helpers/SocketHelper.py @@ -47,6 +47,7 @@ def sendObj(ip_addr, blk, port): return True except: print("Could not connect to peer") + utilityHelper.close() return False def connection(ip, port, db): @@ -123,4 +124,6 @@ def connection(ip, port, db): match item: case "EXIT": utilityHelper.close() + continue + case "TEST": continue \ No newline at end of file diff --git a/goodchain/src/helpers/TaskHelper.py b/goodchain/src/helpers/TaskHelper.py index 15f9adc..c737d71 100644 --- a/goodchain/src/helpers/TaskHelper.py +++ b/goodchain/src/helpers/TaskHelper.py @@ -9,7 +9,7 @@ def displayUnreadLogs(self): return False printLogs(logs) - + socketHelper.testConnection(self.peer_ip_addr, self.peer_port) for log in logs: self.db.updateLogStatus(log[0]) # NEW SEND USER @@ -87,6 +87,7 @@ def getPersonalTransactions(self): print("-----------------------------------------------------------------------------------") def createLog(self, public_key, date, info, unread = 0): + socketHelper.testConnection(self.peer_ip_addr, self.peer_port) self.db.createLog(public_key, date, info, unread) # NEW SEND USER socketHelper.sendObj(self.peer_ip_addr, ["CREATE LOG",public_key, date, info, unread], self.peer_port) \ No newline at end of file diff --git a/goodchain/src/helpers/UtilityHelper.py b/goodchain/src/helpers/UtilityHelper.py index c97faae..850f609 100644 --- a/goodchain/src/helpers/UtilityHelper.py +++ b/goodchain/src/helpers/UtilityHelper.py @@ -95,6 +95,9 @@ def headerMessage(text): def blinkMessage(text): return bcolors.BLINK + text + bcolors.ENDC +def testConnection(ip, port): + socketHelper.sendObj(ip, "TEST", port) + def closeConnection(ip, port): socketHelper.sendObj(ip, "EXIT", port) print(f"{bcolors.WARNING}Closing connection{bcolors.ENDC}")