diff --git a/supernode/index.html b/supernode/index.html index 02826a2..28a897a 100644 --- a/supernode/index.html +++ b/supernode/index.html @@ -10071,7 +10071,7 @@ RMAssets = `masterFLOPubKey=029EF7838D4D103E62262394B5417E8ABFD75539D19E61CA5FD0C2051B69B29910 #!#tradableAsset1=BTC,FLO,BTC_TEST,FLO_TEST#!#tradableAsset2=INR,USD,BTC,FLO,BTC_TEST,FLO_TEST, - #!#validTradingAmount=10,50,100,#!#btcTradeMargin=5000 + #!#validTradingAmount=10000,50000,100000,#!#btcTradeMargin=5000 #!#MaxBackups=2 #!#supernodesPubKeys=0315C3A20FE7096CC2E0F81A80D5F1A687B8F9EFA65242A0B0881E1BA3EE7D7D53, 03F7493F11B8E44B9798CD434D20FBE7FA34B9779D144984889D11A17C56A18742,039B4AA00DBFC0A6631DE6DA83526611A0E6B857D3579DF840BBDEAE8B6898E3B6, @@ -16661,8 +16661,8 @@ .call(this, "reconnect_with_another_supernode", { "trader_flo_address": su_db_data.trader_flo_address, //"receiver_flo_address": "", // message for all - "ws_url": websocket.url, - "server_msg": `Your primary Supernode is live and synced. You can start using the system.`, + //"ws_url": websocket.url, + "server_msg": `Your primary/secondary Supernode is live and synced. You can start using the system.`, }).then(server_response=>doSend(server_response)); }); @@ -16743,19 +16743,36 @@ break; case "reconnect_with_another_supernode": - if (typeof res_obj.params == "object" && typeof res_obj.params[0] == "object") { - let su_db_data = res_obj.params[0]; - const RM_RPC = new localbitcoinplusplus.rpc; - RM_RPC.filter_legit_requests(su_db_data.trader_flo_address, - async function (is_valid_request) { - if (is_valid_request!==true) return; + if (typeof res_obj.params == "object" && typeof res_obj.params[0] == "object" + && localbitcoinplusplus.master_configurations.supernodesPubKeys + .includes(res_obj.nodePubKey) + ) { + (async function() { + let su_db_data = res_obj.params[0]; + const MCS = await localbitcoinplusplus.kademlia.determineClosestSupernode(su_db_data.trader_flo_address, 10); + + // If user is already connected to primary return back + if (localbitcoinplusplus.MY_SUPERNODE_FLO_ADDRESS == MCS[0].data.id) return; + + // If user is already connected to given Supernode return + if (localbitcoinplusplus.MY_SUPERNODE_FLO_ADDRESS == su_db_data.trader_flo_address) return; + + const mcslist = MCS.map(m=>m.data.id); + + if(mcslist.indexOf(su_db_data.trader_flo_address) < mcslist.indexOf(localbitcoinplusplus.MY_SUPERNODE_FLO_ADDRESS)) { if (websocket.readyState === WebSocket.OPEN) { websocket.close(); - await startWebSocket(su_db_data.ws_url); - showMssage(`INFO: ${su_db_data.server_msg}`); + 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}`); + } else { + alert(`INFO: Please reload the page.`); + } } } - ); + + })(); } break; @@ -18158,6 +18175,40 @@ } break; + case "reconnect_with_another_supernode": + if (typeof res_obj.params == "object" && typeof res_obj.params[0] == "object" + && localbitcoinplusplus.master_configurations.supernodesPubKeys + .includes(res_obj.nodePubKey) + ) { + (async function() { + let su_db_data = res_obj.params[0]; + const MCS = await localbitcoinplusplus.kademlia.determineClosestSupernode(su_db_data.trader_flo_address, 10); + + // If user is already connected to primary return back + if (localbitcoinplusplus.MY_SUPERNODE_FLO_ADDRESS == MCS[0].data.id) return; + + // If user is already connected to given Supernode return + if (localbitcoinplusplus.MY_SUPERNODE_FLO_ADDRESS == su_db_data.trader_flo_address) return; + + const mcslist = MCS.map(m=>m.data.id); + + 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}`); + } else { + alert(`INFO: Please reload the page.`); + } + } + } + + })(); + } + break; + default: break; } @@ -20175,50 +20226,48 @@ wsUri = await localbitcoinplusplus.kademlia.getSupernodeSeed(idbData.myLocalFLOAddress); if (localbitcoinplusplus.master_configurations.supernodesPubKeys.includes(idbData.myLocalFLOPublicKey)) { - if (typeof idbData.lastConnectedSupernode == "string" - && idbData.lastConnectedSupernode !== wsUri[0].trader_flo_address) { - showMessage(`INFO: We are fetching your latest data. This could take some time. Do not close the window until then.`); - - // Get data for deposits and withdraw starting from first (and currently alive) backup supernode - let closestSuNodes = await readAllDB('myClosestSupernodes'); - let firstAliveBackupFloIdForPrimarySupernode; - - for (let index = 1; index <= closestSuNodes.length-1; index++) { - if (closestSuNodes[index].is_live==true && typeof firstAliveBackupFloIdForPrimarySupernode !== "string") { - firstAliveBackupFloIdForPrimarySupernode = closestSuNodes[index].trader_flo_address; - localbitcoinplusplus.actions - .sync_primary_supernode_from_backup_supernode(closestSuNodes[0].trader_flo_address, firstAliveBackupFloIdForPrimarySupernode); - } - } - - // 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; - - localbitcoinplusplus.actions - .sync_backup_supernode_from_backup_supernode(closestSuNodes[0].trader_flo_address, - firstAliveBackupFloIdForBackupSupernode, closestSuNodes[index].trader_flo_address); - } - } - } - } + showMessage(`INFO: Syncing of latest data starting. This could take some time. Do not close the window until then.`); + + // Get data for deposits and withdraw starting from first (and currently alive) backup supernode + let closestSuNodes = await readAllDB('myClosestSupernodes'); + let firstAliveBackupFloIdForPrimarySupernode; + + for (let index = 1; index <= closestSuNodes.length-1; index++) { + if (closestSuNodes[index].is_live==true && typeof firstAliveBackupFloIdForPrimarySupernode !== "string") { + firstAliveBackupFloIdForPrimarySupernode = closestSuNodes[index].trader_flo_address; + localbitcoinplusplus.actions + .sync_primary_supernode_from_backup_supernode(closestSuNodes[0].trader_flo_address, firstAliveBackupFloIdForPrimarySupernode); + } } + + // 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; + + localbitcoinplusplus.actions + .sync_backup_supernode_from_backup_supernode(closestSuNodes[0].trader_flo_address, + firstAliveBackupFloIdForBackupSupernode, closestSuNodes[index].trader_flo_address); + } + } + } + } + } if (!localbitcoinplusplus.master_configurations.supernodesPubKeys