diff --git a/.gitignore b/.gitignore index 10b22a3..3a5adae 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ __pycache__/ *.pyc app/__pycache__/ +tokenexplorervenv/ diff --git a/app/routes.py b/app/routes.py index 20675dc..a67e0ee 100644 --- a/app/routes.py +++ b/app/routes.py @@ -1,20 +1,26 @@ -from flask import render_template -from flask import render_template, flash, redirect, url_for, request +from flask import render_template, flash, redirect, url_for, request, jsonify from app import app from app.forms import SearchForm, BlankForm import sqlite3 +import json -dblocation = '/home/vivek/Documents/Ranchimall/flo-token-tracking/tree.db' +dbfolder = '/home/vivek/Dev/flo-token-tracking/tokens/' -@app.route('/', methods=['GET', 'POST']) -def index(): +@app.route('/') +def redirectRMT(): + return redirect('/rmt') + +@app.route('/', methods=['GET', 'POST']) +def index(token): + if token is None: + token = 'rmt' form = SearchForm() - blankform = BlankForm() + dblocation = dbfolder + token + '.db' conn = sqlite3.connect(dblocation) c = conn.cursor() - c.execute('SELECT * FROM transactionHistory ORDER BY id DESC LIMIT 5') + c.execute('SELECT id, blockNumber, sourceFloAddress, destFloAddress, transferAmount, blockchainReference FROM transactionHistory ORDER BY id DESC LIMIT 5') transactionHistoryTable = c.fetchall() - c.execute('SELECT address,SUM(transferBalance) FROM transactiontable GROUP BY address') + c.execute('SELECT address,SUM(transferBalance) FROM activeTable GROUP BY address') balanceTable = c.fetchall() conn.close() @@ -22,47 +28,111 @@ def index(): flash('Balance requested for address {}'.format(form.address.data)) conn = sqlite3.connect(dblocation) c = conn.cursor() - c.execute("select SUM(transferBalance) from transactiontable WHERE address=='{}'".format(str(form.address.data))) + c.execute("select SUM(transferBalance) from activeTable WHERE address=='{}'".format(str(form.address.data))) balance = c.fetchall()[0][0] - c.execute('SELECT * FROM transactionHistory ORDER BY id DESC LIMIT 5') + c.execute('SELECT id, blockNumber, sourceFloAddress, destFloAddress, transferAmount, blockchainReference FROM transactionHistory ORDER BY id DESC LIMIT 5') transactionHistoryTable = c.fetchall() - c.execute('SELECT address,SUM(transferBalance) FROM transactiontable GROUP BY address') + c.execute('SELECT address,SUM(transferBalance) FROM activeTable GROUP BY address') balanceTable = c.fetchall() conn.close() - return render_template('index.html', form=form, blankform=blankform, balance=balance, transactionHistoryTable=transactionHistoryTable, balanceTable=balanceTable) + return render_template('index.html', form=form, balance=balance, transactionHistoryTable=transactionHistoryTable, balanceTable=balanceTable, token=token) - if blankform.validate_on_submit(): - return "str" - flash('Balance requested for address {}'.format(form.address.data)) - conn = sqlite3.connect(dblocation) - c = conn.cursor() - c.execute("select SUM(transferBalance) from transactiontable WHERE address=='{}'".format(str(form.address.data))) - balance = c.fetchall()[0][0] - c.execute('SELECT * FROM transactionHistory ORDER BY id DESC LIMIT 5') - transactionHistoryTable = c.fetchall() - c.execute('SELECT address,SUM(transferBalance) FROM transactiontable GROUP BY address') - balanceTable = c.fetchall() - conn.close() - return render_template('index.html', form=form, blankform=blankform, balance=balance, transactionHistoryTable=transactionHistoryTable, balanceTable=balanceTable) + return render_template('index.html', form=form, transactionHistoryTable=transactionHistoryTable, balanceTable=balanceTable, token=token) - return render_template('index.html', form=form, blankform=blankform, transactionHistoryTable=transactionHistoryTable, balanceTable=balanceTable) +@app.route('//transactions', methods=['GET', 'POST']) +def transactions(token): + sourceFloAddress = request.args.get('sourceFloAddress') + destFloAddress = request.args.get('destFloAddress') + if token is None: + token = 'rmt' -@app.route('/transactions', methods=['GET', 'POST']) -def transactions(): - address = request.args.get('address') + dblocation = dbfolder + token + '.db' if address is not None: conn = sqlite3.connect(dblocation) c = conn.cursor() - c.execute('SELECT * FROM transactionHistory WHERE fromAddress="{}" OR toAddress="{}" ORDER BY id DESC'.format(address,address)) + if sourceFloAddress and not destFloAddress: + c.execute('SELECT * FROM transactionHistory WHERE sourceFloAddress="{}" ORDER BY id DESC'.format(sourceFloAddress)) + if not sourceFloAddress and destFloAddress: + c.execute('SELECT * FROM transactionHistory WHERE destFloAddress="{}" ORDER BY id DESC'.format(destFloAddress)) + if sourceFloAddress and destFloAddress: + c.execute('SELECT * FROM transactionHistory WHERE sourceFloAddress="{}" AND destFloAddress="{}" ORDER BY id DESC'.format(address,address)) + transactionHistoryTable = c.fetchall() conn.close() - return render_template('transactions.html', transactionHistoryTable=transactionHistoryTable) + return render_template('transactions.html', transactionHistoryTable=transactionHistoryTable, token=token) conn = sqlite3.connect(dblocation) c = conn.cursor() - c.execute('SELECT * FROM transactionHistory ORDER BY id DESC') + c.execute('SELECT id, blockNumber, sourceFloAddress, destFloAddress, transferAmount, blockchainReference FROM transactionHistory ORDER BY id DESC') transactionHistoryTable = c.fetchall() conn.close() - return render_template('transactions.html', transactionHistoryTable=transactionHistoryTable) + return render_template('transactions.html', token=token, transactionHistoryTable=transactionHistoryTable) + + +@app.route('/api/v1.0/getaddressbalance', methods=['GET']) +def getaddressbalance(): + address = request.args.get('address') + token = request.args.get('token') + + if address is None or token is None: + return jsonify(result='error') + + dblocation = dbfolder + token + '.db' + conn = sqlite3.connect(dblocation) + c = conn.cursor() + c.execute('SELECT SUM(transferBalance) FROM activeTable WHERE address="{}"'.format(address)) + balance = c.fetchall()[0][0] + conn.close() + return jsonify(result='ok', token=token, address=address, balance=balance) + +@app.route('/api/v1.0/gettokeninfo', methods=['GET']) +def gettokeninfo(): + token = request.args.get('token') + + if token is None: + return jsonify(result='error') + + dblocation = dbfolder + token + '.db' + conn = sqlite3.connect(dblocation) + c = conn.cursor() + c.execute('SELECT * FROM transactionHistory WHERE id=1') + incorporationRow = c.fetchall()[0] + c.execute('SELECT COUNT (DISTINCT address) FROM activeTable') + numberOf_distinctAddresses = c.fetchall()[0][0] + conn.close() + return jsonify(result='ok', token=token, incorporationAddress=incorporationRow[2], tokenSupply=incorporationRow[3], transactionHash=incorporationRow[6], blockchainReference=incorporationRow[7], activeAddress_no=numberOf_distinctAddresses) + + +@app.route('/api/v1.0/gettransactions', methods=['GET']) +def gettransactions(): + token = request.args.get('token') + senderFloAddress = request.args.get('senderFloAddress') + destFloAddress = request.args.get('destFloAddress') + + if token is None: + return jsonify(result='error') + + dblocation = dbfolder + token + '.db' + conn = sqlite3.connect(dblocation) + conn.row_factory = sqlite3.Row + c = conn.cursor() + + if senderFloAddress and not destFloAddress: + c.execute('SELECT blockNumber, sourceFloAddress, destFloAddress, transferAmount, blockchainReference FROM transactionHistory WHERE sourceFloAddress="{}" ORDER BY id DESC LIMIT 100'.format(senderFloAddress)) + if not senderFloAddress and destFloAddress: + c.execute('SELECT blockNumber, sourceFloAddress, destFloAddress, transferAmount, blockchainReference FROM transactionHistory WHERE destFloAddress="{}" ORDER BY id DESC LIMIT 100'.format(destFloAddress)) + if senderFloAddress and destFloAddress: + c.execute('SELECT blockNumber, sourceFloAddress, destFloAddress, transferAmount, blockchainReference FROM transactionHistory WHERE sourceFloAddress="{}" AND destFloAddress="{}" ORDER BY id DESC LIMIT 100'.format(senderFloAddress, destFloAddress)) + + else: + c.execute('SELECT blockNumber, sourceFloAddress, destFloAddress, transferAmount, blockchainReference FROM transactionHistory ORDER BY id DESC LIMIT 100') + latestTransactions = c.fetchall() + conn.close() + rowarray_list = [] + for row in latestTransactions: + d = dict(zip(row.keys(), row)) # a dict with column names as keys + rowarray_list.append(d) + return jsonify(result='ok', transactions=rowarray_list) + @app.route('/test') def test(): diff --git a/app/templates/base.html b/app/templates/base.html index d37cfed..53dba2d 100644 --- a/app/templates/base.html +++ b/app/templates/base.html @@ -26,49 +26,7 @@ - + {% block content %}{% endblock %}