diff --git a/supernode/index.html b/supernode/index.html index 7346fc1..b3e589e 100644 --- a/supernode/index.html +++ b/supernode/index.html @@ -10229,23 +10229,70 @@ return arr; }, - getDBHash: async function(su=localbitcoinplusplus.wallets.my_local_flo_address) { - const tableArray = ["deposit", "withdraw_cash", "withdraw_btc", "cash_balances", "crypto_balances", - "buyOrders", "sellOrders", "system_btc_reserves_private_keys"]; + getHighestVectorClockInTablesOfaDB: function(dbDataOfSupernode=[]) { + return new Promise((resolve, reject)=>{ + let higestVCList = []; + Object.keys(dbDataOfSupernode).map((m,i)=>{ + if(typeof dbDataOfSupernode[m]=="object") { + arr = dbDataOfSupernode[m].map(d=>{ + if(typeof d !== 'undefined') { + return d.vectorClock; + } + }); + var max = Math.max.apply( null, arr ); + if(typeof max !=="number" || [-Infinity, NaN, false, null, undefined].includes(max)) max=0; + return higestVCList[`${m}_HVC`] = max; + } + }); + resolve(higestVCList); + }); + }, + getHighestTimestampInTablesOfaDB: function(dbDataOfSupernode=[]) { + return new Promise((resolve, reject)=>{ + let higestVCList = []; + Object.keys(dbDataOfSupernode).map((m,i)=>{ + if(typeof dbDataOfSupernode[m]=="object") { + arr = dbDataOfSupernode[m].map(d=>{ + if(typeof d !== 'undefined') { + return d.timestamp; + } + }); + var max = Math.max.apply( null, arr ); + if(typeof max !=="number" || [-Infinity, NaN, false, null, undefined].includes(max)) max=0; + return higestVCList[`${m}_HVC`] = max; + } + }); + resolve(higestVCList); + }); + }, + + getDBTablesLatestHashAndTimestamp: async function(su=localbitcoinplusplus.wallets.my_local_flo_address, actual_db_data=false, tableArray=false) { + let get_su = await localbitcoinplusplus.kademlia.determineClosestSupernode(su); const supernode_flo_id = get_su[0].data.id; const subjectDB = (supernode_flo_id==localbitcoinplusplus.wallets.my_local_flo_address) ? "":supernode_flo_id; - const dbDataOfSupernode = await localbitcoinplusplus.actions.get_sharable_db_data(tableArray, subjectDB); + let dbDataOfSupernode; + + if (actual_db_data==false) { + if (typeof tableArray!=="object") { + tableArray = ["deposit", "withdraw_cash", "withdraw_btc", "cash_balances", "crypto_balances", + "buyOrders", "sellOrders", "system_btc_reserves_private_keys"]; + } + dbDataOfSupernode = await localbitcoinplusplus.actions.get_sharable_db_data(tableArray, subjectDB); + } + if (typeof dbDataOfSupernode=="object" && Object.keys(dbDataOfSupernode).length>0) { myArray = {}; Object.keys(dbDataOfSupernode) .map(m=>myArray[m] = Crypto.SHA256(JSON.stringify(dbDataOfSupernode[m]))); - + + const higestTimestampList = await localbitcoinplusplus.actions.getHighestTimestampInTablesOfaDB(dbDataOfSupernode); + const dbDataOfSupernodeStr = JSON.stringify(dbDataOfSupernode); const dbDataOfSupernodeHash = Crypto.SHA256(dbDataOfSupernodeStr); @@ -10253,37 +10300,18 @@ myArray["DBHash"] = dbDataOfSupernodeHash; myArray["trader_flo_address"] = localbitcoinplusplus.wallets.my_local_flo_address; myArray["data_of"] = su; - myArray["timestamp"] = + new Date(); + myArray["higestTimestampList"] = higestTimestampList; + + return myArray; - const RM_RPC = new localbitcoinplusplus.rpc; - - if (su==localbitcoinplusplus.wallets.my_local_flo_address) { - updateinDB('supernodesDbHash', myArray) - .then((resp)=>{ - RM_RPC - .send_rpc - .call(this, "hash_of_a_supernode_db_response", myArray) - .then(supernodesDbHash_response=> - doSend(supernodesDbHash_response) - ); - - showMessage(`INFO: "supernodesDbHash" table updated.`)}); - } else { - if (typeof localbitcoinplusplus.newBackupDatabase.db[su]!=="object") { - return false; - } - localbitcoinplusplus.newBackupDatabase.db[su] - .backup_updateinDB('supernodesDbHash', myArray) - .then(resp=>{ - RM_RPC - .send_rpc - .call(this, "hash_of_a_supernode_db_response", myArray) - .then(supernodesDbHash_response=> - doSend(supernodesDbHash_response)); - showMessage(`INFO: "supernodesDbHash" table updated.`) - }); - } + // const RM_RPC = new localbitcoinplusplus.rpc; + // RM_RPC + // .send_rpc + // .call(this, "do_you_have_latest_data_for_this_supernode", myArray) + // .then(supernodesDbHash_response=> + // doSend(supernodesDbHash_response)); + } return false; }, @@ -10386,16 +10414,7 @@ const promise2 = removeAllinDB('my_supernode_private_key_chunks'); - return Promise.all([promise1, promise2]) - .then(() => { - // Update the DB Hash and inform rest - if (localbitcoinplusplus.master_configurations.supernodesPubKeys - .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) { - localbitcoinplusplus.actions.getDBHash(); - } - return true; - }) - .catch(e => false); + return Promise.all([promise1, promise2]).then(() => true).catch(e => false); }, // https://stackoverflow.com/a/39538518/5348972 @@ -10611,14 +10630,7 @@ }, updateClosestSupernodeSeeds: function(flo_addr) { return new Promise(async (resolve, reject) => { - await removeAllinDB('myClosestSupernodes') - .then(()=>{ - // Update the DB Hash and inform rest - if (localbitcoinplusplus.master_configurations.supernodesPubKeys - .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) { - localbitcoinplusplus.actions.getDBHash(); - } - }); + await removeAllinDB('myClosestSupernodes'); let nearestSupernodeAddresslist = await localbitcoinplusplus.kademlia.addClosestSupernodeInDB(flo_addr); nearestSupernodeAddresslist.map((nearestSupernodeAddress, index)=>{ updateinDB('myClosestSupernodes', { @@ -12547,11 +12559,6 @@ deposit_arr .trader_flo_address ); - // Update the DB Hash and inform rest - if (localbitcoinplusplus.master_configurations.supernodesPubKeys - .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) { - localbitcoinplusplus.actions.getDBHash(); - } } } ); @@ -13852,13 +13859,7 @@ ( "deposit", deposit_arr.trader_flo_address - ).then(()=>{ - // Update the DB Hash and inform rest - if (localbitcoinplusplus.master_configurations.supernodesPubKeys - .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) { - localbitcoinplusplus.actions.getDBHash(deposit_arr.trader_flo_address); - } - }); + ); } } ); @@ -14761,28 +14762,8 @@ .length > 0) { // Delete orders try { - _removeinDB( - "buyOrders", - buyPipeObj - .id) - .then(()=>{ - // Update the DB Hash and inform rest - if (localbitcoinplusplus.master_configurations.supernodesPubKeys - .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) { - localbitcoinplusplus.actions.getDBHash(buyPipeObj.trader_flo_address); - } - }); - _removeinDB( - "sellOrders", - sellPipeObj - .id) - .then(()=>{ - // Update the DB Hash and inform rest - if (localbitcoinplusplus.master_configurations.supernodesPubKeys - .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) { - localbitcoinplusplus.actions.getDBHash(sellPipeObj.trader_flo_address); - } - }); + _removeinDB("buyOrders", buyPipeObj.id); + _removeinDB("sellOrders", sellPipeObj.id); } catch (error) { callback(false); showMessage(`WARNING: Failed to delete respective buy and sell orders in an operation.`); @@ -15860,11 +15841,6 @@ await addDB(resdbdata, obj[prop]); } } - // Update the DB Hash and inform rest - if (localbitcoinplusplus.master_configurations.supernodesPubKeys - .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) { - localbitcoinplusplus.actions.getDBHash(); - } } } @@ -15942,14 +15918,7 @@ .verify(cancel_request.trade_id, cancel_request.signed_trade_id, trader_data.trader_flo_pubKey)) { removeinDB(tradeDB, cancel_request.trade_id) - .then((id) => { - // Update the DB Hash and inform rest - if (localbitcoinplusplus.master_configurations.supernodesPubKeys - .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) { - localbitcoinplusplus.actions.getDBHash(); - } - showMessage(`Trade Id ${id} deleted.`); - }); + .then((id) => showMessage(`Trade Id ${id} deleted.`)); } else { showMessage( `Failed to verify trade for trade id ${cancel_request.trade_id}` @@ -15982,20 +15951,8 @@ trade_balance_res.supernode_sign, trade_balance_res.supernodePubKey)) { // Delete orders in clients DB try { - removeinDB("buyOrders", trade_balance_res.trade_infos.buy_order_id).then(()=>{ - // Update the DB Hash and inform rest - if (localbitcoinplusplus.master_configurations.supernodesPubKeys - .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) { - localbitcoinplusplus.actions.getDBHash(); - } - }); - removeinDB("sellOrders", trade_balance_res.trade_infos.sell_order_id).then(()=>{ - // Update the DB Hash and inform rest - if (localbitcoinplusplus.master_configurations.supernodesPubKeys - .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) { - localbitcoinplusplus.actions.getDBHash(); - } - }); + removeinDB("buyOrders", trade_balance_res.trade_infos.buy_order_id); + removeinDB("sellOrders", trade_balance_res.trade_infos.sell_order_id); } catch (error) { callback(false); throw new Error(error); @@ -16190,21 +16147,8 @@ removeByIndex('deposit', 'trader_flo_address', depositor_cash_data.trader_flo_address - ).then(()=>{ - // Update the DB Hash and inform rest - if (localbitcoinplusplus.master_configurations.supernodesPubKeys - .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) { - localbitcoinplusplus.actions.getDBHash(); - } - }); - removeinDB('withdraw_cash', withdraw_data.id) - .then(()=>{ - // Update the DB Hash and inform rest - if (localbitcoinplusplus.master_configurations.supernodesPubKeys - .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) { - localbitcoinplusplus.actions.getDBHash(); - } - }); + ); + removeinDB('withdraw_cash', withdraw_data.id); let update_cash_balance_obj = { depositor_cash_data: depositor_cash_data, @@ -16328,20 +16272,8 @@ updateinDB('cash_balances', withdraw_success_response.depositor_cash_data); updateinDB('cash_balances', withdraw_success_response.withdrawer_cash_data); removeByIndex('deposit', 'trader_flo_address', withdraw_success_response.depositor_cash_data - .trader_flo_address).then(()=>{ - // Update the DB Hash and inform rest - if (localbitcoinplusplus.master_configurations.supernodesPubKeys - .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) { - localbitcoinplusplus.actions.getDBHash(); - } - }); - removeinDB('withdraw_cash', withdraw_success_response.withdraw_id).then(()=>{ - // Update the DB Hash and inform rest - if (localbitcoinplusplus.master_configurations.supernodesPubKeys - .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) { - localbitcoinplusplus.actions.getDBHash(); - } - }); + .trader_flo_address); + removeinDB('withdraw_cash', withdraw_success_response.withdraw_id); return true; } return false; @@ -16681,11 +16613,6 @@ } } } - // Update the DB Hash and inform rest - if (localbitcoinplusplus.master_configurations.supernodesPubKeys - .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) { - localbitcoinplusplus.actions.getDBHash(su_db_data.trader_flo_address); - } } } catch (error) { @@ -16812,11 +16739,6 @@ }); } } - // Update the DB Hash and inform rest - if (localbitcoinplusplus.master_configurations.supernodesPubKeys - .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) { - localbitcoinplusplus.actions.getDBHash(); - } } } @@ -16907,11 +16829,6 @@ showMessage(`INFO: "${resdbdata}" datastore syncing is complete.`); }); } - // Update the DB Hash and inform rest - if (localbitcoinplusplus.master_configurations.supernodesPubKeys - .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) { - localbitcoinplusplus.actions.getDBHash(su_db_data.trader_flo_address); - } } } } @@ -17221,11 +17138,6 @@ await addDB(resdbdata, obj[prop]); } } - // Update the DB Hash and inform rest - if (localbitcoinplusplus.master_configurations.supernodesPubKeys - .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) { - localbitcoinplusplus.actions.getDBHash(); - } } } @@ -17321,14 +17233,7 @@ .verify(cancel_request.trade_id, cancel_request.signed_trade_id, trader_data.trader_flo_pubKey)) { backup_server_db_instance.backup_removeinDB(tradeDB, cancel_request.trade_id) - .then((id) => { - // Update the DB Hash and inform rest - if (localbitcoinplusplus.master_configurations.supernodesPubKeys - .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) { - localbitcoinplusplus.actions.getDBHash(trader_data.trader_flo_address); - } - showMessage(`Trade Id ${id} deleted.`); - }); + .then((id) =>showMessage(`Trade Id ${id} deleted.`)); } else { showMessage( `Failed to verify trade for trade id ${cancel_request.trade_id}` @@ -17363,22 +17268,8 @@ // Delete orders in clients DB try { - removeinDB("buyOrders", trade_balance_res.trade_infos.buy_order_id) - .then(()=>{ - // Update the DB Hash and inform rest - if (localbitcoinplusplus.master_configurations.supernodesPubKeys - .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) { - localbitcoinplusplus.actions.getDBHash(); - } - }); - removeinDB("sellOrders", trade_balance_res.trade_infos.sell_order_id) - .then(()=>{ - // Update the DB Hash and inform rest - if (localbitcoinplusplus.master_configurations.supernodesPubKeys - .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) { - localbitcoinplusplus.actions.getDBHash(); - } - }); + removeinDB("buyOrders", trade_balance_res.trade_infos.buy_order_id); + removeinDB("sellOrders", trade_balance_res.trade_infos.sell_order_id); } catch (error) { callback(false); throw new Error(error); @@ -17650,21 +17541,8 @@ backup_server_db_instance.backup_removeByIndex('deposit', 'trader_flo_address', depositor_cash_data.trader_flo_address - ).then(()=>{ - // Update the DB Hash and inform rest - if (localbitcoinplusplus.master_configurations.supernodesPubKeys - .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) { - localbitcoinplusplus.actions.getDBHash(depositor_cash_data.trader_flo_address); - } - }); - backup_server_db_instance.backup_removeinDB('withdraw_cash', withdraw_data.id) - .then(()=>{ - // Update the DB Hash and inform rest - if (localbitcoinplusplus.master_configurations.supernodesPubKeys - .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) { - localbitcoinplusplus.actions.getDBHash(withdraw_data.trader_flo_address); - } - }); + ); + backup_server_db_instance.backup_removeinDB('withdraw_cash', withdraw_data.id); let update_cash_balance_obj = { depositor_cash_data: depositor_cash_data, @@ -17796,21 +17674,8 @@ updateinDB('cash_balances', withdraw_success_response.depositor_cash_data); updateinDB('cash_balances', withdraw_success_response.withdrawer_cash_data); removeByIndex('deposit', 'trader_flo_address', withdraw_success_response.depositor_cash_data - .trader_flo_address).then(()=>{ - // Update the DB Hash and inform rest - if (localbitcoinplusplus.master_configurations.supernodesPubKeys - .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) { - localbitcoinplusplus.actions.getDBHash(); - } - }); - removeinDB('withdraw_cash', withdraw_success_response.withdraw_id) - .then(()=>{ - // Update the DB Hash and inform rest - if (localbitcoinplusplus.master_configurations.supernodesPubKeys - .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) { - localbitcoinplusplus.actions.getDBHash(); - } - }); + .trader_flo_address); + removeinDB('withdraw_cash', withdraw_success_response.withdraw_id); return true; } return false; @@ -18192,11 +18057,6 @@ await BACKUP_DB.backup_addDB(resdbdata, obj[prop]); } } - // Update the DB Hash and inform rest - if (localbitcoinplusplus.master_configurations.supernodesPubKeys - .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) { - localbitcoinplusplus.actions.getDBHash(su_db_data.trader_flo_address); - } } } @@ -18595,11 +18455,6 @@ await addDB(resdbdata, obj[prop]); } } - // Update the DB Hash and inform rest - if (localbitcoinplusplus.master_configurations.supernodesPubKeys - .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) { - localbitcoinplusplus.actions.getDBHash(); - } } } @@ -18777,14 +18632,7 @@ .verify(cancel_request.trade_id, cancel_request.signed_trade_id, trader_data.trader_flo_pubKey)) { backup_server_db_instance.backup_removeinDB(tradeDB, cancel_request.trade_id) - .then((id) => { - // Update the DB Hash and inform rest - if (localbitcoinplusplus.master_configurations.supernodesPubKeys - .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) { - localbitcoinplusplus.actions.getDBHash(cancel_request.trader_flo_address); - } - showMessage(`Trade Id ${id} deleted.`); - }); + .then((id) => showMessage(`Trade Id ${id} deleted.`)); } else { showMessage( `Failed to verify trade for trade id ${cancel_request.trade_id}` @@ -18836,22 +18684,8 @@ // Delete orders in clients DB try { - backup_server_db_instance.backup_removeinDB("buyOrders", trade_balance_res.trade_infos.buy_order_id) - .then(()=>{ - // Update the DB Hash and inform rest - if (localbitcoinplusplus.master_configurations.supernodesPubKeys - .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) { - localbitcoinplusplus.actions.getDBHash(trade_balance_res.trade_infos.buyer_flo_id); - } - }); - backup_server_db_instance.backup_removeinDB("sellOrders", trade_balance_res.trade_infos.sell_order_id) - .then(()=>{ - // Update the DB Hash and inform rest - if (localbitcoinplusplus.master_configurations.supernodesPubKeys - .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) { - localbitcoinplusplus.actions.getDBHash(trade_balance_res.trade_infos.seller_flo_id); - } - }); + backup_server_db_instance.backup_removeinDB("buyOrders", trade_balance_res.trade_infos.buy_order_id); + backup_server_db_instance.backup_removeinDB("sellOrders", trade_balance_res.trade_infos.sell_order_id); } catch (error) { callback(false); throw new Error(error); @@ -18954,21 +18788,8 @@ backup_server_db_instance.backup_updateinDB('cash_balances', withdraw_success_response.depositor_cash_data); backup_server_db_instance.backup_updateinDB('cash_balances', withdraw_success_response.withdrawer_cash_data); backup_server_db_instance.backup_removeByIndex('deposit', 'trader_flo_address', withdraw_success_response.depositor_cash_data - .trader_flo_address).then(()=>{ - // Update the DB Hash and inform rest - if (localbitcoinplusplus.master_configurations.supernodesPubKeys - .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) { - localbitcoinplusplus.actions.getDBHash(withdraw_success_response.depositor_cash_data.trader_flo_address); - } - }); - backup_server_db_instance.backup_removeinDB('withdraw_cash', withdraw_success_response.withdraw_id) - .then(()=>{ - // Update the DB Hash and inform rest - if (localbitcoinplusplus.master_configurations.supernodesPubKeys - .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) { - localbitcoinplusplus.actions.getDBHash(withdraw_success_response.trader_flo_address); - } - }); + .trader_flo_address); + backup_server_db_instance.backup_removeinDB('withdraw_cash', withdraw_success_response.withdraw_id); return true; } return false; @@ -19423,11 +19244,6 @@ showMessage(`INFO: "${resdbdata}" datastore syncing is complete.`); }); } - // Update the DB Hash and inform rest - if (localbitcoinplusplus.master_configurations.supernodesPubKeys - .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) { - localbitcoinplusplus.actions.getDBHash(su_db_data.trader_flo_address); - } } } } @@ -19440,7 +19256,7 @@ } break; - case "hash_of_a_supernode_db_response": + case "do_you_have_latest_data_for_this_supernode": if (localbitcoinplusplus.master_configurations.supernodesPubKeys .includes(res_obj.nodePubKey)) { const response_object = res_obj.params[0]; @@ -19458,16 +19274,18 @@ throw new Error(backup_db_error_msg); }; - backup_server_db_instance.backup_readDB('supernodesDbHash', response_object.id) - .then(old_db_hash_obj=>{ - if(typeof old_db_hash_obj=="object") { - if((old_db_hash_obj.vectorClock>=response_object.vectorClock) - || (old_db_hash_obj.timestamp>=response_object.timestamp)) return; - } - backup_server_db_instance.backup_updateinDB('supernodesDbHash', response_object) - .then(()=>showMessage(`INFO: Datastore "supernodesDbHash" updated - with hash ${response_object.DBHash} on ${response_object.timestamp}.`)); - }); + // backup_server_db_instance.backup_readDB('supernodesDbHash', response_object.id) + // .then(old_db_hash_obj=>{ + // if(typeof old_db_hash_obj=="object") { + // if((old_db_hash_obj.vectorClock>=response_object.vectorClock) + // || (old_db_hash_obj.timestamp>=response_object.timestamp)) return; + // } + // backup_server_db_instance.backup_updateinDB('supernodesDbHash', response_object) + // .then(()=>showMessage(`INFO: Datastore "supernodesDbHash" updated + // with hash ${response_object.DBHash} on ${response_object.timestamp}.`)); + // }); + + }); @@ -19503,7 +19321,8 @@ for (key in my_db_hash_obj) { if (my_db_hash_obj.hasOwnProperty(key)) { - if (response_object[key] && response_object[key] !== my_db_hash_obj[key] + if (response_object[key] + && response_object[key] !== my_db_hash_obj[key] && !['DBHash', 'data_of', 'id', 'timestamp', 'vectorClock'].includes(key)) { diffs[key] = my_db_hash_obj[key]; } @@ -20072,11 +19891,6 @@ await store.add(dbObject); await request.complete; console.info("Data added in " + tablename); - // Update the DB Hash and inform rest - if (localbitcoinplusplus.master_configurations.supernodesPubKeys - .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) { - //localbitcoinplusplus.actions.getDBHash(); - } return dbObject; } catch (error) { return new Error(error); @@ -20119,11 +19933,6 @@ await store.put(Obj); await request.complete; } - // Update the DB Hash and inform rest - if (localbitcoinplusplus.master_configurations.supernodesPubKeys - .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) { - //localbitcoinplusplus.actions.getDBHash(); - } return Obj; } catch (error) { @@ -20455,13 +20264,6 @@ await store.add(dbObject); await this.request.complete; console.info("Data added in " + tablename); - // Update the DB Hash and inform rest - if (localbitcoinplusplus.master_configurations.supernodesPubKeys - .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) { - if (typeof dbObject.trader_flo_address=="string") { - //localbitcoinplusplus.actions.getDBHash(dbObject.trader_flo_address); - } - } return dbObject; } catch (error) { return new Error(error); @@ -20502,13 +20304,6 @@ await that.request.complete; } }); - // Update the DB Hash and inform rest - if (localbitcoinplusplus.master_configurations.supernodesPubKeys - .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) { - if (typeof dbObject.trader_flo_address=="string") { - localbitcoinplusplus.actions.getDBHash(dbObject.trader_flo_address); - } - } resolve(Obj); return; } @@ -20516,15 +20311,6 @@ } else { await store.put(Obj); await that.request.complete; - - // Update the DB Hash and inform rest - if (localbitcoinplusplus.master_configurations.supernodesPubKeys - .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) { - if (typeof dbObject.trader_flo_address=="string") { - //localbitcoinplusplus.actions.getDBHash(dbObject.trader_flo_address); - } - } - return Obj; } @@ -21654,14 +21440,12 @@ }); // Find out if you are the next eligible backup supernode, - // If true, send dead supernode's data to all your backup supernodes - // which are not dead supernode's backup supernodes to sync - // data from you + const mcs = await readAllDB('myClosestSupernodes'); const index = mcs.findIndex(f=>f.trader_flo_address==getFLOId); tail = mcs.splice(0, index); const newClosestSupernodeMasterList = mcs.concat(tail); - + for(i=0; i<=newClosestSupernodeMasterList.length; i++) { if(newClosestSupernodeMasterList[i].is_live==true) break; if(newClosestSupernodeMasterList[i].trader_flo_address== @@ -21671,29 +21455,42 @@ // If not, either get the data or don't serve the users of // that dead supernode. - await localbitcoinplusplus.actions.getDBHash(getFLOId); + const tableArray = ["deposit", "withdraw_cash", "withdraw_btc", "cash_balances", + "crypto_balances", "buyOrders", "sellOrders", "system_btc_reserves_private_keys"]; + + const su_db_data = await localbitcoinplusplus.actions.get_sharable_db_data(tableArray, getFLOId); + + const dbHashData = await localbitcoinplusplus.actions.getDBTablesLatestHashAndTimestamp(getFLOId, su_db_data); + + // Now you have db tables timestamp and tables hashes. Send it to other supernodes to check + // if you have the latest data. If you don't have the latest data, someone + // will send you the latest data which you can verify before updating. + + RM_RPC + .send_rpc + .call(this, "do_you_have_latest_data_for_this_supernode", dbHashData) + .then(server_sync_response=>doSend(server_sync_response)); + + // Send dead supernode's data to all your backup supernodes + // which are not dead supernode's backup supernodes to sync + // data from you const nonBackUpSusForDeadSu = newClosestSupernodeMasterList .filter(function(obj) { return mcs.indexOf(obj) == -1; }); console.log(nonBackUpSusForDeadSu); - - const tableArray = ["deposit", "withdraw_cash", "withdraw_btc", "cash_balances" - , "crypto_balances", "buyOrders", "sellOrders", "system_btc_reserves_private_keys"]; + + if (typeof su_db_data == "object") { + nonBackUpSusForDeadSu.map(nbs=>{ + su_db_data.trader_flo_address = nbs.trader_flo_address; + su_db_data.receiver_flo_address = nbs.trader_flo_address; - localbitcoinplusplus.actions.get_sharable_db_data(tableArray, getFLOId) - .then(function (su_db_data) { - if (typeof su_db_data == "object") { - nonBackUpSusForDeadSu.map(nbs=>{ - su_db_data.trader_flo_address = nbs.trader_flo_address; - su_db_data.receiver_flo_address = nbs.trader_flo_address; - RM_RPC - .send_rpc - .call(this, "sync_backup_supernode_from_backup_supernode_response", su_db_data) - .then(server_sync_response=>doSend(server_sync_response, nbs.trader_flo_address)); - }); - } - }); + RM_RPC + .send_rpc + .call(this, "sync_backup_supernode_from_backup_supernode_response", su_db_data) + .then(server_sync_response=>doSend(server_sync_response, nbs.trader_flo_address)); + }); + } break; } }