From fb9492e138bae9627252e5b8156532def30c6be7 Mon Sep 17 00:00:00 2001 From: Vivek Teega Date: Tue, 4 Feb 2020 05:00:49 +0530 Subject: [PATCH] minor changes in process API block --- tracktokens-smartcontracts.py | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/tracktokens-smartcontracts.py b/tracktokens-smartcontracts.py index 2261799..31b590a 100755 --- a/tracktokens-smartcontracts.py +++ b/tracktokens-smartcontracts.py @@ -73,7 +73,7 @@ def pushData_SSEapi(message): def processBlock(blockindex): logger.info(f"Processing block {blockindex}") - # Scan every block + # Get block details response = multiRequest(f"block-index/{blockindex}", config['DEFAULT']['NET']) blockhash = response['blockHash'] blockinfo = multiRequest(f"block/{blockhash}", config['DEFAULT']['NET']) @@ -124,21 +124,34 @@ def processApiBlock(blockhash): blockinfo = multiRequest('block/{}'.format(str(blockhash)), config['DEFAULT']['NET']) # todo Rule 8 - read every transaction from every block to find and parse flodata - + counter = 0 + acceptedTxList = [] # Scan every transaction for transaction in blockinfo["tx"]: - - transaction_data = multiRequest('tx/{}'.format(str(transaction)), config['DEFAULT']['NET']) + transaction_data = multiRequest(f"tx/{transaction}", config['DEFAULT']['NET']) text = transaction_data["floData"] text = text.replace("\n", " \n ") # todo Rule 9 - Reject all noise transactions. Further rules are in parsing.py - + returnval = None parsed_data = parsing.parse_flodata(text, blockinfo, config['DEFAULT']['NET']) if parsed_data['type'] != 'noise': - print(blockindex) - print(parsed_data['type']) - processTransaction(transaction_data, parsed_data) + logger.info(f"Processing transaction {transaction}") + logger.debug(f"flodata {text} is parsed to {parsed_data}") + returnval = processTransaction(transaction_data, parsed_data) + + if returnval == 1: + acceptedTxList.append(transaction) + elif returnval == 0: + logger.debug("Transfer for the transaction %s is illegitimate. Moving on" % transaction) + + if len(acceptedTxList) > 0: + tempinfo = blockinfo['tx'].copy() + for tx in blockinfo['tx']: + if tx not in acceptedTxList: + tempinfo.remove(tx) + blockinfo['tx'] = tempinfo + updateLatestBlock(blockinfo) engine = create_engine('sqlite:///system.db') SystemBase.metadata.create_all(bind=engine) @@ -151,7 +164,6 @@ def processApiBlock(blockhash): # Check smartContracts which will be triggered locally, and not by the contract committee checkLocaltriggerContracts(blockinfo) - def updateLatestTransaction(transactionData, parsed_data): # connect to latest transaction db conn = sqlite3.connect('latestCache.db')