From 738192720d3734529781e78350c26952eb14d808 Mon Sep 17 00:00:00 2001 From: Abhishek Sinha Date: Sun, 16 Jun 2019 18:18:51 +0530 Subject: [PATCH] fixed seection of supernodes for getting backup for backup supernodes --- supernode/index.html | 107 ++++++++++++++++++++++++++----------------- 1 file changed, 65 insertions(+), 42 deletions(-) diff --git a/supernode/index.html b/supernode/index.html index f393053..800ad20 100644 --- a/supernode/index.html +++ b/supernode/index.html @@ -11503,7 +11503,7 @@ params.trader_flo_address, params.product, params.currency); if (typeof trade_margin.remaining_crypto_credit == "number" && typeof trade_margin.remaining_fiat_credit == "number") { - let eqCrypto = RM_TRADE.calculateCryptoEquivalentOfCash(params.buy_price); + let eqCrypto = RM_TRADE.calculateCryptoEquivalentOfCash(params.buy_price, params.currency, params.product); if (trade_margin.remaining_crypto_credit > 0 && trade_margin.remaining_crypto_credit >= eqCrypto) { request.response = RM_TRADE.trade_sell.call( @@ -11939,7 +11939,7 @@ if (localbitcoinplusplus.master_configurations.tradableAsset1.includes( params.product)) { let eqCrypto = RM_TRADE.calculateCryptoEquivalentOfCash( - params.withdrawing_amount); + params.withdrawing_amount, params.currency, params.product); if (trade_margin.remaining_crypto_credit < 0 && trade_margin.remaining_crypto_credit < eqCrypto) { err_msg = `Insufficient crypto balance to withdraw. You can withdraw upto: ${params.product} ${trade_margin.remaining_crypto_credit}` @@ -11985,7 +11985,7 @@ eqBTC = Number(parseFloat(eqBTC).toFixed(8)); let withdrawer_new_btc_balance = withdrawer_btc_balance - eqBTC; - if (withdrawer_new_btc_balance > 0 && + if (withdrawer_new_btc_balance >= 0 && withdrawer_btc_balance > 0 && withdrawing_btc_amount_in_cash > 0 && eqBTC > 0 && eqBTC <= @@ -12780,7 +12780,7 @@ params.trader_flo_address, params.product, params.currency, primarySupernodeForThisUser); if (typeof trade_margin.remaining_crypto_credit == "number" && typeof trade_margin.remaining_fiat_credit == "number") { - let eqCrypto = RM_TRADE.calculateCryptoEquivalentOfCash(params.buy_price); + let eqCrypto = RM_TRADE.calculateCryptoEquivalentOfCash(params.buy_price, params.currency, params.product); if (trade_margin.remaining_crypto_credit > 0 && trade_margin.remaining_crypto_credit >= eqCrypto) { request.response = RM_TRADE.trade_sell.call( @@ -13229,7 +13229,7 @@ if (localbitcoinplusplus.master_configurations.tradableAsset1.includes( params.product)) { let eqCrypto = RM_TRADE.calculateCryptoEquivalentOfCash( - params.withdrawing_amount); + params.withdrawing_amount, params.currency, params.product); if (trade_margin.remaining_crypto_credit < 0 && trade_margin.remaining_crypto_credit < eqCrypto) { err_msg = `Insufficient crypto balance to withdraw. You can withdraw upto: ${params.product} ${trade_margin.remaining_crypto_credit}` @@ -13275,7 +13275,7 @@ eqBTC = Number(parseFloat(eqBTC).toFixed(8)); let withdrawer_new_btc_balance = withdrawer_btc_balance - eqBTC; - if (withdrawer_new_btc_balance > 0 && + if (withdrawer_new_btc_balance >= 0 && withdrawer_btc_balance > 0 && withdrawing_btc_amount_in_cash > 0 && eqBTC > 0 && eqBTC <= @@ -18151,14 +18151,14 @@ if (localbitcoinplusplus.MY_SUPERNODE_FLO_ADDRESS == su_db_data.trader_flo_address) return; const mcslist = MCS.map(m=>m.data.id); - +95 if(mcslist.indexOf(su_db_data.trader_flo_address) < mcslist.indexOf(localbitcoinplusplus.MY_SUPERNODE_FLO_ADDRESS)) { if (websocket.readyState === WebSocket.OPEN) { websocket.close(); const newSu = await readDBbyIndex('myClosestSupernodes','trader_flo_address', su_db_data.trader_flo_address); if (typeof newSu=="object" && typeof newSu[0].trader_flo_address=="string") { await startWebSocket(`ws://${newSu[0].ip}:${newSu[0].port}`); - showMssage(`INFO: ${su_db_data.server_msg}`); + showMessage(`INFO: ${su_db_data.server_msg}`); } else { alert(`INFO: Please reload the page.`); } @@ -19590,17 +19590,18 @@ } let objectStoreRequest = store.get(key); objectStoreRequest.onsuccess = - function(event) { + async function(event) { var myRecord = objectStoreRequest.result; if(typeof myRecord !=="object") { - console.error('WARNING: Failed to update '+tablename); - console.log(tablename); - return; - } - if (myRecord.vectorClock+1 < Obj.vectorClock) { + Obj.vectorClock = 1; await store.put(Obj); await request.complete; - resolve(Obj); + return Obj; + } + else if (myRecord.vectorClock+1 < Obj.vectorClock) { + await store.put(Obj); + await request.complete; + return Obj; } } @@ -19941,6 +19942,7 @@ } else { Obj.vectorClock += 1; } + let that = this; this.request = this.db.transaction([tablename], "readwrite") let store = this.request.objectStore(tablename) @@ -19953,17 +19955,25 @@ function(event) { return new Promise(async (resolve, reject)=>{ var myRecord = objectStoreRequest.result; - if (myRecord.vectorClock+1 < Obj.vectorClock) { + var myRecord = objectStoreRequest.result; + if(typeof myRecord !=="object") { + Obj.vectorClock = 1; await store.put(Obj); - await this.request.complete; + await that.request.complete; + resolve(Obj); + return; + } + else if (myRecord.vectorClock+1 < Obj.vectorClock) { + await store.put(Obj); + await that.request.complete; resolve(Obj); } - }) + }); } } else { await store.put(Obj); - await this.request.complete; + await that.request.complete; return Obj; } @@ -20247,32 +20257,45 @@ } } - // Update backup db as well for all supernodes you're serving as backup - for (let index = closestSuNodes.length-1; index >= closestSuNodes.length-localbitcoinplusplus.master_configurations.MaxBackups; index--) { - let firstAliveBackupFloIdForBackupSupernode; - if (closestSuNodes[index].is_live==true && typeof firstAliveBackupFloIdForBackupSupernode !== "string") { - firstAliveBackupFloIdForBackupSupernode = closestSuNodes[index].trader_flo_address; - localbitcoinplusplus.actions - .sync_backup_supernode_from_backup_supernode(closestSuNodes[0].trader_flo_address, - firstAliveBackupFloIdForBackupSupernode, closestSuNodes[index].trader_flo_address); - } else { - // it will ask backup from backup su next closest - for (let j = index; j < index+localbitcoinplusplus.master_configurations.MaxBackups; j++) { - let actual_num = j%index; - const nextBKSu = closestSuNodes[actual_num].trader_flo_address; - if (nextBKSu !== idbData.myLocalFLOAddress - && closestSuNodes[actual_num].is_live==true - && typeof firstAliveBackupFloIdForBackupSupernode !== "string") { - - firstAliveBackupFloIdForBackupSupernode = closestSuNodes[actual_num].trader_flo_address; + // Let current live status be recorded in DB + localbitcoinplusplus.actions.delay(5000).then(()=>{ + // Update backup db as well for all supernodes you're serving as backup + for (let index = closestSuNodes.length-1; index >= closestSuNodes.length-localbitcoinplusplus.master_configurations.MaxBackups; index--) { + let firstAliveBackupFloIdForBackupSupernode; + if (closestSuNodes[index].is_live==true && typeof firstAliveBackupFloIdForBackupSupernode !== "string") { + firstAliveBackupFloIdForBackupSupernode = closestSuNodes[index].trader_flo_address; - localbitcoinplusplus.actions - .sync_backup_supernode_from_backup_supernode(closestSuNodes[0].trader_flo_address, - firstAliveBackupFloIdForBackupSupernode, closestSuNodes[index].trader_flo_address); + localbitcoinplusplus.actions + .sync_backup_supernode_from_backup_supernode(closestSuNodes[0].trader_flo_address, + firstAliveBackupFloIdForBackupSupernode, closestSuNodes[index].trader_flo_address); + + } else { + // it will ask backup from backup su next closest + for (let j = index; j < index+localbitcoinplusplus.master_configurations.MaxBackups; j++) { + let actual_num = j; + if(actual_num>=closestSuNodes.length-1) { + actual_num = j%index + } else { + actual_num = j+1; + } + const nextBKSu = closestSuNodes[actual_num].trader_flo_address; + if (nextBKSu !== idbData.myLocalFLOAddress + && closestSuNodes[actual_num].is_live==true + && typeof firstAliveBackupFloIdForBackupSupernode !== "string") { + + firstAliveBackupFloIdForBackupSupernode = closestSuNodes[actual_num].trader_flo_address; + + localbitcoinplusplus.actions + .sync_backup_supernode_from_backup_supernode(closestSuNodes[0].trader_flo_address, + firstAliveBackupFloIdForBackupSupernode, closestSuNodes[index].trader_flo_address); + + } } - } + } } - } + + }); + }