diff --git a/goodchain/data/goodchain.db b/goodchain/data/goodchain.db deleted file mode 100644 index 2fa5c1b..0000000 Binary files a/goodchain/data/goodchain.db and /dev/null differ diff --git a/goodchain/data/ledger.dat b/goodchain/data/ledger.dat deleted file mode 100644 index 7653512..0000000 Binary files a/goodchain/data/ledger.dat and /dev/null differ diff --git a/goodchain/data/transaction_pool.dat b/goodchain/data/transaction_pool.dat deleted file mode 100644 index 4868b63..0000000 Binary files a/goodchain/data/transaction_pool.dat and /dev/null differ diff --git a/goodchain/src/classes/User.py b/goodchain/src/classes/User.py index 6b60d4a..518c0f3 100644 --- a/goodchain/src/classes/User.py +++ b/goodchain/src/classes/User.py @@ -1,6 +1,11 @@ from getpass import getpass from helpers import SignatureHelper as Signature from helpers import UtilityHelper +from helpers import SocketHelper as socketHelper + +import os +from dotenv import load_dotenv +load_dotenv() class User: def __init__(self, db, private_ser=None, public_ser=None, username=None, password=None): @@ -10,6 +15,9 @@ class User: self.username = username self.password = password + self.peer_port = int(os.getenv("PEER_PORT")) + self.peer_ip_addr = os.getenv("PEER_IP") + def login(self): print("Keep input empty to return") input_username = input("Username: ") @@ -56,6 +64,8 @@ class User: private_ser, public_ser = Signature.keysToBytes(private_key, public_key) # register user 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) self.private_ser = private_ser self.public_ser = public_ser self.username = input_username @@ -87,6 +97,8 @@ class User: hashed_old_password = UtilityHelper.computeHash(old_password) 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) print(f"{UtilityHelper.successMessage('Password updated')}") else: print(f"{UtilityHelper.errorMessage('Something went wrong while trying to update password..')}") @@ -105,6 +117,8 @@ class User: if self.db.changeUsername(self.private_ser, new_username) == True: self.username = new_username + # NEW SEND USER + socketHelper.sendObj(self.peer_ip_addr, ["USER CHANGE USERNAME",self.private_ser, new_username], self.peer_port) print(f"{UtilityHelper.successMessage('Username updated')}") else: print(f"{UtilityHelper.errorMessage('Something went wrong while trying to update username..')}") @@ -126,6 +140,8 @@ class User: print(f"{UtilityHelper.warningMessage('Invalid input')}") 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) print(f"{UtilityHelper.successMessage('Account deleted')}") self.logout() return True diff --git a/goodchain/src/goodchain.py b/goodchain/src/goodchain.py index 3f7d052..9808823 100644 --- a/goodchain/src/goodchain.py +++ b/goodchain/src/goodchain.py @@ -58,4 +58,3 @@ if __name__ == "__main__": connection_thread = threading.Thread(target=socketHelper.connection, args=(ip,port,db,)) connection_thread.start() - diff --git a/goodchain/src/helpers/BlockHelper.py b/goodchain/src/helpers/BlockHelper.py index 47c0b1e..9166107 100644 --- a/goodchain/src/helpers/BlockHelper.py +++ b/goodchain/src/helpers/BlockHelper.py @@ -1,10 +1,12 @@ from classes.Transaction import Tx from classes.TxBlock import TxBlock from helpers import UtilityHelper as utilityHelper -import time from helpers import SocketHelper as socketHelper +from helpers import TaskHelper as taskHelper -MIN_MINING_TIME = 10 +import time + +MIN_MINING_TIME = 0 MAX_MINING_TIME = 20 def exploreBlocks(self): @@ -192,7 +194,7 @@ def createBlock(self): # create block for i in selected_transactions: if not transactions[i].is_valid(): - self.db.createLog(transactions[i].inputs[0][0], time.time(), f"Transaction of {transactions[i].outputs[0][1]} with {transactions[i].inputs[0][1] - transactions[i].outputs[0][1]} coins fee is declined") + taskHelper.createLog(self, transactions[i].inputs[0][0], time.time(), f"Transaction of {transactions[i].outputs[0][1]} with {transactions[i].inputs[0][1] - transactions[i].outputs[0][1]} coins fee is declined") try: del transactions[i] except: @@ -291,15 +293,17 @@ def validateMinedBlock(self): for transaction in new_block.data: if transaction.type != 1: fees += transaction.inputs[0][1] - transaction.outputs[0][1] - self.db.createLog(transaction.inputs[0][0], time.time(), f"Transaction of {transaction.inputs[0][1]} is added in block id {new_block.id}") - self.db.createLog(transaction.outputs[0][0], time.time(), f"You have received new coins: {transaction.outputs[0][1]}, To see all info view block id {new_block.id}") + taskHelper.createLog(self, transaction.inputs[0][0], time.time(), f"Transaction of {transaction.inputs[0][1]} is added in block id {new_block.id}") + taskHelper.createLog(self, transaction.outputs[0][0], time.time(), f"You have received new coins: {transaction.outputs[0][1]}, To see all info view block id {new_block.id}") fees = round(fees, 2) new_reward = Tx() new_reward.createRewardTransaction(new_block.metadata['miner'], self.user.private_ser, "MINE", fees) - self.db.createLog(new_block.metadata['miner'], time.time(), f"Block id {new_block.id}, is validated! You received a reward of {fees + 25} coins!") + 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) try: del blocks[-1] @@ -312,9 +316,6 @@ def validateMinedBlock(self): # NEW SEND BLOCK socketHelper.sendObj(self.peer_ip_addr, new_block, self.peer_port) - # NEW SEND TRANSACTION - socketHelper.sendObj(self.peer_ip_addr, new_reward, self.peer_port) - for block in blocks: utilityHelper.addFile("../data/ledger.dat", block) @@ -324,7 +325,7 @@ def validateMinedBlock(self): new_block.metadata['false_validations'] += 1 if new_block.metadata['false_validations'] >= 3: # Create log for miner - self.db.createLog(new_block.metadata['miner'], time.time(), f"Block id {new_block.id}, was flagged invalid. Mine unsuccesful...") + 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: utilityHelper.addFile("../data/transaction_pool.dat", transaction) diff --git a/goodchain/src/helpers/DatabaseHelper.py b/goodchain/src/helpers/DatabaseHelper.py index f596954..8a9e899 100644 --- a/goodchain/src/helpers/DatabaseHelper.py +++ b/goodchain/src/helpers/DatabaseHelper.py @@ -58,8 +58,6 @@ class DatabaseHelper: self.cursor.execute("INSERT INTO `users` (private_key, public_key, username, password) VALUES (?, ?, ?, ?)", (private_key, public_key, username, password,)) self.commit() - # NEW SEND USER - socketHelper.sendObj("localhost", ["USER CREATE",private_key, public_key, username, password], 5050) return True except sqlite3.Error as error: return False @@ -74,8 +72,6 @@ class DatabaseHelper: if self.cursor.rowcount < 1: return False - # NEW SEND USER - socketHelper.sendObj("localhost", ["USER CHANGE PASSWORD",user_privatekey, old_password, password], 5050) return True except sqlite3.Error as error: @@ -90,9 +86,6 @@ class DatabaseHelper: self.cursor.execute("UPDATE `users` SET username = ? WHERE `private_key` = ?", (username, user_privatekey,)) self.commit() - # NEW SEND USER - socketHelper.sendObj("localhost", ["USER CHANGE USERNAME",user_privatekey, username], 5050) - return True except sqlite3.Error as error: @@ -108,8 +101,6 @@ class DatabaseHelper: self.cursor.execute("DELETE FROM `users` WHERE `private_key` = ?", (user_privatekey, )) self.commit() - # NEW SEND USER - socketHelper.sendObj("localhost", ["USER DELETE",user_privatekey], 5050) return True except sqlite3.Error as error: @@ -135,13 +126,9 @@ class DatabaseHelper: self.cursor.execute("INSERT INTO `logs` (public_key, date, info, unread) VALUES (?, ?, ?, ?)", (public_key, date, info, unread,)) self.commit() - # NEW SEND USER - socketHelper.sendObj("localhost", ["CREATE LOG",public_key,date,info,unread], 5050) - except sqlite3.Error as error: return None - - + def getLatestLogs(self, public_key): if not self.conn: return None @@ -175,9 +162,6 @@ class DatabaseHelper: self.cursor.execute("UPDATE `logs` SET `unread` = ? WHERE `id` = ?", (unread, id, )) self.commit() - # NEW SEND USER - socketHelper.sendObj("localhost", ["UPDATE LOG STATUS",id,unread], 5050) - except sqlite3.Error as error: return False diff --git a/goodchain/src/helpers/SocketHelper.py b/goodchain/src/helpers/SocketHelper.py index 56b7e11..a80fdc6 100644 --- a/goodchain/src/helpers/SocketHelper.py +++ b/goodchain/src/helpers/SocketHelper.py @@ -89,7 +89,7 @@ def connection(ip, port, db): continue case "UPDATE LOG STATUS": - db.updateLogStatus(item[1], item[2]) + db.updateLogStatus(item[1]) continue # changes on newServerConnection diff --git a/goodchain/src/helpers/TaskHelper.py b/goodchain/src/helpers/TaskHelper.py index f19dddb..15f9adc 100644 --- a/goodchain/src/helpers/TaskHelper.py +++ b/goodchain/src/helpers/TaskHelper.py @@ -1,4 +1,5 @@ from helpers import UtilityHelper as utilityHelper +from helpers import SocketHelper as socketHelper import time def displayUnreadLogs(self): @@ -11,6 +12,8 @@ def displayUnreadLogs(self): for log in logs: self.db.updateLogStatus(log[0]) + # NEW SEND USER + socketHelper.sendObj(self.peer_ip_addr, ["UPDATE LOG STATUS",log[0]], self.peer_port) def displayLogs(self): logs = self.db.getLatestLogs(self.user.public_ser) @@ -83,3 +86,7 @@ def getPersonalTransactions(self): print(f"Total balance: {total_output - total_input}") print("-----------------------------------------------------------------------------------") +def createLog(self, public_key, date, info, unread = 0): + 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