From 11bd90224630fa60a83d636c178212e4ebcb7868 Mon Sep 17 00:00:00 2001 From: Abhishek Sinha Date: Thu, 26 Sep 2019 13:29:32 +0530 Subject: [PATCH 1/3] added min % difference logic between eqCrypto and user balance in tradeSell --- supernode/cash_payments_handler.html | 87 +++++---- supernode/index.html | 277 +++++++++++++++------------ 2 files changed, 205 insertions(+), 159 deletions(-) diff --git a/supernode/cash_payments_handler.html b/supernode/cash_payments_handler.html index 49190b3..7f566dd 100644 --- a/supernode/cash_payments_handler.html +++ b/supernode/cash_payments_handler.html @@ -12411,11 +12411,10 @@ localbitcoinplusplus.master_configurations.supernodeSeeds; if (typeof supernodeSeeds !== "object") reject("Failed to get supernode seeds."); - let supernodeSeedsObj = JSON.parse(supernodeSeeds); - nearestSupernodeAddresslist = Object.values(supernodeSeedsObj); + nearestSupernodeAddresslist = Object.values(supernodeSeeds); nearestSupernodeAddresslist.map((m, i) => { - m.id = i + 1; - updateinDB("supernodesList", m).catch(e => { + let sl = Object.assign({id: i+1}, m); + updateinDB("supernodesList", sl).catch(e => { throw new Error(e); }); }); @@ -12848,7 +12847,7 @@ } } - async function updateinDB( + function updateinDB( tablename, Obj, key, @@ -12857,43 +12856,51 @@ ) { // updateByVectorClock==true will not return Obj back. // Return value will be undefined - try { - if (typeof Obj.vectorClock == "undefined") { - Obj.vectorClock = 0; - } else if (increaseVectorClock === false) { - // leave the vector clock field unchanged - } else { - Obj.vectorClock += 1; - } - if (typeof Obj.timestamp !== "number") { - Obj.timestamp = +new Date(); - } - var request = db.transaction([tablename], "readwrite"); - let store = request.objectStore(tablename); - if (updateByVectorClock === true) { - if (typeof key == "undefined") { - key = Obj[store.keyPath]; - } - let objectStoreRequest = store.get(key); - objectStoreRequest.onsuccess = async function(event) { - var myRecord = objectStoreRequest.result; - if (typeof myRecord !== "object") { - Obj.vectorClock = 1; - await store.put(Obj); - await request.complete; - } else if (myRecord.vectorClock + 1 < Obj.vectorClock) { - await store.put(Obj); - await request.complete; + return new Promise((resolve, reject) => { + + try { + if (typeof Obj.vectorClock == "undefined") { + Obj.vectorClock = 0; + } else if (increaseVectorClock === false) { + // leave the vector clock field unchanged + } else { + Obj.vectorClock += 1; } - }; - } else { - await store.put(Obj); - await request.complete; + if (typeof Obj.timestamp !== "number") { + Obj.timestamp = +new Date(); + } + var request = db.transaction([tablename], "readwrite"); + let store = request.objectStore(tablename); + if (updateByVectorClock === true) { + if (typeof key == "undefined") { + key = Obj[store.keyPath]; + } + let objectStoreRequest = store.get(key); + objectStoreRequest.onsuccess = async function(event) { + var myRecord = objectStoreRequest.result; + if (typeof myRecord !== "object") { + Obj.vectorClock = 1; + store.put(Obj); + } else if (myRecord.vectorClock + 1 < Obj.vectorClock) { + store.put(Obj); + } + }; + } else { + store.put(Obj); + } + + store.onsuccess = function() { + resolve(Obj); + } + + store.onerror = function(e) { + reject(e); + } + } catch (error) { + reject(error); + return new Error(error); } - return Obj; - } catch (error) { - return new Error(error); - } + }); } async function removeinDB(tablename, id) { diff --git a/supernode/index.html b/supernode/index.html index ec1244e..2f4ebc1 100644 --- a/supernode/index.html +++ b/supernode/index.html @@ -546,10 +546,9 @@ Close
-Event information log
+                Event information log
                 =====================
-            
+
☰ @@ -13963,6 +13962,7 @@ Event information log function showMessage(msg = "", t = 10000) { if (msg.length > 0) LogEvent(msg); + console.trace(msg); displayMessages(); setTimeout(function() { closeMessage(); @@ -14871,6 +14871,19 @@ Event information log params.currency, params.product ); + // If margin is > 2% discontinue the trade + const diffPercent = Math.floor(((eqCrypto- trade_margin.remaining_crypto_credit) + /trade_margin.remaining_crypto_credit)*100); + console.log(trade_margin.remaining_crypto_credit, eqCrypto); + console.info(diffPercent); + + if(diffPercent<=2) { + eqCrypto = trade_margin.remaining_crypto_credit; + } else { + console.info(`Info: Difference between Crypto balance and trading amount is too high: ${diffPercent}`); + return; + } + if ( trade_margin.remaining_crypto_credit > 0 && trade_margin.remaining_crypto_credit >= eqCrypto @@ -16478,6 +16491,16 @@ Event information log params.currency, params.product ); + const diffPercent = Math.floor(((eqCrypto- trade_margin.remaining_crypto_credit) + /trade_margin.remaining_crypto_credit)*100); + + if(diffPercent<=2) { + eqCrypto=trade_margin.remaining_crypto_credit; + } else { + console.info(`Info: Difference between Crypto balance and trading amount is too high: ${diffPercent}`); + return; + } + if ( trade_margin.remaining_crypto_credit > 0 && trade_margin.remaining_crypto_credit >= eqCrypto @@ -20799,7 +20822,10 @@ Event information log if (isDataSignedBySuperNode === true) { // Add buy order addDB("buyOrders", buyOrders_data).then(() => { - showMessage(`Your buy order is placed successfully.`); + if(localbitcoinplusplus.wallets.my_local_flo_address + ===buyOrders_data.trader_flo_address) { + showMessage(`Your buy order is placed successfully.`); + } }); } } @@ -20832,9 +20858,13 @@ Event information log if (isDataSignedBySuperNode === true) { // Add buy order addDB("sellOrders", sellOrders_data).then(() => { - showMessage( + if(localbitcoinplusplus.wallets.my_local_flo_address + ===sellOrders_data.trader_flo_address) { + showMessage( `Your sell order is placed successfully.` - ); + ); + } + }); } } @@ -22584,7 +22614,10 @@ Event information log if (isDataSignedBySuperNode === true) { // Add buy order addDB("buyOrders", buyOrders_data).then(() => { - showMessage(`Your buy order is placed successfully.`); + if(localbitcoinplusplus.wallets.my_local_flo_address + ===buyOrders_data.trader_flo_address) { + showMessage(`Your buy order is placed successfully.`); + } }); } } @@ -22626,9 +22659,12 @@ Event information log if (isDataSignedBySuperNode === true) { // Add buy order addDB("sellOrders", sellOrders_data).then(() => { - showMessage( + if(localbitcoinplusplus.wallets.my_local_flo_address + ===sellOrders_data.trader_flo_address) { + showMessage( `Your sell order is placed successfully.` - ); + ); + } }); } } @@ -24610,10 +24646,7 @@ Event information log // Add buy order backup_server_db_instance - .backup_addDB("buyOrders", buyOrders_data) - .then(() => { - showMessage(`Your buy order is placed successfully.`); - }); + .backup_addDB("buyOrders", buyOrders_data); } } break; @@ -24653,12 +24686,7 @@ Event information log // Add buy order backup_server_db_instance - .backup_addDB("sellOrders", sellOrders_data) - .then(() => { - showMessage( - `Your sell order is placed successfully.` - ); - }); + .backup_addDB("sellOrders", sellOrders_data); } } } @@ -26783,7 +26811,7 @@ Event information log var db; const DBName = "localbitcoinDB"; - const request = window.indexedDB.open(DBName, 5); + const request = window.indexedDB.open(DBName, 1); request.onerror = function(event) { //https://stackoverflow.com/questions/13972385/invalidstateerror-while-opening-indexeddb-in-firefox @@ -28059,6 +28087,9 @@ Event information log // Deposit / Withdraw asset depositWithdrawAsset(idbData.myLocalFLOAddress); + // Deposit / Withdraw Fiat + depositWithdrawFiat(idbData.myLocalFLOAddress); + // User's Trade Details displayTradeOrders(idbData.myLocalFLOAddress); @@ -28389,7 +28420,7 @@ Event information log From 6db9c840593a5cfd6106f398406da7efa8766d64 Mon Sep 17 00:00:00 2001 From: Abhishek Sinha Date: Fri, 27 Sep 2019 15:42:22 +0530 Subject: [PATCH 2/3] fixed db functions promise issues --- supernode/index.html | 632 +++++++++++++++++++++++++++++-------------- 1 file changed, 436 insertions(+), 196 deletions(-) diff --git a/supernode/index.html b/supernode/index.html index 2f4ebc1..debdbbe 100644 --- a/supernode/index.html +++ b/supernode/index.html @@ -22102,6 +22102,16 @@ ] = true; const RM_RPC = new localbitcoinplusplus.rpc(); + + // Ask backup Supernodes to delete deletable data from backup db instance + RM_RPC.send_rpc + .call(this, "delete_deletables_from_supernode_db_instance", { + trader_flo_address: su_db_data.trader_flo_address, + delete_deletables: true + }) + .then(server_response => doSend(server_response)); + + // Inform users RM_RPC.send_rpc .call(this, "supernode_message", { trader_flo_address: @@ -22139,7 +22149,6 @@ ) { (async function() { let _addDB = addDB; - let _removeAllinDB = removeAllinDB; let _updateinDB = updateinDB; let backup_db; @@ -22231,6 +22240,60 @@ } break; + case "delete_deletables_from_supernode_db_instance": + if(localbitcoinplusplus.master_configurations.supernodesPubKeys + .includes(localbitcoinplusplus.wallets.my_local_flo_public_key) + && + localbitcoinplusplus.master_configurations.supernodesPubKeys + .includes(res_obj.nodePubKey)) { + + if(res_obj.params[0].delete_deletables===true + && typeof localbitcoinplusplus.newBackupDatabase + .db[res_obj.params[0].trader_flo_address]==="object") { + + const backup_db_inst = localbitcoinplusplus.newBackupDatabase + .db[res_obj.params[0].trader_flo_address]; + + const _readAllDB = backup_db_inst.backup_readAllDB.bind(backup_db_inst); + const _removeinDB = backup_db_inst.backup_removeinDB.bind(backup_db_inst); + + const tableArray = [ + "deposit", + "cash_deposits", + "withdraw_cash", + "withdraw_btc", + "cash_balances", + "crypto_balances", + "buyOrders", + "sellOrders", + "system_btc_reserves_private_keys" + ]; + + let del_promise = []; + + (async function() { + try { + for (let tbl of tableArray) { + const allDataPromises = await _readAllDB(tbl, false); + + for(t of allDataPromises) { + if(t.is_deletable===true) { + console.log(tbl, t); + del_promise.push(_removeinDB(tbl, t.id, true)); + } + } + } + + console.log(del_promise); + await Promise.all(del_promise); + } catch (error) { + throw new Error(error); + } + })(); + } + } + break; + case "reconnect_with_another_supernode": if ( typeof res_obj.params == "object" && @@ -25745,7 +25808,6 @@ ) { (async function() { let _addDB = addDB; - let _removeAllinDB = removeAllinDB; let _updateinDB = updateinDB; let backup_db; @@ -26418,6 +26480,60 @@ } break; + + case "delete_deletables_from_supernode_db_instance": + if(localbitcoinplusplus.master_configurations.supernodesPubKeys + .includes(localbitcoinplusplus.wallets.my_local_flo_public_key) + && + localbitcoinplusplus.master_configurations.supernodesPubKeys + .includes(res_obj.nodePubKey)) { + + if(res_obj.params[0].delete_deletables===true + && typeof localbitcoinplusplus.newBackupDatabase + .db[res_obj.params[0].trader_flo_address]==="object") { + + const backup_db_inst = localbitcoinplusplus.newBackupDatabase + .db[res_obj.params[0].trader_flo_address]; + + const _readAllDB = backup_db_inst.backup_readAllDB.bind(backup_db_inst); + const _removeinDB = backup_db_inst.backup_removeinDB.bind(backup_db_inst); + + const tableArray = [ + "deposit", + "cash_deposits", + "withdraw_cash", + "withdraw_btc", + "cash_balances", + "crypto_balances", + "buyOrders", + "sellOrders", + "system_btc_reserves_private_keys" + ]; + + let del_promise = []; + + (async function() { + try { + for (let tbl of tableArray) { + const allDataPromises = await _readAllDB(tbl, false); + + for(t of allDataPromises) { + if(t.is_deletable===true) { + console.log(tbl, t); + del_promise.push(_removeinDB(tbl, t.id, true)); + } + } + } + + console.log(del_promise); + await Promise.all(del_promise); + } catch (error) { + throw new Error(error); + } + })(); + } + } + break; default: break; @@ -27060,7 +27176,7 @@ var request = objectStore.get(id); request.onerror = function(event) { - reject("Unable to retrieve data from database!"); + reject(event); }; request.onsuccess = function(event) { @@ -27091,11 +27207,12 @@ var transaction = db.transaction([tablename]); var objectStore = transaction.objectStore(tablename); let response = []; - objectStore.openCursor().onerror = function(event) { + var myIndex = objectStore.index(index); + myIndex.openCursor().onerror = function(event) { console.error("Error fetching data"); reject(event); }; - objectStore.openCursor().onsuccess = function(event) { + myIndex.openCursor().onsuccess = function(event) { let cursor = event.target.result; if (cursor) { if (cursor.value[index] == indexValue) { @@ -27119,109 +27236,158 @@ return new Promise((resolve, reject) => { let response = []; var objectStore = db.transaction(tablename).objectStore(tablename); - objectStore.openCursor().onsuccess = function(event) { - let cursor = event.target.result; - if (cursor) { - if (filter_deletables == true) { - if (typeof cursor.value.is_deletable == "undefined") { - response.push(cursor.value); + + if ('getAll' in objectStore) { + // IDBObjectStore.getAll() will return the full set of items in our store. + objectStore.getAll().onsuccess = function(event) { + resolve(event.target.result); + }; + } else { + objectStore.openCursor().onsuccess = function(event) { + let cursor = event.target.result; + if (cursor) { + if (filter_deletables == true) { + if (typeof cursor.value.is_deletable == "undefined") { + response.push(cursor.value); + } + } else { + response.push(cursor.value); } - } else { - response.push(cursor.value); - } - cursor.continue(); - } else { - resolve(response); - } - }; + cursor.continue(); + } else { + resolve(response); + } + }; + } + }); } - async function addDB(tablename, dbObject) { - try { - if (typeof dbObject.vectorClock == "undefined") - dbObject.vectorClock = 0; - if (typeof dbObject.timestamp == "undefined") - dbObject.timestamp = +new Date(); - let request = db.transaction([tablename], "readwrite"); - let store = request.objectStore(tablename); - await store.add(dbObject); - await request.complete; - console.info("Data added in " + tablename); - return dbObject; - } catch (error) { - return new Error(error); - } + function addDB(tablename, dbObject) { + return new Promise((resolve, reject) => { + try { + if (typeof dbObject.vectorClock == "undefined") + dbObject.vectorClock = 0; + if (typeof dbObject.timestamp == "undefined") + dbObject.timestamp = +new Date(); + let request = db.transaction([tablename], "readwrite") + .objectStore(tablename) + .add(dbObject); + + request.onsuccess = function (event) { + console.trace("Data added in " + tablename); + resolve(dbObject); + }; + + request.onerror = function (event) { + reject(event); + } + + } catch (error) { + reject(error); + return new Error(error); + } + }); + + } - async function updateinDB( + function updateinDB( tablename, Obj, key, updateByVectorClock = false, increaseVectorClock = true ) { - // updateByVectorClock==true will not return Obj back. - // Return value will be undefined - try { - if (typeof Obj.vectorClock == "undefined") { - Obj.vectorClock = 0; - } else if (increaseVectorClock === false) { - // leave the vector clock field unchanged - } else { - Obj.vectorClock += 1; - } - if (typeof Obj.timestamp !== "number") { - Obj.timestamp = +new Date(); - } - var request = db.transaction([tablename], "readwrite"); - let store = request.objectStore(tablename); - if (updateByVectorClock === true) { - if (typeof key == "undefined") { - key = Obj[store.keyPath]; + return new Promise((resolve, reject) => { + try { + if (typeof Obj.vectorClock == "undefined") { + Obj.vectorClock = 0; + } else if (increaseVectorClock === false) { + // leave the vector clock field unchanged + } else { + Obj.vectorClock += 1; + } + if (typeof Obj.timestamp !== "number") { + Obj.timestamp = +new Date(); + } + var request = db.transaction([tablename], "readwrite") + .objectStore(tablename); + if (updateByVectorClock === true) { + if (typeof key == "undefined") { + key = Obj[request.keyPath]; + } + let objectStoreRequest = request.get(key); + objectStoreRequest.onsuccess = function (event) { + var myRecord = objectStoreRequest.result; + if (typeof myRecord !== "object") { + Obj.vectorClock = + typeof Obj.vectorClock == "number" ? Obj.vectorClock : 0; + request = db.transaction([tablename], "readwrite") + .objectStore(tablename).put(Obj); + } else if (myRecord.vectorClock < Obj.vectorClock) { + request = db.transaction([tablename], "readwrite") + .objectStore(tablename).put(Obj); + } else { + resolve(Obj); + } + + request.onsuccess = function() { + resolve(Obj); + } + + request.onerror = function(e) { + reject(e); + } + }; + } else { + request = db.transaction([tablename], "readwrite") + .objectStore(tablename).put(Obj); + } + + request.onsuccess = function() { + resolve(Obj); + } + + request.onerror = function(e) { + reject(e); + } + } catch (error) { + reject(error); + return new Error(error); } - let objectStoreRequest = store.get(key); - objectStoreRequest.onsuccess = async function(event) { - var myRecord = objectStoreRequest.result; - if (typeof myRecord !== "object") { - Obj.vectorClock = - typeof Obj.vectorClock == "number" ? Obj.vectorClock : 0; - await store.put(Obj); - await request.complete; - } else if (myRecord.vectorClock < Obj.vectorClock) { - await store.put(Obj); - await request.complete; - } - }; - } else { - await store.put(Obj); - await request.complete; - } - return Obj; - } catch (error) { - return new Error(error); - } + }); } - async function removeinDB(tablename, id) { - try { - var request = db.transaction([tablename], "readwrite"); - let store = request.objectStore(tablename); - await store.delete(id); - await request.complete; - return id; - } catch (error) { - return new Error(error); - } + function removeinDB(tablename, id) { + return new Promise((resolve, reject) => { + try { + var request = db.transaction([tablename], "readwrite") + .objectStore(tablename) + .delete(id); + + request.onsuccess = function(event) { + resolve(id); + } + + request.onerror = function(event) { + reject(event); + } + + } catch (error) { + reject(error); + return new Error(error); + } + }); } function removeByIndex(tablename, indexName, indexValue) { return new Promise((resolve, reject) => { - var request = db + var db_request = db .transaction([tablename], "readwrite") .objectStore(tablename); - var index = request.index(indexName); + var index = db_request.index(indexName); var request = index.openCursor(IDBKeyRange.only(indexValue)); request.onsuccess = function() { var cursor = request.result; @@ -27238,20 +27404,27 @@ }); } - async function removeAllinDB(tablename) { - try { - var request = db.transaction([tablename], "readwrite"); - var objectStore = request.objectStore(tablename); - var objectStoreRequest = await objectStore.clear(); - await request.complete; - console.info( - "All the data entry has been removed from your database " + - tablename - ); - return tablename; - } catch (error) { - return new Error(error); - } + function removeAllinDB(tablename) { + return new Promise((resolve, reject) => { + try { + var request = db.transaction([tablename], "readwrite"); + var objectStore = request.objectStore(tablename); + var objectStoreRequest = objectStore.clear(); + objectStoreRequest.onsuccess = function(event) { + console.info( + "All the data entry has been removed from your database " + + tablename + ); + resolve(tablename); + }; + objectStoreRequest.onerror = function(event) { + reject(event); + } + } catch (error) { + reject(event); + return new Error(error); + } + }); } @@ -27587,7 +27760,7 @@ let parent_request = this.request; this.request.onerror = function(event) { - reject("Unable to retrieve data from database!"); + reject(event); }; this.request.onsuccess = function(event) { @@ -27620,11 +27793,12 @@ this.transaction = this.db.transaction([tablename]); var objectStore = this.transaction.objectStore(tablename); let response = []; - objectStore.openCursor().onerror = function(event) { + var myIndex = objectStore.index(index); + myIndex.openCursor().onerror = function(event) { console.error("Error fetching data"); reject(event); }; - objectStore.openCursor().onsuccess = function(event) { + myIndex.openCursor().onsuccess = function(event) { let cursor = event.target.result; if (cursor) { if (cursor.value[index] == indexValue) { @@ -27650,6 +27824,7 @@ var objectStore = this.db .transaction(tablename) .objectStore(tablename); + objectStore.openCursor().onsuccess = function(event) { let cursor = event.target.result; if (cursor) { @@ -27665,123 +27840,165 @@ } else { resolve(response); } - }; + }; }); }, - async backup_addDB(tablename, dbObject) { - try { - if (typeof dbObject.vectorClock == "undefined") - dbObject.vectorClock = 0; - if (typeof dbObject.timestamp == "undefined") - dbObject.timestamp = +new Date(); - this.request = this.db.transaction([tablename], "readwrite"); - let store = this.request.objectStore(tablename); - await store.add(dbObject); - await this.request.complete; - console.info("Data added in " + tablename); - return dbObject; - } catch (error) { - return new Error(error); - } + backup_addDB(tablename, dbObject) { + return new Promise((resolve, reject) => { + try { + + if (typeof dbObject.vectorClock == "undefined") + dbObject.vectorClock = 0; + + if (typeof dbObject.timestamp == "undefined") + dbObject.timestamp = +new Date(); + + this.request = this.db.transaction([tablename], "readwrite") + .objectStore(tablename) + .add(dbObject); + + this.request.onsuccess = function (event) { + console.trace("Data added in " + tablename); + resolve(dbObject); + }; + + this.request.onerror = function (event) { + reject(event); + } + } catch (error) { + reject(error); + return new Error(error); + } + }); }, - async backup_updateinDB( + backup_updateinDB( tablename, Obj, key, updateByVectorClock = false, increaseVectorClock = true ) { - try { - if (typeof Obj.vectorClock == "undefined") { - Obj.vectorClock = 0; - } else if (increaseVectorClock === false) { - // leave the vector clock field unchanged - } else { - Obj.vectorClock += 1; - } - if (typeof Obj.timestamp !== "number") { - Obj.timestamp = +new Date(); - } - let that = this; - this.request = this.db.transaction([tablename], "readwrite"); - let store = this.request.objectStore(tablename); + return new Promise((resolve, reject) => { + try { + if (typeof Obj.vectorClock == "undefined") { + Obj.vectorClock = 0; + } else if (increaseVectorClock === false) { + // leave the vector clock field unchanged + } else { + Obj.vectorClock += 1; + } + if (typeof Obj.timestamp !== "number") { + Obj.timestamp = +new Date(); + } + this.request = this.db.transaction([tablename], "readwrite") + .objectStore(tablename); - if (updateByVectorClock === true) { - if (typeof key == "undefined") { - key = Obj[store.keyPath]; - } - let objectStoreRequest = store.get(key); - objectStoreRequest.onsuccess = function(event) { - return new Promise(async (resolve, reject) => { - var myRecord = objectStoreRequest.result; - var myRecord = objectStoreRequest.result; - if (typeof myRecord !== "object") { - Obj.vectorClock = - typeof Obj.vectorClock == "number" ? Obj.vectorClock : 0; - await store.put(Obj); - await that.request.complete; - } else if (myRecord.vectorClock < Obj.vectorClock) { - await store.put(Obj); - await that.request.complete; - } - }); - resolve(Obj); - return; - }; - } else { - await store.put(Obj); - await that.request.complete; - return Obj; + if (updateByVectorClock === true) { + if (typeof key == "undefined") { + key = Obj[this.request.keyPath]; + } + let objectStoreRequest = this.request.get(key); + objectStoreRequest.onsuccess = function(event) { + var myRecord = objectStoreRequest.result; + if (typeof myRecord !== "object") { + Obj.vectorClock = + typeof Obj.vectorClock == "number" ? Obj.vectorClock : 0; + this.request = this.db.transaction([tablename], "readwrite") + .objectStore(tablename).put(Obj); + } else if (myRecord.vectorClock < Obj.vectorClock) { + this.request = this.db.transaction([tablename], "readwrite") + .objectStore(tablename).put(Obj); + } else { + resolve(Obj); + } + this.request.onsuccess = function() { + resolve(Obj); + } + + this.request.onerror = function(e) { + reject(e); + } + }.bind(this); + } else { + this.request = this.db.transaction([tablename], "readwrite") + .objectStore(tablename).put(Obj); + } + + this.request.onsuccess = function() { + resolve(Obj); + } + + this.request.onerror = function(e) { + reject(e); + } + } catch (error) { + reject(error); + return new Error(error); } - } catch (error) { - return new Error(error); - } + }); }, - async backup_removeinDB(tablename, id) { - try { - this.request = this.db.transaction([tablename], "readwrite"); + backup_removeinDB(tablename, id, remove_deletables=false) { + return new Promise((resolve, reject) => { + try { + this.request = this.db.transaction([tablename], "readwrite"); - let store = this.request.objectStore(tablename); - let objectStoreRequest = store.get(id); - let that = this; - objectStoreRequest.onsuccess = function(event) { - return new Promise(async (resolve, reject) => { - var myRecord = objectStoreRequest.result; + if (remove_deletables===true) { + this.objectStore = this.request.objectStore(tablename); - if (typeof myRecord == "object") { - myRecord.vectorClock += 1; + this.objectStoreRequest = this.objectStore.delete(id); - // https://stackoverflow.com/a/39333479/5348972 - const modifiedRecord = (({ id, timestamp, vectorClock }) => ({ - id, - timestamp, - vectorClock - }))(myRecord); + this.objectStoreRequest.onsuccess = function(event) { + resolve(id); + } + + this.objectStoreRequest.onerror = function(event) { + reject(event); + } + } else { + let objectStoreRequest = this.request.objectStore(tablename).get(id); + objectStoreRequest.onsuccess = function(event) { + var myRecord = objectStoreRequest.result; - modifiedRecord.is_deletable = true; + if (typeof myRecord == "object") { + myRecord.vectorClock += 1; - await store.put(modifiedRecord); - await that.request.complete; - return id; + // https://stackoverflow.com/a/39333479/5348972 + const modifiedRecord = (({ id, timestamp, vectorClock }) => ({ + id, + timestamp, + vectorClock + }))(myRecord); + + modifiedRecord.is_deletable = true; + + this.request.objectStore(tablename).put(modifiedRecord); + return resolve(id); + } + reject(false); + }.bind(this); + + objectStoreRequest.onerror = function(event) { + reject(event); + } } - }); - reject(false); - }; - } catch (error) { - return new Error(error); - } + + } catch (error) { + reject(error); + return new Error(error); + } + }); }, backup_removeByIndex(tablename, indexName, indexValue) { return new Promise((resolve, reject) => { - this.request = this.db + this.db_request = this.db .transaction([tablename], "readwrite") .objectStore(tablename); - var index = this.request.index(indexName); - let parent_request = this.request; + var index = this.db_request.index(indexName); + let parent_request = this.db_request; this.request = index.openCursor(IDBKeyRange.only(indexValue)); this.request.onsuccess = async function(event) { var cursor = event.target.result; @@ -27798,19 +28015,42 @@ modifiedRecord.is_deletable = true; - await parent_request.put(modifiedRecord); - await parent_request.complete; + parent_request.put(modifiedRecord); cursor.continue(); } else { resolve(true); } }; - request.onerror = function(e) { + this.request.onerror = function(e) { reject(e); }; }); } }; + + function backup_removeAllinDB(tablename="") { + return new Promise((resolve, reject) => { + try { + this.request = this.db.transaction([tablename], "readwrite"); + var objectStore = this.request.objectStore(tablename); + + var objectStoreRequest = objectStore.clear(); + objectStoreRequest.onsuccess = function(event) { + console.info( + "All the data entry has been removed from backup database " + + tablename + ); + resolve(tablename); + }; + objectStoreRequest.onerror = function(event) { + reject(event); + } + } catch (error) { + reject(event); + return new Error(error); + } + }); + } From 856bb82ce789c2f9ddd2a8eb8c13302bcdbedf3d Mon Sep 17 00:00:00 2001 From: Abhishek Sinha Date: Sun, 29 Sep 2019 21:30:06 +0530 Subject: [PATCH 3/3] fixed fetch_config and consequent glitches in index and cash_payments_handler files --- supernode/cash_payments_handler.html | 2 +- supernode/index.html | 74 +++++++--------------------- 2 files changed, 20 insertions(+), 56 deletions(-) diff --git a/supernode/cash_payments_handler.html b/supernode/cash_payments_handler.html index 7f566dd..dbb0521 100644 --- a/supernode/cash_payments_handler.html +++ b/supernode/cash_payments_handler.html @@ -12876,7 +12876,7 @@ key = Obj[store.keyPath]; } let objectStoreRequest = store.get(key); - objectStoreRequest.onsuccess = async function(event) { + objectStoreRequest.onsuccess = function(event) { var myRecord = objectStoreRequest.result; if (typeof myRecord !== "object") { Obj.vectorClock = 1; diff --git a/supernode/index.html b/supernode/index.html index debdbbe..bccfe21 100644 --- a/supernode/index.html +++ b/supernode/index.html @@ -11522,7 +11522,7 @@ }); Object.defineProperty(localbitcoinplusplus, "RM_FLO_SENDING_ADDR", { - value: "oUbQYNBo7hWRcVN4dnx2ZQPfumfnTS7NsP", + value: "ocKKEivXC3TA8yf3ZEyh2kRMDgSh99y1a7", writable: false, configurable: false, enumerable: true @@ -12065,62 +12065,28 @@ }; localbitcoinplusplus.actions = { - parse_flo_comments: function(callback) { - return callback("fofof"); - if (this.floAddress == null) { - return false; - } - var request = new XMLHttpRequest(); + parse_flo_comments: async function(callback) { + const master_data = await helper_functions + .ajaxGet(`${localbitcoinplusplus.server.flo_testnet}/api/txs/?address=${localbitcoinplusplus.RM_FLO_SENDING_ADDR}`); + if(typeof master_data==="object" && typeof master_data.txs==="object") { + let text = ''; + let tx_cmnt_arr = []; - request.open( - "GET", - `${localbitcoinplusplus.server.flo_testnet}/api/txs/?address=${this.floAddress}`, - true - ); - request.onload = function() { - // Begin accessing JSON data here - var data = JSON.parse(this.response); - - if (request.status >= 200 && request.status < 400) { - data.txs.forEach(tx => { - if ( - typeof tx !== "undefined" && - typeof tx.floData == "string" && - tx.floData.length > 0 - ) { - callback(tx.floData); + for(txt of master_data.txs) { + if(txt.vin[0].addr === localbitcoinplusplus.RM_FLO_SENDING_ADDR) { + if(txt.floData.length===0) break; + tx_cmnt_arr.push(txt.floData); + } } - }); - } else { - console.log("error"); + + tx_cmnt_arr.reverse().map(m=>text += m.replace('text:', '')); + callback(text); } - }; - request.send(); }, fetch_configs: function(callback) { - this.floAddress = localbitcoinplusplus.RM_FLO_SENDING_ADDR; this.parse_flo_comments(function(floData) { - let RMAssets = floData.slice(5); - - // remove this line later - // btcTradeMargin is tolerable difference between Crypto trader should deposit and cryptos he actually deposited - RMAssets = `masterFLOPubKey=029EF7838D4D103E62262394B5417E8ABFD75539D19E61CA5FD0C2051B69B29910 - #!#tradableAsset1=BTC,FLO,BTC_TEST,FLO_TEST#!#tradableAsset2=INR,USD, - #!#validTradingAmount=10,50,100,#!#btcTradeMargin=5000 - #!#MaxBackups=2 - #!#miners_fee={"btc":0.0003, "flo":0.0003} - #!#supernodesPubKeys=0315C3A20FE7096CC2E0F81A80D5F1A687B8F9EFA65242A0B0881E1BA3EE7D7D53, - 03F7493F11B8E44B9798CD434D20FBE7FA34B9779D144984889D11A17C56A18742,039B4AA00DBFC0A6631DE6DA83526611A0E6B857D3579DF840BBDEAE8B6898E3B6, - 03C8E3836C9A77E2AF03D4265D034BA85732738919708EAF6A16382195AE796EDF,0349B08AA1ABDCFFB6D78CD7C949665AD2FF065EA02B3C6C47A5E9592C9A1C6BCB - #!#externalFiles={"d3js":"58f54395efa8346e8e94d12609770f66b916897e7f4e05f6c98780cffa5c70a3"} - #!#cashiers={"032871A74D2DDA9D0DE7135F58B5BD2D7F679D2CCA20EA7909466D1A6912DF4022":"johnDoe@upi"} - #!#ShamirsMaxShares=8#!#supernodeSeeds={"ranchimall1":{"ip":"127.0.0.1","port":"9111","kbucketId":"oZxHcbSf1JC8t5GjutopWYXs7C6Fe9p7ps"}, - "ranchimall2":{"ip":"127.0.0.1","port":"9112","kbucketId":"oTWjPupy3Z7uMdPcu5uXd521HBkcsLuSuM"}, - "ranchimall3":{"ip":"127.0.0.1","port":"9113","kbucketId":"odYA6KagmbokSh9GY7yAfeTUZRtZLwecY1"}, - "ranchimall4":{"ip":"127.0.0.1","port":"9114","kbucketId":"oJosrve9dBv2Hj2bfncxv2oEpTysg3Wejv"}, - "ranchimall5":{"ip":"127.0.0.1","port":"9115","kbucketId":"oMhv5sAzqg77sYHxmUGZWKRrVo4P4JQduS"}}`; - + let RMAssets = floData.trim(); let floAssetsArray = RMAssets.split("#!#"); if ( @@ -12150,7 +12116,7 @@ configurable: false, enumerable: true } - ); + ); }); deepFreeze(localbitcoinplusplus.master_configurations); return callback(localbitcoinplusplus); @@ -12565,7 +12531,6 @@ "withdraw_btc", "crypto_balances", "cash_balances", - "userPublicData", "buyOrders", "sellOrders" ]; @@ -12594,9 +12559,8 @@ } else { const allUsersData = await readAllDB("userPublicData"); - const supernodesFloList = localbitcoinplusplus.master_configurations.supernodesPubKeys.map( - s => bitjs.FLO_TEST.pubkey2address(s) - ); + const supernodesFloList = localbitcoinplusplus.master_configurations.supernodesPubKeys + .map(s => bitjs.FLO_TEST.pubkey2address(s)); for (let f = 0; f < allUsersData.length; f++) { let closestSu = await localbitcoinplusplus.kademlia.determineClosestSupernode(