diff --git a/tracktokens_smartcontracts.py b/tracktokens_smartcontracts.py index e6f85b5..fb54a5d 100755 --- a/tracktokens_smartcontracts.py +++ b/tracktokens_smartcontracts.py @@ -25,7 +25,7 @@ def newMultiRequest(apicall): current_server = serverlist[0] while True: try: - response = requests.get('{}api/{}'.format(current_server, apicall)) + response = requests.get('{}api/v1/{}'.format(current_server, apicall)) except: current_server = switchNeturl(current_server) logger.info(f"newMultiRequest() switched to {current_server}") @@ -72,7 +72,7 @@ def process_committee_flodata(flodata): def refresh_committee_list_old(admin_flo_id, api_url, blocktime): - response = requests.get(f'{api_url}api/addr/{admin_flo_id}') + response = requests.get(f'{api_url}api/v1/address/{admin_flo_id}') if response.status_code == 200: response = response.json() else: @@ -82,10 +82,10 @@ def refresh_committee_list_old(admin_flo_id, api_url, blocktime): committee_list = [] response['transactions'].reverse() for idx, transaction in enumerate(response['transactions']): - transaction_info = requests.get(f'{api_url}api/tx/{transaction}') + transaction_info = requests.get(f'{api_url}api/v1/tx/{transaction}') if transaction_info.status_code == 200: transaction_info = transaction_info.json() - if transaction_info['vin'][0]['addr']==admin_flo_id and transaction_info['blocktime']<=blocktime: + if transaction_info['vin'][0]['addresses'][0]==admin_flo_id and transaction_info['blocktime']<=blocktime: try: tx_flodata = json.loads(transaction_info['floData']) committee_list += process_committee_flodata(tx_flodata) @@ -101,7 +101,7 @@ def refresh_committee_list(admin_flo_id, api_url, blocktime): init_id = None def process_transaction(transaction_info): - if 'isCoinBase' in transaction_info or transaction_info['vin'][0]['addr'] != admin_flo_id or transaction_info['blocktime'] > blocktime: + if 'isCoinBase' in transaction_info or transaction_info['vin'][0]['addresses'][0] != admin_flo_id or transaction_info['blocktime'] > blocktime: return try: tx_flodata = json.loads(transaction_info['floData']) @@ -117,13 +117,13 @@ def refresh_committee_list(admin_flo_id, api_url, blocktime): print('Response from the Flosight API failed') sys.exit(0) - url = f'{api_url}api/addrs/{admin_flo_id}/txs?latest=true&mempool=false' + url = f'{api_url}api/v1/address/{admin_flo_id}?details=txs' response = send_api_request(url) - for transaction_info in response.get('items', []): + for transaction_info in response.get('txs', []): process_transaction(transaction_info) while 'incomplete' in response: - url = f'{api_url}api/addrs/{admin_flo_id}/txs?latest={latest_param}&mempool={mempool_param}&before={init_id}' + url = f'{api_url}api/v1/address/{admin_flo_id}/txs?latest={latest_param}&mempool={mempool_param}&before={init_id}' response = send_api_request(url) for transaction_info in response.get('items', []): process_transaction(transaction_info) @@ -143,7 +143,7 @@ def find_sender_receiver(transaction_data): # todo Rule 40 - For each vin, find the feeding address and the fed value. Make an inputlist containing [inputaddress, n value] for vin in transaction_data["vin"]: - vinlist.append([vin["addr"], float(vin["value"])]) + vinlist.append([vin["addresses"][0], float(vin["value"])]) totalinputval = float(transaction_data["valueIn"]) @@ -341,7 +341,7 @@ def convert_datetime_to_arrowobject_regex(expiryTime): dt = arrow.get(datetime_str, 'ddd MMM DD YYYY HH:mm:ss').replace(tzinfo=timezone_offset) return dt else: - return None + return 0 def is_a_contract_address(floAddress): @@ -359,7 +359,7 @@ def fetchDynamicSwapPrice_old(contractStructure, transaction_data, blockinfo): # fetch transactions from the blockchain where from address : oracle-address... to address: contract address # find the first contract transaction which adheres to price change format # {"price-update":{"contract-name": "", "contract-address": "", "price": 3}} - response = requests.get(f'{neturl}api/addr/{oracle_address}') + response = requests.get(f'{neturl}api/v1/address/{oracle_address}') if response.status_code == 200: response = response.json() if 'transactions' not in response.keys(): # API doesn't return 'transactions' key, if 0 txs present on address @@ -367,7 +367,7 @@ def fetchDynamicSwapPrice_old(contractStructure, transaction_data, blockinfo): else: transactions = response['transactions'] for transaction_hash in transactions: - transaction_response = requests.get(f'{neturl}api/tx/{transaction_hash}') + transaction_response = requests.get(f'{neturl}api/v1/tx/{transaction_hash}') if transaction_response.status_code == 200: transaction = transaction_response.json() floData = transaction['floData'] @@ -406,13 +406,13 @@ def fetchDynamicSwapPrice(contractStructure, blockinfo): latest_param = 'true' mempool_param = 'false' init_id = None - response = requests.get(f'{api_url}api/addrs/{oracle_address}/txs?latest={latest_param}&mempool={mempool_param}') + response = requests.get(f'{api_url}api/v1/address/{oracle_address}?details=txs') if response.status_code == 200: response = response.json() - if len(response['items']) == 0: + if len(response['txs']) == 0: return float(contractStructure['price']) else: - for transaction in response['items']: + for transaction in response['txs']: floData = transaction['floData'] # If the blocktime of the transaction is < than the current block time if transaction['time'] < blockinfo['time']: @@ -442,10 +442,10 @@ def fetchDynamicSwapPrice(contractStructure, blockinfo): init_id = response['initItem'] while(is_incomplete_key_present == True): - response = requests.get(f'{api_url}api/addrs/{oracle_address}/txs?latest={latest_param}&mempool={mempool_param}&before={init_id}') + response = requests.get(f'{api_url}api/v1/address/{oracle_address}?details=txs') if response.status_code == 200: response = response.json() - for transaction in response['items']: + for transaction in response['txs']: floData = transaction['floData'] # If the blocktime of the transaction is < than the current block time if transaction['time'] < blockinfo['time']: @@ -479,7 +479,7 @@ def processBlock(blockindex=None, blockhash=None): blockhash = response['blockHash'] blockinfo = newMultiRequest(f"block/{blockhash}") - pause_index = [2211699, 2211700, 2211701, 2170000, 2468107, 2468108, 2489267, 2449017, 2509873, 2509874, 2291729, 2467929] + pause_index = [2211699, 2211700, 2211701, 2170000, 2468107, 2468108, 2489267, 2449017, 2509873, 2509874, 2291729, 2467929, 6202174] if blockindex in pause_index: print(f'Paused at {blockindex}') @@ -487,19 +487,17 @@ def processBlock(blockindex=None, blockhash=None): #checkLocaltriggerContracts(blockinfo) # Check if any deposits have to be returned #checkReturnDeposits(blockinfo) - checkLocal_expiry_trigger_deposit(blockinfo) + + #checkLocal_expiry_trigger_deposit(blockinfo) # todo Rule 8 - read every transaction from every block to find and parse flodata counter = 0 acceptedTxList = [] # Scan every transaction logger.info("Before tx loop") - transaction_counter = 0 - for transaction in blockinfo["tx"]: - transaction_counter = transaction_counter + 1 - logger.info(f"Transaction {transaction_counter} : {transaction}") - current_index = -1 + for transaction_data in blockinfo["txs"]: + transaction = transaction_data["txid"] if transaction in ['ff355c3384e2568e1dd230d5c9073618b9033c7c8b20f9e8533b5837f76bc65d', 'dd35c592fa7ba76718c894b5b3195e1151e79c5fb91472c06f416c99c7827e6d', '39ef49e0e06438bda462c794955735e7ea3ae81cb576ec5c97b528c8a257614c', @@ -509,25 +507,16 @@ def processBlock(blockindex=None, blockhash=None): 'd36b744d6b9d8a694a93476dbd1134dbdc8223cf3d1a604447acb09221aa3b49', '64abe801d12224d10422de88070a76ad8c6d17b533ba5288fb0961b4cbf6adf4', 'ec9a852aa8a27877ba79ae99cc1359c0e04f6e7f3097521279bcc68e3883d760', - '16e836ceb973447a5fd71e969d7d4cde23330547a855731003c7fc53c86937e4']: + '16e836ceb973447a5fd71e969d7d4cde23330547a855731003c7fc53c86937e4', + 'fe2ce0523254efc9eb2270f0efb837de3fc7844d9c64523b20c0ac48c21f64e6', + 'a74a03ec1e77fa50e0b586b1e9745225ad4f78ce96ca59d6ac025f8057dd095c']: print(f'Paused at transaction {transaction}') - - # TODO CLEANUP - REMOVE THIS WHILE SECTION, WHY IS IT HERE? - while(current_index == -1): - transaction_data = newMultiRequest(f"tx/{transaction}") - try: - text = transaction_data["floData"] - text = text.replace("\n", " \n ") - current_index = 2 - except: - logger.info("The API has passed the Block height test but failed transaction_data['floData'] test") - logger.info(f"Block Height : {blockinfo['height']}") - logger.info(f"Transaction {transaction} data : ") - logger.info(transaction_data) - logger.info('Program will wait for 1 seconds and try to reconnect') - time.sleep(1) - + try: + text = transaction_data["floData"] + except: + text = '' + 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']) @@ -542,11 +531,11 @@ def processBlock(blockindex=None, blockhash=None): logger.info("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 = blockinfo['txs'].copy() + for tx in blockinfo['txs']: + if tx['txid'] not in acceptedTxList: tempinfo.remove(tx) - blockinfo['tx'] = tempinfo + blockinfo['txs'] = tempinfo updateLatestBlock(blockinfo) session = create_database_session_orm('system_dbs', {'db_name': "system"}, SystemBase) @@ -556,12 +545,12 @@ def processBlock(blockindex=None, blockhash=None): session.close() -def updateLatestTransaction(transactionData, parsed_data, db_reference, transaction_type=None ): +def updateLatestTransaction(transactionData, parsed_data, db_reference, transactionType=None ): # connect to latest transaction db conn = create_database_connection('latest_cache', {'db_name':"latestCache"}) - if transaction_type is None: - transaction_type = parsed_data['type'] - conn.execute("INSERT INTO latestTransactions(transactionHash, blockNumber, jsonData, transactionType, parsedFloData, db_reference) VALUES (?,?,?,?,?,?)", (transactionData['txid'], transactionData['blockheight'], json.dumps(transactionData), transaction_type, json.dumps(parsed_data), db_reference)) + if transactionType is None: + transactionType = parsed_data['type'] + conn.execute("INSERT INTO latestTransactions(transactionHash, blockNumber, jsonData, transactionType, parsedFloData, db_reference) VALUES (?,?,?,?,?,?)", (transactionData['txid'], transactionData['blockheight'], json.dumps(transactionData), transactionType, json.dumps(parsed_data), db_reference)) #conn.commit() conn.close() @@ -588,7 +577,12 @@ def process_pids(entries, session, piditem): return 1 -def transferToken(tokenIdentification, tokenAmount, inputAddress, outputAddress, transaction_data=None, parsed_data=None, isInfiniteToken=None, blockinfo=None): +def transferToken(tokenIdentification, tokenAmount, inputAddress, outputAddress, transaction_data=None, parsed_data=None, isInfiniteToken=None, blockinfo=None, transactionType=None): + + # provide default transactionType value + if transactionType is None: + transactionType=parsed_data['type'] + session = create_database_session_orm('token', {'token_name': f"{tokenIdentification}"}, TokenBase) tokenAmount = float(tokenAmount) if isInfiniteToken == True: @@ -601,7 +595,7 @@ def transferToken(tokenIdentification, tokenAmount, inputAddress, outputAddress, receiverAddress_details.addressBalance = None session.add(ActiveTable(address=outputAddress, consumedpid='1', transferBalance=tokenAmount, addressBalance=addressBalance, blockNumber=blockinfo['height'])) - add_transaction_history(token_name=tokenIdentification, sourceFloAddress=inputAddress, destFloAddress=outputAddress, transferAmount=tokenAmount, blockNumber=blockinfo['height'], blockHash=blockinfo['hash'], blocktime=blockinfo['time'], transactionHash=transaction_data['txid'], jsonData=json.dumps(transaction_data), transactionType=parsed_data['type'], parsedFloData=json.dumps(parsed_data)) + add_transaction_history(token_name=tokenIdentification, sourceFloAddress=inputAddress, destFloAddress=outputAddress, transferAmount=tokenAmount, blockNumber=blockinfo['height'], blockHash=blockinfo['hash'], blocktime=blockinfo['time'], transactionHash=transaction_data['txid'], jsonData=json.dumps(transaction_data), transactionType=transactionType, parsedFloData=json.dumps(parsed_data)) session.commit() session.close() return 1 @@ -731,7 +725,7 @@ def transferToken(tokenIdentification, tokenAmount, inputAddress, outputAddress, session.execute('DELETE FROM activeTable WHERE id={}'.format(piditem[0])) session.commit() - add_transaction_history(token_name=tokenIdentification, sourceFloAddress=inputAddress, destFloAddress=outputAddress, transferAmount=tokenAmount, blockNumber=blockinfo['height'], blockHash=blockinfo['hash'], blocktime=blockinfo['time'], transactionHash=transaction_data['txid'], jsonData=json.dumps(transaction_data), transactionType=parsed_data['type'], parsedFloData=json.dumps(parsed_data)) + add_transaction_history(token_name=tokenIdentification, sourceFloAddress=inputAddress, destFloAddress=outputAddress, transferAmount=tokenAmount, blockNumber=blockinfo['height'], blockHash=blockinfo['hash'], blocktime=blockinfo['time'], transactionHash=transaction_data['txid'], jsonData=json.dumps(transaction_data), transactionType=transactionType, parsedFloData=json.dumps(parsed_data)) session.commit() session.close() @@ -770,7 +764,7 @@ def process_minimum_subscriptionamount(contractStructure, connection, blockinfo, tokenIdentification = contractStructure['tokenIdentification'] contractAddress = connection.execute('SELECT * FROM contractstructure WHERE attribute="contractAddress"').fetchall()[0][0] returnval = transferToken(tokenIdentification, participant[1], contractAddress, participant[0], blockinfo = blockinfo) - if returnval is None: + if returnval == 0: logger.critical("Something went wrong in the token transfer method while doing local Smart Contract Trigger. THIS IS CRITICAL ERROR") return @@ -930,7 +924,7 @@ def checkLocal_expiry_trigger_deposit(blockinfo): transaction_data['txid'] = query.transactionHash transaction_data['blockheight'] = blockinfo['height'] returnval = transferToken(sellingToken, returnAmount, query.contractAddress, depositorAddress, transaction_data=transaction_data, parsed_data=parsed_data, blockinfo=blockinfo) - if returnval is None: + if returnval == 0: logger.critical("Something went wrong in the token transfer method while return contract deposit. THIS IS CRITICAL ERROR") return else: @@ -1005,7 +999,7 @@ def processTransaction(transaction_data, parsed_data, blockinfo): # todo Rule 40 - For each vin, find the feeding address and the fed value. Make an inputlist containing [inputaddress, n value] for vin in transaction_data["vin"]: - vinlist.append([vin["addr"], float(vin["value"])]) + vinlist.append([vin["addresses"][0], float(vin["value"])]) totalinputval = float(transaction_data["valueIn"]) @@ -1094,12 +1088,12 @@ def processTransaction(transaction_data, parsed_data, blockinfo): return 0 returnval = transferToken(parsed_data['tokenIdentification'], parsed_data['tokenAmount'], inputlist[0],outputlist[0], transaction_data, parsed_data, isInfiniteToken=isInfiniteToken, blockinfo = blockinfo) - if returnval is None: + if returnval == 0: logger.info("Something went wrong in the token transfer method") pushData_SSEapi(f"Error | Something went wrong while doing the internal db transactions for {transaction_data['txid']}") return 0 else: - updateLatestTransaction(transaction_data, parsed_data, f"{parsed_data['tokenIdentification']}", transaction_type='token-transfer') + updateLatestTransaction(transaction_data, parsed_data, f"{parsed_data['tokenIdentification']}", transactionType='token-transfer') # If this is the first interaction of the outputlist's address with the given token name, add it to token mapping connection = create_database_connection('system_dbs', {'db_name':'system'}) @@ -1251,7 +1245,7 @@ def processTransaction(transaction_data, parsed_data, blockinfo): if partialTransferCounter == 0: # Check if the tokenAmount being transferred exists in the address & do the token transfer returnval = transferToken(parsed_data['tokenIdentification'], parsed_data['tokenAmount'], inputlist[0], outputlist[0], transaction_data, parsed_data, blockinfo = blockinfo) - if returnval is not None: + if returnval != 0: # Store participant details in the smart contract's db session.add(ContractParticipants(participantAddress=inputadd, tokenAmount=parsed_data['tokenAmount'], @@ -1281,7 +1275,7 @@ def processTransaction(transaction_data, parsed_data, blockinfo): if len(firstInteractionCheck) == 0: connection.execute(f"INSERT INTO tokenAddressMapping (tokenAddress, token, transactionHash, blockNumber, blockHash) VALUES ('{outputlist[0]}', '{parsed_data['tokenIdentification']}', '{transaction_data['txid']}', '{transaction_data['blockheight']}', '{transaction_data['blockhash']}')") connection.close() - updateLatestTransaction(transaction_data, parsed_data, f"{parsed_data['contractName']}-{outputlist[0]}", transaction_type='ote-externaltrigger-participation') + updateLatestTransaction(transaction_data, parsed_data, f"{parsed_data['contractName']}-{outputlist[0]}", transactionType='ote-externaltrigger-participation') return 1 else: @@ -1290,7 +1284,7 @@ def processTransaction(transaction_data, parsed_data, blockinfo): elif partialTransferCounter == 1: # Transfer only part of the tokens users specified, till the time it reaches maximumamount returnval = transferToken(parsed_data['tokenIdentification'], maximumsubscriptionamount - amountDeposited, inputlist[0], outputlist[0], transaction_data, parsed_data, blockinfo = blockinfo) - if returnval is not None: + if returnval != 0: # Store participant details in the smart contract's db session.add(ContractParticipants(participantAddress=inputadd, tokenAmount=maximumsubscriptionamount - amountDeposited, @@ -1312,7 +1306,7 @@ def processTransaction(transaction_data, parsed_data, blockinfo): blockHash=transaction_data['blockhash'])) session.commit() session.close() - updateLatestTransaction(transaction_data, parsed_data, f"{parsed_data['contractName']}-{outputlist[0]}", transaction_type='ote-externaltrigger-participation') + updateLatestTransaction(transaction_data, parsed_data, f"{parsed_data['contractName']}-{outputlist[0]}", transactionType='ote-externaltrigger-participation') return 1 else: @@ -1335,7 +1329,7 @@ def processTransaction(transaction_data, parsed_data, blockinfo): # Check if the tokenAmount being transferred exists in the address & do the token transfer returnval = transferToken(parsed_data['tokenIdentification'], transferAmount, inputlist[0], outputlist[0], transaction_data, parsed_data, blockinfo = blockinfo) - if returnval is not None: + if returnval != 0: # Store participant details in the smart contract's db session.add(ContractParticipants(participantAddress=inputadd, tokenAmount=transferAmount, userChoice='-', transactionHash=transaction_data['txid'], blockNumber=transaction_data['blockheight'], blockHash=transaction_data['blockhash'])) @@ -1361,7 +1355,7 @@ def processTransaction(transaction_data, parsed_data, blockinfo): if len(firstInteractionCheck) == 0: connection.execute(f"INSERT INTO tokenAddressMapping (tokenAddress, token, transactionHash, blockNumber, blockHash) VALUES ('{outputlist[0]}', '{parsed_data['tokenIdentification']}', '{transaction_data['txid']}', '{transaction_data['blockheight']}', '{transaction_data['blockhash']}')") connection.close() - updateLatestTransaction(transaction_data, parsed_data, f"{parsed_data['contractName']}-{outputlist[0]}", transaction_type='ote-internaltrigger-participation') + updateLatestTransaction(transaction_data, parsed_data, f"{parsed_data['contractName']}-{outputlist[0]}", transactionType='ote-internaltrigger-participation') return 1 else: @@ -1419,9 +1413,9 @@ def processTransaction(transaction_data, parsed_data, blockinfo): if available_deposit_sum >= swapAmount: # accepting token transfer from participant to smart contract address - returnval = transferToken(parsed_data['tokenIdentification'], parsed_data['tokenAmount'], inputlist[0], outputlist[0], transaction_data=transaction_data, parsed_data=parsed_data, isInfiniteToken=None, blockinfo=blockinfo) - if returnval is None: - logger.info("CRITICAL ERROR | Something went wrong in the token transfer method while doing local Smart Contract Particiaption") + returnval = transferToken(parsed_data['tokenIdentification'], parsed_data['tokenAmount'], inputlist[0], outputlist[0], transaction_data=transaction_data, parsed_data=parsed_data, isInfiniteToken=None, blockinfo=blockinfo, transactionType='tokenswapParticipation') + if returnval == 0: + logger.info("ERROR | Something went wrong in the token transfer method while doing local Smart Contract Particiaption") return 0 # If this is the first interaction of the outputlist's address with the given token name, add it to token mapping @@ -1440,8 +1434,8 @@ def processTransaction(transaction_data, parsed_data, blockinfo): for a_deposit in available_deposits: if a_deposit.depositBalance > remaining_amount: # accepting token transfer from the contract to depositor's address - returnval = transferToken(contractStructure['accepting_token'], remaining_amount * swapPrice, contractStructure['contractAddress'], a_deposit.depositorAddress, transaction_data=transaction_data, parsed_data=parsed_data, isInfiniteToken=None, blockinfo=blockinfo) - if returnval is None: + returnval = transferToken(contractStructure['accepting_token'], remaining_amount * swapPrice, contractStructure['contractAddress'], a_deposit.depositorAddress, transaction_data=transaction_data, parsed_data=parsed_data, isInfiniteToken=None, blockinfo=blockinfo, transactionType='tokenswapDepositSettlement') + if returnval == 0: logger.info("CRITICAL ERROR | Something went wrong in the token transfer method while doing local Smart Contract Particiaption deposit swap operation") return 0 @@ -1479,8 +1473,8 @@ def processTransaction(transaction_data, parsed_data, blockinfo): elif a_deposit.depositBalance <= remaining_amount: # accepting token transfer from the contract to depositor's address - returnval = transferToken(contractStructure['accepting_token'], a_deposit.depositBalance * swapPrice, contractStructure['contractAddress'], a_deposit.depositorAddress, transaction_data=transaction_data, parsed_data=parsed_data, isInfiniteToken=None, blockinfo=blockinfo) - if returnval is None: + returnval = transferToken(contractStructure['accepting_token'], a_deposit.depositBalance * swapPrice, contractStructure['contractAddress'], a_deposit.depositorAddress, transaction_data=transaction_data, parsed_data=parsed_data, isInfiniteToken=None, blockinfo=blockinfo, transactionType='tokenswapDepositSettlement') + if returnval == 0: logger.info("CRITICAL ERROR | Something went wrong in the token transfer method while doing local Smart Contract Particiaption deposit swap operation") return 0 @@ -1531,8 +1525,8 @@ def processTransaction(transaction_data, parsed_data, blockinfo): del systemdb_session # token transfer from the contract to participant's address - returnval = transferToken(contractStructure['selling_token'], swapAmount, outputlist[0], inputlist[0], transaction_data=transaction_data, parsed_data=parsed_data, isInfiniteToken=None, blockinfo=blockinfo) - if returnval is None: + returnval = transferToken(contractStructure['selling_token'], swapAmount, outputlist[0], inputlist[0], transaction_data=transaction_data, parsed_data=parsed_data, isInfiniteToken=None, blockinfo=blockinfo, transactionType='tokenswapParticipationSettlement') + if returnval == 0: logger.info("CRITICAL ERROR | Something went wrong in the token transfer method while doing local Smart Contract Particiaption") return 0 @@ -1551,7 +1545,7 @@ def processTransaction(transaction_data, parsed_data, blockinfo): systemdb_connection.execute(f"INSERT INTO tokenAddressMapping (tokenAddress, token, transactionHash, blockNumber, blockHash) VALUES ('{inputlist[0]}', '{contractStructure['selling_token']}', '{transaction_data['txid']}', '{transaction_data['blockheight']}', '{transaction_data['blockhash']}')") systemdb_connection.close() - updateLatestTransaction(transaction_data, parsed_data, f"{parsed_data['contractName']}-{outputlist[0]}", transaction_type='tokenswap-participation') + updateLatestTransaction(transaction_data, parsed_data, f"{parsed_data['contractName']}-{outputlist[0]}", transactionType='tokenswapParticipation') pushData_SSEapi(f"Token swap successfully performed at contract {parsed_data['contractName']}-{outputlist[0]} with the transaction {transaction_data['txid']}") else: @@ -1603,12 +1597,12 @@ def processTransaction(transaction_data, parsed_data, blockinfo): return 0 returnval = transferToken(parsed_data['tokenIdentification'], parsed_data['tokenAmount'], inputlist[0],outputlist[0], transaction_data, parsed_data, isInfiniteToken=isInfiniteToken, blockinfo = blockinfo) - if returnval is None: + if returnval == 0: logger.info("Something went wrong in the token transfer method") pushData_SSEapi(f"Error | Something went wrong while doing the internal db transactions for {transaction_data['txid']}") return 0 else: - updateLatestTransaction(transaction_data, parsed_data, f"{parsed_data['tokenIdentification']}", transaction_type='token-transfer') + updateLatestTransaction(transaction_data, parsed_data, f"{parsed_data['tokenIdentification']}", transactionType='token-transfer') # If this is the first interaction of the outputlist's address with the given token name, add it to token mapping connection = create_database_connection('system_dbs', {'db_name':'system'}) @@ -2042,7 +2036,7 @@ def processTransaction(transaction_data, parsed_data, blockinfo): tokenIdentification = connection.execute('SELECT * FROM contractstructure WHERE attribute="tokenIdentification"').fetchall()[0][0] contractAddress = connection.execute('SELECT * FROM contractstructure WHERE attribute="contractAddress"').fetchall()[0][0] returnval = transferToken(tokenIdentification, participant[1], contractAddress, participant[0], transaction_data, parsed_data, blockinfo = blockinfo) - if returnval is None: + if returnval == 0: logger.info("CRITICAL ERROR | Something went wrong in the token transfer method while doing local Smart Contract Trigger") return 0 @@ -2084,7 +2078,7 @@ def processTransaction(transaction_data, parsed_data, blockinfo): for winner in contractWinners: winnerAmount = "%.8f" % ((winner[2] / winnerSum) * tokenSum) returnval = transferToken(tokenIdentification, winnerAmount, outputlist[0], winner[1], transaction_data, parsed_data, blockinfo = blockinfo) - if returnval is None: + if returnval == 0: logger.critical("Something went wrong in the token transfer method while doing local Smart Contract Trigger") return 0 connection.execute(f"INSERT INTO contractwinners (participantAddress, winningAmount, userChoice, transactionHash, blockNumber, blockHash) VALUES('{winner[1]}', {winnerAmount}, '{parsed_data['triggerCondition']}', '{transaction_data['txid']}','{blockinfo['height']}','{blockinfo['hash']}');") @@ -2163,7 +2157,7 @@ def processTransaction(transaction_data, parsed_data, blockinfo): # Transfer the token returnval = transferToken(parsed_data['tokenIdentification'], parsed_data['depositAmount'], inputlist[0], outputlist[0], transaction_data, parsed_data, blockinfo=blockinfo) - if returnval is None: + if returnval == 0: logger.info("Something went wrong in the token transfer method") pushData_SSEapi(f"Error | Something went wrong while doing the internal db transactions for {transaction_data['txid']}") return 0 @@ -2314,7 +2308,7 @@ def scanBlockchain(): while(current_index == -1): response = newMultiRequest('blocks?limit=1') try: - current_index = response['blocks'][0]['height'] + current_index = response['backend']['blocks'] except: logger.info('Latest block count response from multiRequest() is not in the right format. Displaying the data received in the log below') logger.info(response) diff --git a/util_rollback.py b/util_rollback.py index 153018a..57155ee 100644 --- a/util_rollback.py +++ b/util_rollback.py @@ -157,7 +157,7 @@ def find_input_output_addresses(transaction_data): querylist = [] for vin in transaction_data["vin"]: - vinlist.append([vin["addr"], float(vin["value"])]) + vinlist.append([vin["addresses"][0], float(vin["value"])]) totalinputval = float(transaction_data["valueIn"]) @@ -210,17 +210,17 @@ def rollback_database(blockNumber, dbtype, dbname): db_session = create_database_session_orm('token', {'token_name':dbname}, TokenBase) while(True): subqry = db_session.query(func.max(ActiveTable.id)) - activeTable_entry = db_session.query(ActiveTable).filter(ActiveTable.id == subqry).first() + activeTable_entry = db_session.query(ActiveTable).filter(ActiveTable.id == subqry).first() if activeTable_entry.blockNumber <= blockNumber: break outputAddress = activeTable_entry.address transferAmount = activeTable_entry.transferBalance - inputAddress = None + inputAddress = None # Find out consumedpid and partially consumed pids - parentid = None - orphaned_parentid = None - consumedpid = None + parentid = None + orphaned_parentid = None + consumedpid = None if activeTable_entry.parentid is not None: parentid = activeTable_entry.parentid if activeTable_entry.orphaned_parentid is not None: @@ -420,16 +420,16 @@ def initiate_rollback_process(): for db in db_names: if db.db_type in ['token', 'nft', 'infinite-token']: if db.blockNumber > rollback_block: - delete_database(rollback_block, f"{db.db_name}") + delete_database(rollback_block, f"{db.db_name}") else: - rollback_database(rollback_block, 'token', f"{db.db_name}") + rollback_database(rollback_block, 'token', f"{db.db_name}") elif db.db_type in ['smartcontract']: if db.blockNumber > rollback_block: - delete_database(rollback_block, f"{db.db_name}") + delete_database(rollback_block, f"{db.db_name}") else: db_split = db.db_name.rsplit('-',1) db_name = {'contract_name':db_split[0], 'contract_address':db_split[1]} - rollback_database(rollback_block, 'smartcontract', db_name) + rollback_database(rollback_block, 'smartcontract', db_name) ''' for token_db in tokendb_set: