diff --git a/index.html b/index.html
index 2ba0dad..7de6c92 100644
--- a/index.html
+++ b/index.html
@@ -22,8 +22,8 @@
//Required for blockchain API operators
apiURL: {
- FLO: 'https://livenet.flocha.in',
- FLO_TEST: 'https://testnet-flosight.duckdns.org'
+ FLO: ['https://explorer.mediciland.com/', 'https://livenet.flocha.in/', 'https://flosight.duckdns.org/', 'http://livenet-explorer.floexperiments.com', 'http://ec2-13-233-133-128.ap-south-1.compute.amazonaws.com/', 'http://ec2-13-233-131-136.ap-south-1.compute.amazonaws.com/', 'http://ec2-13-233-194-1.ap-south-1.compute.amazonaws.com/'],
+ FLO_TEST: ['https://testnet-flosight.duckdns.org', 'https://testnet.flocha.in/']
},
adminID: "FEzk75EGMPEQMrCuPosGiwuK162hcEu49E",
refreshDelay: 3600000,
@@ -5615,42 +5615,66 @@
/* FLO Blockchain Operator to send/receive data from blockchain using API calls*/
const floBlockchainAPI = {
- //Promised AJAX function to get data from API
- promisedAJAX: function (method, uri) {
+ util: {
+ serverList: floGlobals.apiURL[floGlobals.blockchain].slice(0),
+ curPos: floCrypto.randInt(0, floGlobals.apiURL[floGlobals.blockchain].length),
+ fetch_retry: function(apicall){
+ return new Promise((resolve,reject) => {
+ this.serverList.splice(this.curPos, 1);
+ this.curPos = floCrypto.randInt(0, this.serverList.length)
+ this.fetch_api(apicall)
+ .then(result => resolve(result))
+ .catch(error => reject(error));
+ })
+ },
+ fetch_api: function(apicall){
+ return new Promise((resolve, reject) => {
+ if(this.serverList.length === 0)
+ reject("No floSight server working")
+ else{
+ fetch(this.serverList[this.curPos] + apicall).then(response => {
+ if(response.ok)
+ response.json().then(data => resolve(data));
+ else{
+ this.fetch_retry(apicall)
+ .then(result => resolve(result))
+ .catch(error => reject(error));
+ }
+ }).catch(error => {
+ this.fetch_retry(apicall)
+ .then(result => resolve(result))
+ .catch(error => reject(error));
+ })
+ }
+ })
+ }
+ },
+
+ //Promised function to get data from API
+ promisedAPI: function (apicall) {
return new Promise((resolve, reject) => {
- var request = new XMLHttpRequest();
- var url = `${floGlobals.apiURL[floGlobals.blockchain]}/${uri}`;
- console.log(url)
- request.open(method, url, true);
- request.onload = (evt) => {
- if (request.readyState == 4 && request.status == 200)
- resolve(request.response);
- else
- reject(request.response);
- };
- request.send();
+ console.log(apicall)
+ this.util.fetch_api(apicall)
+ .then(result => resolve(result))
+ .catch(error => reject(error));
});
},
//Get balance for the given Address
getBalance: function (addr) {
return new Promise((resolve, reject) => {
- this.promisedAJAX("GET", `api/addr/${addr}/balance`).then(balance => {
- resolve(parseFloat(balance));
- }).catch(error => {
- reject(error);
- });
+ this.promisedAPI(`api/addr/${addr}/balance`)
+ .then(balance => resolve(parseFloat(balance)))
+ .catch(error => reject(error));
});
},
//Write Data into blockchain
writeData: function (senderAddr, Data, PrivKey, receiverAddr = floGlobals.adminID) {
return new Promise((resolve, reject) => {
- this.sendTx(senderAddr, receiverAddr, floGlobals.sendAmt, PrivKey, Data).then(txid => {
- resolve(txid);
- }).catch(error => {
- reject(error);
- });
+ this.sendTx(senderAddr, receiverAddr, floGlobals.sendAmt, PrivKey, Data)
+ .then(txid => resolve(txid))
+ .catch(error => reject(error))
});
},
@@ -5669,8 +5693,7 @@
var trx = bitjs.transaction();
var utxoAmt = 0.0;
var fee = floGlobals.fee;
- this.promisedAJAX("GET", `api/addr/${senderAddr}/utxo`).then(response => {
- var utxos = JSON.parse(response);
+ this.promisedAPI(`api/addr/${senderAddr}/utxo`).then(utxos => {
for (var i = utxos.length - 1;
(i >= 0) && (utxoAmt < sendAmt + fee); i--) {
if (utxos[i].confirmations) {
@@ -5687,15 +5710,11 @@
trx.addoutput(senderAddr, change);
trx.addflodata(floData);
var signedTxHash = trx.sign(PrivKey, 1);
- this.broadcastTx(signedTxHash).then(txid => {
- resolve(txid)
- }).catch(error => {
- reject(error);
- });
+ this.broadcastTx(signedTxHash)
+ .then(txid => resolve(txid))
+ .catch(error => reject(error))
}
- }).catch(error => {
- reject(error);
- });
+ }).catch(error => reject(error))
}
});
},
@@ -5704,7 +5723,7 @@
broadcastTx: function (signedTxHash) {
return new Promise((resolve, reject) => {
var request = new XMLHttpRequest();
- var url = `${floGlobals.apiURL[floGlobals.blockchain]}/api/tx/send`;
+ var url = this.util.serverList[this.util.curPos] + 'api/tx/send';
if (signedTxHash.length < 1)
reject("Empty Signature");
else {
@@ -5727,27 +5746,20 @@
//Read Txs of Address between from and to
readTxs: function (addr, from, to) {
return new Promise((resolve, reject) => {
- this.promisedAJAX("GET", `api/addrs/${addr}/txs?from=${from}&to=${to}`).then(response => {
- resolve(JSON.parse(response));
- }).catch(error => {
- reject(error);
- });
+ this.promisedAPI(`api/addrs/${addr}/txs?from=${from}&to=${to}`)
+ .then(response => resolve(response))
+ .catch(error => reject(error))
});
},
//Read All Txs of Address (newest first)
readAllTxs: function (addr) {
return new Promise((resolve, reject) => {
- this.promisedAJAX("GET", `api/addrs/${addr}/txs?from=0&to=1`).then(response => {
- var totalItems = JSON.parse(response).totalItems;
- this.promisedAJAX("GET", `api/addrs/${addr}/txs?from=0&to=${totalItems}0`).then(response => {
- resolve(JSON.parse(response).items);
- }).catch(error => {
- reject(error);
- });
- }).catch(error => {
- reject(error);
- });
+ this.promisedAPI(`api/addrs/${addr}/txs?from=0&to=1`).then(response => {
+ this.promisedAPI(`api/addrs/${addr}/txs?from=0&to=${response.totalItems}0`)
+ .then(response => resolve(response.items))
+ .catch(error => reject(error));
+ }).catch(error => reject(error))
});
},
@@ -5761,13 +5773,12 @@
filter : custom filter funtion for floData (eg . filter: d => {return d[0] == '$'})
*/
readData: function(addr,options = {}){
- options.limit = options.limit || 1000
- options.ignoreOld = options.ignoreOld || 0
+ options.limit = options.limit | 1000
+ options.ignoreOld = options.ignoreOld | 0
return new Promise((resolve, reject) => {
- this.promisedAJAX("GET", `api/addrs/${addr}/txs?from=0&to=1`).then(response => {
- var newItems = JSON.parse(response).totalItems - options.ignoreOld;
- this.promisedAJAX("GET", `api/addrs/${addr}/txs?from=0&to=${newItems*2}`).then(response => {
- response = JSON.parse(response)
+ this.promisedAPI(`api/addrs/${addr}/txs?from=0&to=1`).then(response => {
+ var newItems = response.totalItems - options.ignoreOld;
+ this.promisedAPI(`api/addrs/${addr}/txs?from=0&to=${newItems*2}`).then(response => {
if (options.limit <= 0)
options.limit = response.items.length;
var filteredData = [];