Fixed transaction confirmation issue

This commit is contained in:
RanchiMall Dev 2023-04-02 12:17:38 +00:00
parent 285c8b363c
commit 5c91f769f2
2 changed files with 46 additions and 45 deletions

1
.gitignore vendored
View File

@ -4,4 +4,5 @@ __pycache__/
config.py config.py
.idea/ .idea/
py3.7/ py3.7/
py3.7.0/
*.db *.db

View File

@ -86,16 +86,26 @@ def blockdetailhelper(blockdetail):
def transactiondetailhelper(transactionHash): def transactiondetailhelper(transactionHash):
# check if legit transaction hash
# open the latest block database # open the latest block database
conn = sqlite3.connect(os.path.join(dbfolder, 'latestCache.db')) conn = sqlite3.connect(os.path.join(dbfolder, 'latestCache.db'))
c = conn.cursor() c = conn.cursor()
c.execute( c.execute(f"select jsonData,parsedFloData from latestTransactions where transactionHash='{transactionHash}'")
f"select jsonData,parsedFloData from latestTransactions where transactionHash='{transactionHash}'")
transactionJsonData = c.fetchall() transactionJsonData = c.fetchall()
return transactionJsonData return transactionJsonData
def update_transaction_confirmations(transactionJson):
url = f"{apiUrl}tx/{transactionJson['txid']}"
response = requests.get(url)
if response.status_code == 200:
response_data = response.json()
transactionJson['confirmations'] = response_data['confirmations']
return transactionJson
@app.route('/') @app.route('/')
async def welcome(): async def welcome():
return 'welcome' return 'welcome'
@ -201,10 +211,11 @@ async def getTokenTransactions():
conn.close() conn.close()
rowarray_list = {} rowarray_list = {}
for row in transactionJsonData: for row in transactionJsonData:
temp = {} transactions_object = {}
temp['transactionDetails'] = json.loads(row[0]) transactions_object['transactionDetails'] = json.loads(row[0])
temp['parsedFloData'] = json.loads(row[1]) transactions_object['transactionDetails'] = update_transaction_confirmations(transactions_object['transactionDetails'])
rowarray_list[temp['transactionDetails']['txid']] = temp transactions_object['parsedFloData'] = json.loads(row[1])
rowarray_list[transactions_object['transactionDetails']['txid']] = transactions_object
return jsonify(result='ok', token=token, transactions=rowarray_list) return jsonify(result='ok', token=token, transactions=rowarray_list)
@ -245,17 +256,14 @@ async def getFloAddressInfo():
if os.path.exists(dblocation): if os.path.exists(dblocation):
conn = sqlite3.connect(dblocation) conn = sqlite3.connect(dblocation)
c = conn.cursor() c = conn.cursor()
c.execute( c.execute('select token from tokenAddressMapping where tokenAddress="{}"'.format(floAddress))
'select token from tokenAddressMapping where tokenAddress="{}"'.format(floAddress))
tokenNames = c.fetchall() tokenNames = c.fetchall()
c.execute( c.execute(f"select contractName, status, tokenIdentification, contractType, transactionHash, blockNumber, blockHash from activecontracts where contractAddress='{floAddress}'")
f"select contractName, status, tokenIdentification, contractType, transactionHash, blockNumber, blockHash from activecontracts where contractAddress='{floAddress}'")
incorporatedContracts = c.fetchall() incorporatedContracts = c.fetchall()
if len(tokenNames) != 0: if len(tokenNames) != 0:
detailList = {} detailList = {}
for token in tokenNames: for token in tokenNames:
token = token[0] token = token[0]
dblocation = dbfolder + '/tokens/' + str(token) + '.db' dblocation = dbfolder + '/tokens/' + str(token) + '.db'
@ -263,8 +271,7 @@ async def getFloAddressInfo():
tempdict = {} tempdict = {}
conn = sqlite3.connect(dblocation) conn = sqlite3.connect(dblocation)
c = conn.cursor() c = conn.cursor()
c.execute( c.execute('SELECT SUM(transferBalance) FROM activeTable WHERE address="{}"'.format(floAddress))
'SELECT SUM(transferBalance) FROM activeTable WHERE address="{}"'.format(floAddress))
balance = c.fetchall()[0][0] balance = c.fetchall()[0][0]
tempdict['balance'] = balance tempdict['balance'] = balance
tempdict['token'] = token tempdict['token'] = token
@ -290,8 +297,7 @@ async def getFloAddressInfo():
return jsonify(result='ok', floAddress=floAddress, floAddressBalances=detailList, incorporatedSmartContracts=incorporatedContracts) return jsonify(result='ok', floAddress=floAddress, floAddressBalances=detailList, incorporatedSmartContracts=incorporatedContracts)
else: else:
return jsonify(result='ok', floAddress=floAddress, floAddressBalances=detailList, return jsonify(result='ok', floAddress=floAddress, floAddressBalances=detailList, incorporatedSmartContracts=None)
incorporatedSmartContracts=None)
@app.route('/api/v1.0/getFloAddressBalance', methods=['GET']) @app.route('/api/v1.0/getFloAddressBalance', methods=['GET'])
@ -381,19 +387,18 @@ async def getFloAddressTransactions():
conn = sqlite3.connect(dblocation) conn = sqlite3.connect(dblocation)
c = conn.cursor() c = conn.cursor()
if limit is None: if limit is None:
c.execute('SELECT jsonData, parsedFloData FROM transactionHistory WHERE sourceFloAddress="{}" OR destFloAddress="{}" ORDER BY id DESC'.format( c.execute('SELECT jsonData, parsedFloData FROM transactionHistory WHERE sourceFloAddress="{}" OR destFloAddress="{}" ORDER BY id DESC'.format(floAddress, floAddress))
floAddress, floAddress))
else: else:
c.execute('SELECT jsonData, parsedFloData FROM transactionHistory WHERE sourceFloAddress="{}" OR destFloAddress="{}" ORDER BY id DESC LIMIT {}'.format( c.execute('SELECT jsonData, parsedFloData FROM transactionHistory WHERE sourceFloAddress="{}" OR destFloAddress="{}" ORDER BY id DESC LIMIT {}'.format(floAddress, floAddress, limit))
floAddress, floAddress, limit))
transactionJsonData = c.fetchall() transactionJsonData = c.fetchall()
conn.close() conn.close()
for row in transactionJsonData: for row in transactionJsonData:
temp = {} transactions_object = {}
temp['transactionDetails'] = json.loads(row[0]) transactions_object['transactionDetails'] = json.loads(row[0])
temp['parsedFloData'] = json.loads(row[1]) transactions_object['transactionDetails'] = update_transaction_confirmations(transactions_object['transactionDetails'])
allTransactionList[temp['transactionDetails']['txid']] = temp transactions_object['parsedFloData'] = json.loads(row[1])
allTransactionList[transactions_object['transactionDetails']['txid']] = transactions_object
if token is None: if token is None:
return jsonify(result='ok', floAddress=floAddress, transactions=allTransactionList) return jsonify(result='ok', floAddress=floAddress, transactions=allTransactionList)
@ -691,8 +696,7 @@ async def getcontractparticipants():
returnval[row[1]] = {'participantFloAddress': row[1], 'tokenAmount': row[2], 'userChoice': row[3], returnval[row[1]] = {'participantFloAddress': row[1], 'tokenAmount': row[2], 'userChoice': row[3],
'transactionHash': row[4]} 'transactionHash': row[4]}
return jsonify(result='ok', contractName=contractName, contractAddress=contractAddress, return jsonify(result='ok', contractName=contractName, contractAddress=contractAddress, participantInfo=returnval)
participantInfo=returnval)
else: else:
return jsonify(result='error', description='Smart Contract with the given name doesn\'t exist') return jsonify(result='error', description='Smart Contract with the given name doesn\'t exist')
@ -728,8 +732,7 @@ async def getParticipantDetails():
detailsDict['tokenAmount'] = row[4] detailsDict['tokenAmount'] = row[4]
detailsDict['transactionHash'] = row[5] detailsDict['transactionHash'] = row[5]
c.execute( c.execute(f"select status, tokenIdentification, contractType, blockNumber, blockHash, incorporationDate, expiryDate, closeDate from activecontracts where contractName='{detailsDict['contractName']}' and contractAddress='{detailsDict['contractAddress']}'")
f"select status, tokenIdentification, contractType, blockNumber, blockHash, incorporationDate, expiryDate, closeDate from activecontracts where contractName='{detailsDict['contractName']}' and contractAddress='{detailsDict['contractAddress']}'")
temp = c.fetchall() temp = c.fetchall()
detailsDict['status'] = temp[0][0] detailsDict['status'] = temp[0][0]
detailsDict['tokenIdentification'] = temp[0][1] detailsDict['tokenIdentification'] = temp[0][1]
@ -822,10 +825,11 @@ async def getsmartcontracttransactions():
returnval = {} returnval = {}
for item in result: for item in result:
temp = {} transactions_object = {}
temp['transactionDetails'] = json.loads(item[0]) transactions_object['transactionDetails'] = json.loads(item[0])
temp['parsedFloData'] = json.loads(item[1]) transactions_object['transactionDetails'] = update_transaction_confirmations(transactions_object['transactionDetails'])
returnval[temp['transactionDetails']['txid']] = temp transactions_object['parsedFloData'] = json.loads(item[1])
returnval[transactions_object['transactionDetails']['txid']] = transactions_object
return jsonify(result='ok', contractName=contractName, contractAddress=contractAddress, contractTransactions=returnval) return jsonify(result='ok', contractName=contractName, contractAddress=contractAddress, contractTransactions=returnval)
@ -846,13 +850,11 @@ async def getblockdetails(blockdetail):
@app.route('/api/v1.0/getTransactionDetails/<transactionHash>', methods=['GET']) @app.route('/api/v1.0/getTransactionDetails/<transactionHash>', methods=['GET'])
async def gettransactiondetails(transactionHash): async def gettransactiondetails(transactionHash):
transactionJsonData = transactiondetailhelper(transactionHash) transactionJsonData = transactiondetailhelper(transactionHash)
if len(transactionJsonData) != 0: if len(transactionJsonData) != 0:
transactionJson = json.loads(transactionJsonData[0][0]) transactionJson = json.loads(transactionJsonData[0][0])
transactionJson = update_transaction_confirmations(transactionJson)
parseResult = json.loads(transactionJsonData[0][1]) parseResult = json.loads(transactionJsonData[0][1])
return jsonify(parsedFloData=parseResult, transactionDetails=transactionJson, transactionHash=transactionHash, result='ok') return jsonify(parsedFloData=parseResult, transactionDetails=transactionJson, transactionHash=transactionHash, result='ok')
else: else:
return jsonify(result='error', description='Transaction doesn\'t exist in database') return jsonify(result='error', description='Transaction doesn\'t exist in database')
@ -879,10 +881,10 @@ async def getLatestTransactionDetails():
item = list(item) item = list(item)
tx_parsed_details = {} tx_parsed_details = {}
tx_parsed_details['transactionDetails'] = json.loads(item[3]) tx_parsed_details['transactionDetails'] = json.loads(item[3])
tx_parsed_details['transactionDetails'] = update_transaction_confirmations(tx_parsed_details['transactionDetails'])
tx_parsed_details['parsedFloData'] = json.loads(item[5]) tx_parsed_details['parsedFloData'] = json.loads(item[5])
tx_parsed_details['parsedFloData']['transactionType'] = item[4] tx_parsed_details['parsedFloData']['transactionType'] = item[4]
tx_parsed_details['transactionDetails']['blockheight'] = int( tx_parsed_details['transactionDetails']['blockheight'] = int(item[2])
item[2])
tempdict[json.loads(item[3])['txid']] = tx_parsed_details tempdict[json.loads(item[3])['txid']] = tx_parsed_details
else: else:
c.execute('''SELECT * FROM latestTransactions WHERE blockNumber IN (SELECT DISTINCT blockNumber FROM latestTransactions ORDER BY blockNumber DESC) ORDER BY id ASC;''') c.execute('''SELECT * FROM latestTransactions WHERE blockNumber IN (SELECT DISTINCT blockNumber FROM latestTransactions ORDER BY blockNumber DESC) ORDER BY id ASC;''')
@ -893,10 +895,10 @@ async def getLatestTransactionDetails():
item = list(item) item = list(item)
tx_parsed_details = {} tx_parsed_details = {}
tx_parsed_details['transactionDetails'] = json.loads(item[3]) tx_parsed_details['transactionDetails'] = json.loads(item[3])
tx_parsed_details['transactionDetails'] = update_transaction_confirmations(tx_parsed_details['transactionDetails'])
tx_parsed_details['parsedFloData'] = json.loads(item[5]) tx_parsed_details['parsedFloData'] = json.loads(item[5])
tx_parsed_details['parsedFloData']['transactionType'] = item[4] tx_parsed_details['parsedFloData']['transactionType'] = item[4]
tx_parsed_details['transactionDetails']['blockheight'] = int( tx_parsed_details['transactionDetails']['blockheight'] = int(item[2])
item[2])
tempdict[json.loads(item[3])['txid']] = tx_parsed_details tempdict[json.loads(item[3])['txid']] = tx_parsed_details
return jsonify(result='ok', latestTransactions=tempdict) return jsonify(result='ok', latestTransactions=tempdict)
@ -914,12 +916,10 @@ async def getLatestBlockDetails():
return 'Latest transactions db doesn\'t exist. This is unusual, please report on https://github.com/ranchimall/ranchimallflo-api' return 'Latest transactions db doesn\'t exist. This is unusual, please report on https://github.com/ranchimall/ranchimallflo-api'
if limit is None: if limit is None:
c.execute( c.execute('''SELECT * FROM ( SELECT * FROM latestBlocks ORDER BY blockNumber DESC LIMIT 4) ORDER BY id ASC;''')
'''SELECT * FROM ( SELECT * FROM latestBlocks ORDER BY blockNumber DESC LIMIT 4) ORDER BY id ASC;''')
else: else:
int(limit) int(limit)
c.execute( c.execute('SELECT * FROM ( SELECT * FROM latestBlocks ORDER BY blockNumber DESC LIMIT {}) ORDER BY id ASC;'.format(limit))
'SELECT * FROM ( SELECT * FROM latestBlocks ORDER BY blockNumber DESC LIMIT {}) ORDER BY id ASC;'.format(limit))
latestBlocks = c.fetchall() latestBlocks = c.fetchall()
c.close() c.close()
tempdict = {} tempdict = {}
@ -938,6 +938,7 @@ async def getblocktransactions(blockdetail):
for i in range(len(blocktxlist)): for i in range(len(blocktxlist)):
temptx = transactiondetailhelper(blocktxlist[i]) temptx = transactiondetailhelper(blocktxlist[i])
transactionJson = json.loads(temptx[0][0]) transactionJson = json.loads(temptx[0][0])
transactionJson = update_transaction_confirmations(transactionJson)
parseResult = json.loads(temptx[0][1]) parseResult = json.loads(temptx[0][1])
blocktxs[blocktxlist[i]] = { blocktxs[blocktxlist[i]] = {
"parsedFloData" : parseResult, "parsedFloData" : parseResult,
@ -1161,8 +1162,7 @@ if not os.path.isfile(f"system.db"):
# create an empty db # create an empty db
conn = sqlite3.connect('system.db') conn = sqlite3.connect('system.db')
c = conn.cursor() c = conn.cursor()
c.execute('''CREATE TABLE ratepairs c.execute('''CREATE TABLE ratepairs (id integer primary key, ratepair text, price real)''')
(id integer primary key, ratepair text, price real)''')
c.execute("INSERT INTO ratepairs(ratepair, price) VALUES ('BTCBTC', 1)") c.execute("INSERT INTO ratepairs(ratepair, price) VALUES ('BTCBTC', 1)")
c.execute("INSERT INTO ratepairs(ratepair, price) VALUES ('BTCUSD', -1)") c.execute("INSERT INTO ratepairs(ratepair, price) VALUES ('BTCUSD', -1)")
c.execute("INSERT INTO ratepairs(ratepair, price) VALUES ('BTCINR', -1)") c.execute("INSERT INTO ratepairs(ratepair, price) VALUES ('BTCINR', -1)")
@ -1183,4 +1183,4 @@ scheduler.start()
atexit.register(lambda: scheduler.shutdown()) atexit.register(lambda: scheduler.shutdown())
if __name__ == "__main__": if __name__ == "__main__":
app.run(debug=False, host='0.0.0.0', port=5012) app.run(debug=False, host='0.0.0.0', port=5010)