Update FLO_webWallet_testnet.html

This commit is contained in:
Sai Raj 2019-02-03 20:10:41 +05:30 committed by GitHub
parent cb423e5a7d
commit cc690d61b4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -2,6 +2,11 @@
<html> <html>
<head> <head>
<title>FLO walletless</title> <title>FLO walletless</title>
<style>
table, th, td {
border: 1px solid black;
}
</style>
</head> </head>
<body> <body>
<script> <script>
@ -9,6 +14,8 @@
const testnet = `https://testnet.flocha.in`; const testnet = `https://testnet.flocha.in`;
let server = testnet; let server = testnet;
window["loadwait"] = false;
window["refreshwait"] = false;
const fee = 0.0005; const fee = 0.0005;
</script> </script>
@ -45,7 +52,7 @@
Enter Address : <input type="text" id="getAddr"><br/> Enter Address : <input type="text" id="getAddr"><br/>
<button id="getData" onclick="monitorData()">Monitor Data</button><br/> <button id="getData" onclick="monitorData()">Monitor Data</button><br/>
<button id="clearLocalData" onclick="clearLocalData()">Clear Local Data</button> <button id="clearLocalData" onclick="clearLocalData()">Clear Local Data</button>
<div id="dispMsg"><h3>Received FLO Data : </h3><br/><table id="dispfloData" border="1"><tr><td>Sender</td><td>Receiver</td><td>Time</td><td>FLO data</td></tr><table></div> <div id="dispMsg"><h3>Received FLO Data : </h3><br/></div>
</div> </div>
@ -4908,7 +4915,7 @@ Bitcoin.Util = {
let addrList = addrs.split(','); let addrList = addrs.split(',');
addrList = Array.from(new Set(addrList)); addrList = Array.from(new Set(addrList));
var result = ""; var result = "";
var totBal = 0; var totBal = 0.0;
var flag = 0; var flag = 0;
addrList.forEach(function(addr){ addrList.forEach(function(addr){
if (!validateAddr(addr)){ if (!validateAddr(addr)){
@ -4917,8 +4924,8 @@ Bitcoin.Util = {
} }
var response = ajax("GET",`api/addr/${addr}/balance`); var response = ajax("GET",`api/addr/${addr}/balance`);
if(response){ if(response){
result += `<input type="radio" name="sender" value=${addr} checked> ${addr} ${response} <br/>\n`; result += `<tr><td><input type="radio" name="sender" value=${addr} checked></td><td>${addr}</td><td>${response}</td></tr> \n`;
totBal+=response; totBal+=parseFloat(response);
flag = 1; flag = 1;
}else{ }else{
console.log("error : connection failed!"); console.log("error : connection failed!");
@ -4930,8 +4937,7 @@ Bitcoin.Util = {
document.getElementById("sendBtn").disabled = true; document.getElementById("sendBtn").disabled = true;
return ; return ;
} }
result+=`\nTotal Balance : ${totBal}`; dispBal.innerHTML = `<table>${result}<tr><td colspan="2">Total Balance :</td><td>${totBal}</tr></table>`;
dispBal.innerHTML = result;
document.getElementById("sendBtn").disabled = false; document.getElementById("sendBtn").disabled = false;
} }
@ -4965,7 +4971,7 @@ Bitcoin.Util = {
var txid = utxos[x].txid; var txid = utxos[x].txid;
var index = utxos[x].vout; var index = utxos[x].vout;
var scriptPubKey = utxos[x].scriptPubKey; var scriptPubKey = utxos[x].scriptPubKey;
var bal = utxos[x].amount var bal = utxos[x].amount;
console.log(""+utxoAmt+"::"+txid + " : " + index +" : "+scriptPubKey +":"+bal); console.log(""+utxoAmt+"::"+txid + " : " + index +" : "+scriptPubKey +":"+bal);
trx.addinput(txid, index, scriptPubKey) trx.addinput(txid, index, scriptPubKey)
utxoAmt += bal; utxoAmt += bal;
@ -5035,121 +5041,162 @@ Bitcoin.Util = {
</script> </script>
<script> <script>
var waitForGlobal = function(param, callback) {
if (!window[param]) {
callback();
} else {
setTimeout(function() {
waitForGlobal(param, callback);
}, 100);
}
};
function monitorData(){ function monitorData(){
var addrList = document.getElementById("getAddr").value; var addrList = document.getElementById("getAddr").value;
addrList = addrList.split(','); addrList = addrList.split(',');
addrList = Array.from(new Set(addrList)); addrList = Array.from(new Set(addrList));
//clear the table var dispMsg = document.getElementById("dispMsg") ;
var table = document.getElementById("dispfloData"); window["refreshwait"] = addrList.length;
for(var i = table.rows.length - 1; i > 0; i--)
table.deleteRow(i);
addrList.forEach(function(addr){ addrList.forEach(function(addr){
if (!validateAddr(addr)){ if (!validateAddr(addr)){
alert(`Invalid address : ${addr}`); alert(`Invalid address : ${addr}`);
window["refreshwait"] -= 1;
return; return;
} }
var idbtmp = indexedDB.open("FLO_Walletless"); waitForGlobal("loadwait", function() {
idbtmp.onerror = function(event) { //console.log("found it");
console.log("Error in opening IndexedDB1!"); console.log(window['loadwait']);
}; window["loadwait"] = true;
idbtmp.onupgradeneeded = function(event) { var idbtmp = indexedDB.open("FLO_Walletless");
console.log("up"); idbtmp.onerror = function(event) {
}; console.log("Error in opening IndexedDB1!");
idbtmp.onsuccess = function(event) { window["loadwait"] = false;
var db = event.target.result; };
var version = db.version; idbtmp.onupgradeneeded = function(event) {
console.log("."+db.version); console.log("up");
if(!db.objectStoreNames.contains(addr)) };
version = db.version + 1; idbtmp.onsuccess = function(event) {
db.close(); var db = event.target.result;
console.log(":"+version); var version = db.version;
var idb = indexedDB.open("FLO_Walletless",version); console.log("."+db.version);
idb.onerror = function(event) { if(!db.objectStoreNames.contains(addr))
console.log("Error in opening IndexedDB!"); version = db.version + 1;
}; db.close();
idb.onupgradeneeded = function(event) { console.log(":"+version);
var objectStore = event.target.result.createObjectStore(addr, { keyPath: "tx", autoIncrement:true }); var idb = indexedDB.open("FLO_Walletless",version);
objectStore.createIndex("time", "time", { unique: false }); idb.onerror = function(event) {
objectStore.createIndex("sender", "sender", { unique: false }); console.log("Error in opening IndexedDB!");
objectStore.createIndex("receiver", "receiver", { unique: false }); };
objectStore.createIndex("floData", "floData", { unique: false }); idb.onupgradeneeded = function(event) {
objectStore.createIndex("txid", "txid", { unique: true }); var objectStore = event.target.result.createObjectStore(addr, { keyPath: "tx", autoIncrement:true });
}; objectStore.createIndex("time", "time", { unique: false });
idb.onsuccess = function(event) { objectStore.createIndex("sender", "sender", { unique: false });
objectStore.createIndex("receiver", "receiver", { unique: false });
objectStore.createIndex("floData", "floData", { unique: false });
objectStore.createIndex("txid", "txid", { unique: true });
};
idb.onsuccess = function(event) {
//window["loadwait"] = false;
var db = event.target.result; var dispMsgAddr = document.createElement('div');
var obs = db.transaction(addr, "readwrite").objectStore(addr); dispMsgAddr.id = addr;
var countRequest = obs.count(); dispMsgAddr.innerHTML = `<hr>${addr}<br><button onclick="refreshdata(this.parentNode)">refresh</button><button onclick="removedata(this.parentNode)">remove</button><br>`;
countRequest.onsuccess = function() { var table = document.createElement('table');
console.log(countRequest.result); dispMsgAddr.appendChild(table);
var response = ajax("GET",`api/addrs/${addr}/txs`); dispMsg.appendChild(dispMsgAddr);
var nRequired = JSON.parse(response).totalItems - countRequest.result; var row = table.insertRow(0) ;
console.log(nRequired); row.insertCell(0).innerHTML = 'Sender';
row.insertCell(1).innerHTML = 'Receiver';
row.insertCell(2).innerHTML = 'Time';
row.insertCell(3).innerHTML = 'floData';
while(true && nRequired){ var db = event.target.result;
var response = ajax("GET",`api/addrs/${addr}/txs?from=0&to=${nRequired}`); var obs = db.transaction(addr, "readwrite").objectStore(addr);
response = JSON.parse(response);
if (nRequired + countRequest.result != response.totalItems ){
nRequired = response.totalItems - countRequest.result;
continue;
}
console.log("Yes");
var i=1;
response.items.reverse().forEach(function(tx){
console.log(""+tx.time +":" +i); i++;
obs.put({time : tx.time, txid : tx.txid, sender : tx.vin[0].addr, receiver:tx.vout[0].scriptPubKey.addresses[0],floData : tx.floData});
});
break;
}
var flag = false; var cursorRequest = obs.openCursor();
var table=document.getElementById("dispfloData"); cursorRequest.onsuccess = function(event) {
var cursorRequest = obs.openCursor(); var cursor = event.target.result;
cursorRequest.onsuccess = function(event) { //console.log("g");
var cursor = event.target.result; if(cursor) {
//console.log("g"); // cursor.value contains the current record being iterated through
if(cursor) { // this is where you'd do something with the result
// cursor.value contains the current record being iterated through console.log(cursor.value.sender+":"+cursor.value.receiver+":"+cursor.value.time+":"+cursor.value.txid+":"+cursor.value.floData);
// this is where you'd do something with the result var time = new Date(cursor.value.time*1000);
console.log(cursor.value.sender+":"+cursor.value.receiver+":"+cursor.value.time+":"+cursor.value.txid+":"+cursor.value.floData); var row = table.insertRow(1) ;
var time = new Date(cursor.value.time*1000); row.insertCell(0).innerHTML = cursor.value.sender;
var row = table.insertRow(1) ; row.insertCell(1).innerHTML = cursor.value.receiver;
row.insertCell(0).innerHTML = cursor.value.sender; row.insertCell(2).innerHTML = time;
row.insertCell(1).innerHTML = cursor.value.receiver; row.insertCell(3).innerHTML = cursor.value.floData;
row.insertCell(2).innerHTML = time; //tmpResult = '<tr><td>'++'</td><td>'++'</td><td>'++'</td><td>'++'</td></tr>' + tmpResult;
row.insertCell(3).innerHTML = cursor.value.floData; cursor.continue();
flag = true; } else {
//tmpResult = '<tr><td>'++'</td><td>'++'</td><td>'++'</td><td>'++'</td></tr>' + tmpResult; refreshdata(dispMsgAddr);
cursor.continue(); }
} else { };
db.close();
window["refreshwait"] -= 1;
};
window["loadwait"] = false;
};
if(!flag){ });
var row1 = table.insertRow(1) ; });
var cell1 = row1.insertCell(0);
cell1.innerHTML= "Sorry! No Flo Data received!";
cell1.colSpan = 4
}
var row2 = table.insertRow(1) ;
var cell2 = row2.insertCell(0);
cell2.innerHTML= '<b><center>'+addr+'</center></b>';
cell2.colSpan = 4
}
};
};
db.close();
};
}
});
} }
</script> </script>
<script>
function refreshdata(param){
var addr = param.id;
var table = param.getElementsByTagName('table')[0];
var row = table.insertRow(1) ;
var cell = row.insertCell(0);
cell.innerHTML = "<center>Refreshing...</center>";
cell.colSpan = 4;
waitForGlobal("refreshwait", function() {
var idb = indexedDB.open("FLO_Walletless");
idb.onerror = function(event) {
console.log("Error in opening IndexedDB!");
};
idb.onsuccess = function(event) {
var db = event.target.result;
var obs = db.transaction(addr, "readwrite").objectStore(addr);
var countRequest = obs.count();
countRequest.onsuccess = function() {
console.log(countRequest.result);
var response = ajax("GET",`api/addrs/${addr}/txs`);
var nRequired = JSON.parse(response).totalItems - countRequest.result;
console.log(nRequired);
while(true && nRequired){
var response = ajax("GET",`api/addrs/${addr}/txs?from=0&to=${nRequired}`);
response = JSON.parse(response);
if (nRequired + countRequest.result != response.totalItems ){
nRequired = response.totalItems - countRequest.result;
continue;
}
console.log("Yes");
response.items.reverse().forEach(function(tx){
obs.put({time : tx.time, txid : tx.txid, sender : tx.vin[0].addr, receiver:tx.vout[0].scriptPubKey.addresses[0],floData : tx.floData});
var time = new Date(tx.time*1000);
var row = table.insertRow(2) ;
row.insertCell(0).innerHTML = tx.vin[0].addr;
row.insertCell(1).innerHTML = tx.vout[0].scriptPubKey.addresses[0];
row.insertCell(2).innerHTML = time;
row.insertCell(3).innerHTML = tx.floData;
});
break;
}
table.deleteRow(1);
};
db.close();
};
});
}
</script>
</body> </body>
</html> </html>