From b396bc1f746afe9994b3408d10f242d64f142d04 Mon Sep 17 00:00:00 2001 From: RanchiMall Dev Date: Fri, 9 Jun 2023 19:55:49 +0000 Subject: [PATCH 1/3] Critical bug fix for infinite token addressBalance --- tracktokens_smartcontracts.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/tracktokens_smartcontracts.py b/tracktokens_smartcontracts.py index c001eb2..87f59a9 100755 --- a/tracktokens_smartcontracts.py +++ b/tracktokens_smartcontracts.py @@ -18,6 +18,7 @@ from datetime import datetime from ast import literal_eval from models import SystemData, TokenBase, ActiveTable, ConsumedTable, TransferLogs, TransactionHistory, TokenContractAssociation, ContractBase, ContractStructure, ContractParticipants, ContractTransactionHistory, ContractDeposits, ConsumedInfo, ContractWinners, ContinuosContractBase, ContractStructure2, ContractParticipants2, ContractDeposits2, ContractTransactionHistory2, SystemBase, ActiveContracts, SystemData, ContractAddressMapping, TokenAddressMapping, DatabaseTypeMapping, TimeActions, RejectedContractTransactionHistory, RejectedTransactionHistory, LatestCacheBase, LatestTransactions, LatestBlocks from statef_processing import process_stateF +import pdb def newMultiRequest(apicall): @@ -39,10 +40,10 @@ def newMultiRequest(apicall): def pushData_SSEapi(message): - signature = pyflo.sign_message(message.encode(), privKey) + '''signature = pyflo.sign_message(message.encode(), privKey) headers = {'Accept': 'application/json', 'Content-Type': 'application/json', 'Signature': signature} - '''try: + try: r = requests.post(sseAPI_url, json={'message': '{}'.format(message)}, headers=headers) except: logger.error("couldn't push the following message to SSE api {}".format(message))''' @@ -506,8 +507,10 @@ def processBlock(blockindex=None, blockhash=None): 'ec6604d147d99ec41f05dec82f9c241815358015904fad37ace061d7580b178e', '39ef49e0e06438bda462c794955735e7ea3ae81cb576ec5c97b528c8a257614c', 'd36b744d6b9d8a694a93476dbd1134dbdc8223cf3d1a604447acb09221aa3b49', - '64abe801d12224d10422de88070a76ad8c6d17b533ba5288fb0961b4cbf6adf4']: + '64abe801d12224d10422de88070a76ad8c6d17b533ba5288fb0961b4cbf6adf4', + 'e0f728ec71bef67d17c94d66e051ae4a611ec28454443337b268e5efc0a5f12f']: print(f'Paused at transaction {transaction}') + pdb.set_trace() # TODO CLEANUP - REMOVE THIS WHILE SECTION, WHY IS IT HERE? while(current_index == -1): @@ -589,7 +592,14 @@ def transferToken(tokenIdentification, tokenAmount, inputAddress, outputAddress, if isInfiniteToken == True: # Make new entry - session.add(ActiveTable(address=outputAddress, consumedpid='1', transferBalance=float(tokenAmount), blockNumber=blockinfo['height'])) + receiverAddress_details = session.query(ActiveTable).filter(ActiveTable.address==outputAddress, ActiveTable.addressBalance!=None).first() + if receiverAddress_details is None: + addressBalance = commentTransferAmount + else: + addressBalance = receiverAddress_details.addressBalance + commentTransferAmount + receiverAddress_details.addressBalance = None + session.add(ActiveTable(address=outputAddress, consumedpid='1', transferBalance=float(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)) session.commit() session.close() From fbc534b47777dee746a3e24abf196be56a095dc6 Mon Sep 17 00:00:00 2001 From: RanchiMall Dev Date: Fri, 9 Jun 2023 20:19:26 +0000 Subject: [PATCH 2/3] Bugfix : reference before assignment --- tracktokens_smartcontracts.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tracktokens_smartcontracts.py b/tracktokens_smartcontracts.py index 87f59a9..c4a2c56 100755 --- a/tracktokens_smartcontracts.py +++ b/tracktokens_smartcontracts.py @@ -508,7 +508,7 @@ def processBlock(blockindex=None, blockhash=None): '39ef49e0e06438bda462c794955735e7ea3ae81cb576ec5c97b528c8a257614c', 'd36b744d6b9d8a694a93476dbd1134dbdc8223cf3d1a604447acb09221aa3b49', '64abe801d12224d10422de88070a76ad8c6d17b533ba5288fb0961b4cbf6adf4', - 'e0f728ec71bef67d17c94d66e051ae4a611ec28454443337b268e5efc0a5f12f']: + 'ec9a852aa8a27877ba79ae99cc1359c0e04f6e7f3097521279bcc68e3883d760']: print(f'Paused at transaction {transaction}') pdb.set_trace() @@ -589,16 +589,16 @@ def process_pids(entries, session, piditem): def transferToken(tokenIdentification, tokenAmount, inputAddress, outputAddress, transaction_data=None, parsed_data=None, isInfiniteToken=None, blockinfo=None): session = create_database_session_orm('token', {'token_name': f"{tokenIdentification}"}, TokenBase) - + tokenAmount = float(tokenAmount) if isInfiniteToken == True: # Make new entry receiverAddress_details = session.query(ActiveTable).filter(ActiveTable.address==outputAddress, ActiveTable.addressBalance!=None).first() if receiverAddress_details is None: - addressBalance = commentTransferAmount + addressBalance = tokenAmount else: - addressBalance = receiverAddress_details.addressBalance + commentTransferAmount + addressBalance = receiverAddress_details.addressBalance + tokenAmount receiverAddress_details.addressBalance = None - session.add(ActiveTable(address=outputAddress, consumedpid='1', transferBalance=float(tokenAmount), addressBalance=addressBalance, blockNumber=blockinfo['height'])) + 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)) session.commit() From f20b8d9e8f5cfdca20a9926565d711c9c9a636b4 Mon Sep 17 00:00:00 2001 From: RanchiMall Dev Date: Sun, 11 Jun 2023 17:39:43 +0000 Subject: [PATCH 3/3] Added tokenAddressMapping in the missing places --- tracktokens_smartcontracts.py | 52 +++++++++++++++++++++++++++++++++-- 1 file changed, 50 insertions(+), 2 deletions(-) diff --git a/tracktokens_smartcontracts.py b/tracktokens_smartcontracts.py index c4a2c56..e6f85b5 100755 --- a/tracktokens_smartcontracts.py +++ b/tracktokens_smartcontracts.py @@ -508,9 +508,10 @@ def processBlock(blockindex=None, blockhash=None): '39ef49e0e06438bda462c794955735e7ea3ae81cb576ec5c97b528c8a257614c', 'd36b744d6b9d8a694a93476dbd1134dbdc8223cf3d1a604447acb09221aa3b49', '64abe801d12224d10422de88070a76ad8c6d17b533ba5288fb0961b4cbf6adf4', - 'ec9a852aa8a27877ba79ae99cc1359c0e04f6e7f3097521279bcc68e3883d760']: + 'ec9a852aa8a27877ba79ae99cc1359c0e04f6e7f3097521279bcc68e3883d760', + '16e836ceb973447a5fd71e969d7d4cde23330547a855731003c7fc53c86937e4']: print(f'Paused at transaction {transaction}') - pdb.set_trace() + # TODO CLEANUP - REMOVE THIS WHILE SECTION, WHY IS IT HERE? while(current_index == -1): @@ -1353,6 +1354,13 @@ def processTransaction(transaction_data, parsed_data, blockinfo): blockNumber=transaction_data['blockheight'], blockHash=transaction_data['blockhash'])) session.commit() + + # 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'}) + firstInteractionCheck = connection.execute(f"SELECT * FROM tokenAddressMapping WHERE tokenAddress='{outputlist[0]}' AND token='{parsed_data['tokenIdentification']}'").fetchall() + 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') return 1 @@ -1415,6 +1423,14 @@ def processTransaction(transaction_data, parsed_data, blockinfo): if returnval is None: logger.info("CRITICAL 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 + systemdb_connection = create_database_connection('system_dbs', {'db_name':'system'}) + firstInteractionCheck = systemdb_connection.execute(f"SELECT * FROM tokenAddressMapping WHERE tokenAddress='{outputlist[0]}' AND token='{parsed_data['tokenIdentification']}'").fetchall() + if len(firstInteractionCheck) == 0: + systemdb_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']}')") + systemdb_connection.close() + # ContractDepositTable # For each unique deposit( address, expirydate, blocknumber) there will be 2 entries added to the table @@ -1429,6 +1445,14 @@ def processTransaction(transaction_data, parsed_data, blockinfo): logger.info("CRITICAL ERROR | Something went wrong in the token transfer method while doing local Smart Contract Particiaption deposit swap operation") return 0 + # If this is the first interaction of the outputlist's address with the given token name, add it to token mapping + systemdb_connection = create_database_connection('system_dbs', {'db_name':'system'}) + firstInteractionCheck = systemdb_connection.execute(f"SELECT * FROM tokenAddressMapping WHERE tokenAddress='{a_deposit.depositorAddress}' AND token='{contractStructure['accepting_token']}'").fetchall() + if len(firstInteractionCheck) == 0: + systemdb_connection.execute(f"INSERT INTO tokenAddressMapping (tokenAddress, token, transactionHash, blockNumber, blockHash) VALUES ('{a_deposit.depositorAddress}', '{contractStructure['accepting_token']}', '{transaction_data['txid']}', '{transaction_data['blockheight']}', '{transaction_data['blockhash']}')") + systemdb_connection.close() + + contract_session.add(ContractDeposits( depositorAddress= a_deposit.depositorAddress, depositAmount= 0 - remaining_amount, status='deposit-honor', @@ -1459,6 +1483,14 @@ def processTransaction(transaction_data, parsed_data, blockinfo): if returnval is None: logger.info("CRITICAL ERROR | Something went wrong in the token transfer method while doing local Smart Contract Particiaption deposit swap operation") return 0 + + # If this is the first interaction of the outputlist's address with the given token name, add it to token mapping + systemdb_connection = create_database_connection('system_dbs', {'db_name':'system'}) + firstInteractionCheck = systemdb_connection.execute(f"SELECT * FROM tokenAddressMapping WHERE tokenAddress='{a_deposit.depositorAddress}' AND token='{contractStructure['accepting_token']}'").fetchall() + if len(firstInteractionCheck) == 0: + systemdb_connection.execute(f"INSERT INTO tokenAddressMapping (tokenAddress, token, transactionHash, blockNumber, blockHash) VALUES ('{a_deposit.depositorAddress}', '{contractStructure['accepting_token']}', '{transaction_data['txid']}', '{transaction_data['blockheight']}', '{transaction_data['blockhash']}')") + systemdb_connection.close() + contract_session.add(ContractDeposits( depositorAddress= a_deposit.depositorAddress, depositAmount= 0 - a_deposit.depositBalance, @@ -1512,6 +1544,13 @@ def processTransaction(transaction_data, parsed_data, blockinfo): contract_session.commit() contract_session.close() + # If this is the first interaction of the participant's address with the given token name, add it to token mapping + systemdb_connection = create_database_connection('system_dbs', {'db_name':'system'}) + firstInteractionCheck = systemdb_connection.execute(f"SELECT * FROM tokenAddressMapping WHERE tokenAddress='{inputlist[0]}' AND token='{contractStructure['selling_token']}'").fetchall() + if len(firstInteractionCheck) == 0: + 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') pushData_SSEapi(f"Token swap successfully performed at contract {parsed_data['contractName']}-{outputlist[0]} with the transaction {transaction_data['txid']}") @@ -2162,6 +2201,14 @@ def processTransaction(transaction_data, parsed_data, blockinfo): blockNumber=transaction_data['blockheight'])) session.commit() pushData_SSEapi(f"Deposit Smart Contract Transaction {transaction_data['txid']} for the Smart contract named {parsed_data['contractName']} at the address {outputlist[0]}") + + # If this is the first interaction of the outputlist's address with the given token name, add it to token mapping + systemdb_connection = create_database_connection('system_dbs', {'db_name':'system'}) + firstInteractionCheck = connection.execute(f"SELECT * FROM tokenAddressMapping WHERE tokenAddress='{outputlist[0]}' AND token='{parsed_data['tokenIdentification']}'").fetchall() + 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]}") return 1 @@ -2372,6 +2419,7 @@ elif config['DEFAULT']['NET'] == 'testnet': APP_ADMIN = 'oWooGLbBELNnwq8Z5YmjoVjw8GhBGH3qSP' serverlist = serverlist.split(',') neturl = config['DEFAULT']['FLOSIGHT_NETURL'] +api_url = neturl tokenapi_sse_url = config['DEFAULT']['TOKENAPI_SSE_URL'] IGNORE_BLOCK_LIST = config['DEFAULT']['IGNORE_BLOCK_LIST'].split(',')