From f49f55cb0451160cc6dae39524fa3658ad42599b Mon Sep 17 00:00:00 2001 From: Spekulaas <“ryan@aterve.nl”> Date: Sun, 21 Jan 2024 22:50:19 +0100 Subject: [PATCH] changes for possible delivery --- goodchain/readme.md | 36 ++--------------------- goodchain/src/helpers/BlockHelper.py | 41 +++++++++++++++++---------- goodchain/src/helpers/SocketHelper.py | 9 +++++- 3 files changed, 37 insertions(+), 49 deletions(-) diff --git a/goodchain/readme.md b/goodchain/readme.md index 60727e4..c603eff 100644 --- a/goodchain/readme.md +++ b/goodchain/readme.md @@ -7,36 +7,6 @@ This is the final assesment of the blockchain minor of period 1. [EXPLANATION FI pip install -r requirements.txt ``` -# SUMMARY -in dit project moet er een p2p connectie gestart worden door 2 sockets. Deze sockets moeten beide aanstaan om het project functioneel te hebben -deze 2 sockets sturen naar elkaar als er een nieuwe gebruiker aangemaakt wordt, transacties, nieuwe blocks. -Deze sockets versturen geen gehele files. Dit moet per node gedaan worden. Dus alleen transactie data moet genoeg zijn bijvoorbeeld - -De connectie wordt gemaakt bij het moment van starten, -User start Applicatie -> User komt in connectie scherm -> user 2 start applicatie -> beide apps starten. - -Wanneer een connectie verbroken wordt tussen de 2 komt er een mooie melding waarop tezien wordt dat de chain gesloten wordt - -Werking: -Node start python programma, - -Server start -Client start -Client zoekt naar een server waarmee hij kan connecten -client kan niks vinden en blijft proberen - -Node 2 start python -server van node 2 start - -Node 1 connect met server van node 2 - -Client van node 2 start -client van node 2 connect met server van node 1 - -wanneer beide welkoms meldingen gestuurd zijn start de applicatie - -# TODO -- voeg een validator aan de inkomende transactie -- voeg de block toe / kijk hem na bij inkomend -- verwijder transacties van inkomende block - \ No newline at end of file +# SETUP +Create 2 instances of this project (copy the folder to any place, other pc, or vm) +make sure to change the .env file with the right IP and ports for both instances diff --git a/goodchain/src/helpers/BlockHelper.py b/goodchain/src/helpers/BlockHelper.py index 483f276..844806a 100644 --- a/goodchain/src/helpers/BlockHelper.py +++ b/goodchain/src/helpers/BlockHelper.py @@ -382,11 +382,11 @@ def socketBlock(block): if block_status: if block.id == last_block.id and block.blockHash == last_block.blockHash and last_block.metadata['validated'] == False: - block.previousBlock = last_block.previousBlock + # block.previousBlock = last_block.previousBlock return updateBlockValidation(block) if block.id == last_block.id + 1 and block.previousHash == last_block.blockHash: - block.previousBlock = last_block + # block.previousBlock = last_block return addBlockToChain(block, last_block) return False, False, block @@ -443,21 +443,24 @@ def addBlockToChain(block, last_block): def updateBlockValidation(block): blocks = utilityHelper.loadFile("../data/ledger.dat") - last_block = getLastBlock() if blocks == []: return False, False, block - + try: del blocks[-1] except: return False, False, block + last_block = getLastBlock() + utilityHelper.resetFile("../data/ledger.dat") - block.previousBlock = last_block + if blocks == []: + last_block = None + # block.previousBlock = last_block blocks.append(block) - if block.metadata['false_validations'] >= 3: + if not block.metadata['validated']: # Create log for miner # setsaveFil transactions in block back to the pool for transaction in block.data: @@ -480,21 +483,29 @@ def removeInvalid(block): if blocks == []: return False + # remove last transaction from pool + transactions = Tx() + transactions = utilityHelper.loadFile("../data/transaction_pool.dat") + if transactions != []: + if transactions[-1].type == 1 and transactions[-1].outputs[0][0] == block.metadata['miner']: + try: + del transactions[-1] + except: + return False + 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 + if last_block.blockHash == block.blockHash: # try to delete try: del blocks[-1] except: return False - - # remove last transaction from pool - transactions = Tx() - transactions = utilityHelper.loadFile("../data/transaction_pool.dat") - if transactions[-1].type == 1 and transactions[-1].outputs[0][0] == block.metadata['miner']: - try: - del transactions[-1] - except: - return False utilityHelper.resetFile("../data/ledger.dat") diff --git a/goodchain/src/helpers/SocketHelper.py b/goodchain/src/helpers/SocketHelper.py index 6d4bab0..8f65e51 100644 --- a/goodchain/src/helpers/SocketHelper.py +++ b/goodchain/src/helpers/SocketHelper.py @@ -50,7 +50,7 @@ def sendObj(ip_addr, blk, port): return True except: print("Could not connect to peer") - # utilityHelper.close() + utilityHelper.close() return False def connection(ip, port, db): @@ -85,6 +85,10 @@ def connection(ip, port, db): valid, exit, block = blockHelper.socketBlock(item) + if valid: + sendObj(os.getenv("PEER_IP"), ["VALIDATE BLOCK",block], int(os.getenv("PEER_PORT"))) + continue + if not valid: print(f"{utilityHelper.errorMessage('Received block is not valid')}") sendObj(os.getenv("PEER_IP"), ["INVALID BLOCK",block], int(os.getenv("PEER_PORT"))) @@ -144,6 +148,9 @@ def connection(ip, port, db): print(">>: ") continue + case "VALIDATE BLOCK": + blockHelper.updateBlockValidation(item[1]) + if type(item) == str: match item: case "EXIT":