Temp Bug fix for API returning smart contract details fetching from system.db's activecontracts table

This commit is contained in:
Vivek Teega 2023-04-22 17:28:18 +00:00
parent 975d856570
commit 0c4b624073

View File

@ -99,6 +99,35 @@ def update_transaction_confirmations(transactionJson):
transactionJson['confirmations'] = response_data['confirmations'] transactionJson['confirmations'] = response_data['confirmations']
return transactionJson return transactionJson
def smartcontract_morph_helper(smart_contracts):
contractList = []
for idx, contract in enumerate(smart_contracts):
contractDict = {}
contractDict['contractName'] = contract[1]
contractDict['contractAddress'] = contract[2]
contractDict['status'] = contract[3]
contractDict['contractType'] = contract[5]
if contractDict['contractType'] == 'continuous-event':
contractDict['contractSubType'] = 'tokenswap'
accepting_selling_tokens = contract[4]
elif contractDict['contractType'] == 'one-time-event':
contractDict['tokenIdentification'] = contract[4]
# pull the contract structure
contractStructure = fetchContractStructure(contractDict['contractName'], contractDict['contractAddress'])
# compare
if 'payeeAddress' in contractStructure.keys():
contractDict['contractSubType'] = 'time-trigger'
else:
contractDict['contractSubType'] = 'external-trigger'
contractDict['expiryDate'] = contract[9]
contractDict['closeDate'] = contract[10]
contractDict['transactionHash'] = contract[6]
contractDict['blockNumber'] = contract[7]
contractDict['incorporationDate'] = contract[8]
contractList.append(contractDict)
return contractList
def smartContractInfo_output(contractName, contractAddress, contractType, subtype): def smartContractInfo_output(contractName, contractAddress, contractType, subtype):
if contractType == 'continuos-event' and contractType == 'tokenswap': if contractType == 'continuos-event' and contractType == 'tokenswap':
pass pass
@ -1387,7 +1416,7 @@ async def floAddressInfo(floAddress):
# input validation # input validation
if not check_flo_address(floAddress, is_testnet): if not check_flo_address(floAddress, is_testnet):
return jsonify(description='floAddress validation failed'), 400 return jsonify(description='floAddress validation failed'), 400
dblocation = dbfolder + '/system.db' dblocation = dbfolder + '/system.db'
if os.path.exists(dblocation): if os.path.exists(dblocation):
conn = sqlite3.connect(dblocation) conn = sqlite3.connect(dblocation)
@ -1396,7 +1425,7 @@ async def floAddressInfo(floAddress):
tokenNames = c.fetchall() tokenNames = c.fetchall()
c.execute(f"SELECT contractName, status, tokenIdentification, contractType, transactionHash, blockNumber, blockHash FROM activecontracts WHERE contractAddress='{floAddress}'") c.execute(f"SELECT contractName, status, tokenIdentification, contractType, transactionHash, blockNumber, blockHash FROM activecontracts WHERE contractAddress='{floAddress}'")
incorporatedContracts = c.fetchall() incorporatedContracts = c.fetchall()
detailList = None
if len(tokenNames) != 0: if len(tokenNames) != 0:
detailList = {} detailList = {}
for token in tokenNames: for token in tokenNames:
@ -1411,11 +1440,12 @@ async def floAddressInfo(floAddress):
tempdict['balance'] = balance tempdict['balance'] = balance
tempdict['token'] = token tempdict['token'] = token
detailList[token] = tempdict detailList[token] = tempdict
else: #else:
# Address is not associated with any token # # Address is not associated with any token
return jsonify(description='FLO address is not associated with any tokens'), 404 # return jsonify(description='FLO address is not associated with any tokens'), 404
if len(incorporatedContracts) != 0: incorporatedSmartContracts = None
if len(incorporatedContracts) > 0:
incorporatedSmartContracts = [] incorporatedSmartContracts = []
for contract in incorporatedContracts: for contract in incorporatedContracts:
tempdict = {} tempdict = {}
@ -1428,9 +1458,8 @@ async def floAddressInfo(floAddress):
tempdict['blockNumber'] = contract[5] tempdict['blockNumber'] = contract[5]
tempdict['blockHash'] = contract[6] tempdict['blockHash'] = contract[6]
incorporatedSmartContracts.append(tempdict) incorporatedSmartContracts.append(tempdict)
else:
incorporatedContracts=None return jsonify(floAddress=floAddress, floAddressBalances=detailList, incorporatedSmartContracts=incorporatedSmartContracts), 200
return jsonify(floAddress=floAddress, floAddressBalances=detailList, incorporatedSmartContracts=None), 200
@app.route('/api/v2/floAddressBalance/<floAddress>', methods=['GET']) @app.route('/api/v2/floAddressBalance/<floAddress>', methods=['GET'])
@ -1556,21 +1585,9 @@ async def getContractList_v2():
conn = sqlite3.connect(os.path.join(dbfolder, 'system.db')) conn = sqlite3.connect(os.path.join(dbfolder, 'system.db'))
c = conn.cursor() c = conn.cursor()
smart_contracts = return_smart_contracts(c, contractName, contractAddress) smart_contracts = return_smart_contracts(c, contractName, contractAddress)
for idx, contract in enumerate(smart_contracts): smart_contracts_morphed = smartcontract_morph_helper(smart_contracts)
contractDict = {}
contractDict['contractName'] = contract[1]
contractDict['contractAddress'] = contract[2]
contractDict['status'] = contract[3]
contractDict['tokenIdentification'] = contract[4]
contractDict['contractType'] = contract[5]
contractDict['transactionHash'] = contract[6]
contractDict['blockNumber'] = contract[7]
contractDict['incorporationDate'] = contract[8]
contractDict['expiryDate'] = contract[9]
contractDict['closeDate'] = contract[10]
contractList.append(contractDict)
conn.close() conn.close()
return jsonify(smartContracts=contractList), 200 return jsonify(smartContracts=smart_contracts_morphed), 200
@app.route('/api/v2/smartContractInfo', methods=['GET']) @app.route('/api/v2/smartContractInfo', methods=['GET'])
@ -2199,26 +2216,10 @@ async def tokenSmartContractList():
# list of smart contracts # list of smart contracts
conn = sqlite3.connect(os.path.join(dbfolder, 'system.db')) conn = sqlite3.connect(os.path.join(dbfolder, 'system.db'))
c = conn.cursor() c = conn.cursor()
contractList = []
c.execute('select * from activecontracts') c.execute('select * from activecontracts')
allcontractsDetailList = c.fetchall() allcontractsDetailList = c.fetchall()
for idx, contract in enumerate(allcontractsDetailList): smart_contracts_morphed = smartcontract_morph_helper(allcontractsDetailList)
contractDict = {} return jsonify(tokens=filelist, smartContracts=smart_contracts_morphed), 200
contractDict['contractName'] = contract[1]
contractDict['contractAddress'] = contract[2]
contractDict['status'] = contract[3]
contractDict['tokenIdentification'] = contract[4]
contractDict['contractType'] = contract[5]
contractDict['transactionHash'] = contract[6]
contractDict['blockNumber'] = contract[7]
contractDict['blockHash'] = contract[8]
contractDict['incorporationDate'] = contract[9]
if contract[10]:
contractDict['expiryDate'] = contract[10]
if contract[11]:
contractDict['closeDate'] = contract[11]
contractList.append(contractDict)
return jsonify(tokens=filelist, smartContracts=contractList), 200
class ServerSentEvent: class ServerSentEvent: