diff --git a/FLO_appStore b/FLO_appStore index bcce47d..168f693 100755 Binary files a/FLO_appStore and b/FLO_appStore differ diff --git a/getJson.py b/getJson.py index aefdd8f..8a4fe16 100644 --- a/getJson.py +++ b/getJson.py @@ -1,8 +1,9 @@ import requests import json import subprocess +import hashlib -JsonAddress = "ocZXNtzpiUqBvzQorjAKmZ5MhXxGTLKeSH" +JsonAddress = 'oXa7t72t3CgnR11ycxVfdupz55eucHufHj' def searchDict(dicArr,key,val): for i in range(len(dicArr)): @@ -10,6 +11,10 @@ def searchDict(dicArr,key,val): return i return -1 +def findHash(data): + result = hashlib.sha1(data.encode()) + return str(result.hexdigest()) + def readUnitFromBlockchain(txid): rawtx = subprocess.check_output(["flo-cli","--testnet", "getrawtransaction", str(txid)]) rawtx = str(rawtx) @@ -17,28 +22,68 @@ def readUnitFromBlockchain(txid): tx = subprocess.check_output(["flo-cli","--testnet", "decoderawtransaction", str(rawtx)]) content = json.loads(tx) text = content['floData'] - return text + return str(text) -def getJsonData(): +def Dappend(Dapps,app): + i = searchDict(Dapps,'id',app['id']) + if (i!=-1): + del(Dapps[i]) + if ('remove' not in app.keys()): + Dapps = Dapps + [app] + return Dapps + +def verifyHash(localHash,txid): + content = readUnitFromBlockchain(txid) + try: + if(json.loads(content)['hash'] == localHash): + print("true") + return True + else: + return False + except: + return False + + +def getJsonData(Dapps, lastTx): r = requests.get("https://testnet.florincoin.info/ext/getaddress/"+JsonAddress) data = json.loads(r.content) #print(data) - Dapps = [] - for i in range(len(data['last_txs'])): + localHash = findHash(str(Dapps)) + if(lastTx == -1 or not verifyHash(localHash,data['last_txs'][lastTx]['addresses'])): + lastTx = 0 + print(lastTx) + for i in range(lastTx,len(data['last_txs'])): + print(i) if(data['last_txs'][i]['type']=='vin'): content = readUnitFromBlockchain(data['last_txs'][i]['addresses']) #print(content) - if content.startswith("text:Dapps"): - #print(data['last_txs'][i]['addresses']) - pos = content.find('{') - app = json.loads(content[pos:]) - i = searchDict(Dapps,'id',app['id']) - if (i!=-1): - del(Dapps[i]) - if ('remove' not in app.keys()): - Dapps = Dapps + [app] + try: + app = json.loads(content) + except Exception as e: + #print(e) + continue + #print(app) + if 'Dapp' in app.keys(): + Dapps = Dappend(Dapps,app['Dapp']) #print(Dapps) - return Dapps + return (Dapps,len(data['last_txs'])-1) + +try: + with open('Apps.json','r') as F: + data=json.loads(F.read()) + apps = data['Dapps'] + lastTx = data['lastTx'] +except: + apps = [] + lastTx = -1 + +print(apps) +print(lastTx) +(apps,lastTx) = getJsonData(apps,lastTx) + +with open('Apps.json','w+') as F: + data = json.dumps({'Dapps':apps ,'lastTx':lastTx}) + print(data) + F.write(data) + -apps = getJsonData() -print(apps) \ No newline at end of file diff --git a/main.py b/main.py index ea53566..fd13065 100755 --- a/main.py +++ b/main.py @@ -8,8 +8,9 @@ import json import math import socket import requests +import hashlib -JsonAddress = "ocZXNtzpiUqBvzQorjAKmZ5MhXxGTLKeSH" +JsonAddress = "oXa7t72t3CgnR11ycxVfdupz55eucHufHj" def searchDict(dicArr,key,val): for i in range(len(dicArr)): @@ -17,6 +18,10 @@ def searchDict(dicArr,key,val): return i return -1 +def findHash(data): + result = hashlib.sha1(data.encode()) + return str(result.hexdigest()) + def isConnected(): try: socket.create_connection(("www.github.com", 80)) @@ -32,28 +37,53 @@ def readUnitFromBlockchain(txid): tx = subprocess.check_output(["flo-cli","--testnet", "decoderawtransaction", str(rawtx)]) content = json.loads(tx) text = content['floData'] - return text + return str(text) -def getJsonData(): +def Dappend(Dapps,app): + i = searchDict(Dapps,'id',app['id']) + if (i!=-1): + del(Dapps[i]) + if ('remove' not in app.keys()): + Dapps = Dapps + [app] + return Dapps + +def verifyHash(localHash,txid): + content = readUnitFromBlockchain(txid) + try: + if(json.loads(content)['hash'] == localHash): + return True + else: + return False + except: + return False + + +def getJsonData(Dapps, lastTx): r = requests.get("https://testnet.florincoin.info/ext/getaddress/"+JsonAddress) data = json.loads(r.content) #print(data) - Dapps = [] - for i in range(len(data['last_txs'])): + localHash = findHash(str(Dapps)) + try: + if(lastTx == -1 or not verifyHash(localHash,data['last_txs'][lastTx]['addresses'])): + lastTx = 0 + except: + lastTx = 0 + #print(lastTx) + for i in range(lastTx,len(data['last_txs'])): + print(i) if(data['last_txs'][i]['type']=='vin'): content = readUnitFromBlockchain(data['last_txs'][i]['addresses']) #print(content) - if content.startswith("text:Dapps"): - #print(data['last_txs'][i]['addresses']) - pos = content.find('{') - app = json.loads(content[pos:]) - i = searchDict(Dapps,'id',app['id']) - if (i!=-1): - del(Dapps[i]) - if ('remove' not in app.keys()): - Dapps = Dapps + [app] + try: + app = json.loads(content) + except Exception as e: + #print(e) + continue + #print(app) + if 'Dapp' in app.keys(): + Dapps = Dappend(Dapps,app['Dapp']) #print(Dapps) - return Dapps + return (Dapps,len(data['last_txs'])-1) class FLOappStore: def __init__(self, root): @@ -202,7 +232,23 @@ else: with open('AppData.json',encoding='utf-8') as F: apps=json.loads(F.read())["Dapps"] ''' -apps = getJsonData() + +try: + with open('Apps.json','r') as F: + data=json.loads(F.read()) + apps = data['Dapps'] + lastTx = data['lastTx'] +except: + apps = [] + lastTx = -1 + +(apps,lastTx) = getJsonData(apps,lastTx) + +with open('Apps.json','w+') as F: + data = json.dumps({'Dapps':apps ,'lastTx':lastTx}) + print(data) + F.write(data) + root = Tk() root.title("FLOappStore") root.geometry("1100x500") diff --git a/send_floData.py b/send_floData.py new file mode 100644 index 0000000..0e889ef --- /dev/null +++ b/send_floData.py @@ -0,0 +1,89 @@ +import subprocess +import json +import random +import requests +import hashlib + +JsonAddress = 'oXa7t72t3CgnR11ycxVfdupz55eucHufHj' +toAddress = 'oXa7t72t3CgnR11ycxVfdupz55eucHufHj' +tempAcc = str(random.randint(100000,999999)) +amt = '0.01' + +def searchDict(dicArr,key,val): + for i in range(len(dicArr)): + if(dicArr[i][key]==val): + return i + return -1 + +def readUnitFromBlockchain(txid): + rawtx = subprocess.check_output(["flo-cli","--testnet", "getrawtransaction", str(txid)]) + rawtx = str(rawtx) + rawtx = rawtx[2:-3] + tx = subprocess.check_output(["flo-cli","--testnet", "decoderawtransaction", str(rawtx)]) + content = json.loads(tx) + text = content['floData'] + return str(text) + +def Dappend(Dapps,app): + i = searchDict(Dapps,'id',app['id']) + if (i!=-1): + del(Dapps[i]) + if ('remove' not in app.keys()): + Dapps = Dapps + [app] + return Dapps + +def getJsonData(): + r = requests.get("https://testnet.florincoin.info/ext/getaddress/"+JsonAddress) + data = json.loads(r.content) + #print(data) + Dapps = [] + for i in range(len(data['last_txs'])): + if(data['last_txs'][i]['type']=='vin'): + content = readUnitFromBlockchain(data['last_txs'][i]['addresses']) + try: + app = json.loads(content) + except : + continue + print(app) + if 'Dapp' in app.keys(): + Dapps = Dappend(Dapps,app['Dapp']) + #print(Dapps) + return Dapps + +def findHash(data): + result = hashlib.sha1(data.encode()) + return str(result.hexdigest()) + +apps = getJsonData() +print(apps) + +print("Enter floData :") +lines = [] +while True: + line = input() + if line: + lines.append(line) + else: + break +appData = ' '.join(lines) +try: + appData=json.loads(appData) +except: + print('Unable to parse JSON : '+appData) + exit(0) + +print(appData) +apps = Dappend(apps , appData) +print(apps) +apphash = findHash(str(apps)) + +floData = json.dumps({'Dapp':appData ,'hash':apphash}) +print('floData = '+floData) + +process = subprocess.Popen(['flo-cli','-testnet','getaccount',JsonAddress], stdout=subprocess.PIPE) +account = process.communicate()[0].decode().strip() +process = subprocess.Popen(['flo-cli','-testnet','setaccount',JsonAddress,tempAcc], stdout=subprocess.PIPE) +process = subprocess.Popen(['flo-cli','-testnet','sendfrom',tempAcc,toAddress,amt,'6','','',floData], stdout=subprocess.PIPE) +txid = process.communicate()[0].decode() +print('txid : '+txid) +process = subprocess.Popen(['flo-cli','-testnet','setaccount',JsonAddress,account], stdout=subprocess.PIPE)