Fixed transaction confirmation issue
This commit is contained in:
parent
285c8b363c
commit
5c91f769f2
1
.gitignore
vendored
1
.gitignore
vendored
@ -4,4 +4,5 @@ __pycache__/
|
|||||||
config.py
|
config.py
|
||||||
.idea/
|
.idea/
|
||||||
py3.7/
|
py3.7/
|
||||||
|
py3.7.0/
|
||||||
*.db
|
*.db
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user